Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c1ce4b37 authored by Xishi Qiu's avatar Xishi Qiu Committed by Linus Torvalds
Browse files

mm/arch: use __free_reserved_page() to simplify the code



Use __free_reserved_page() to simplify the code in arch.

It used split_page() in consistent_alloc()/__dma_alloc_coherent()/dma_alloc_coherent(),
so page->_count == 1, and we can free it safely.

__free_reserved_page()
	ClearPageReserved()
	init_page_count()  // it won't change the value
	__free_page()

Signed-off-by: default avatarXishi Qiu <qiuxishi@huawei.com>
Cc: James Hogan <james.hogan@imgtec.com>
Cc: Michal Simek <monstr@monstr.eu>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Paul Mackerras <paulus@samba.org>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 9e4be470
Loading
Loading
Loading
Loading
+1 −3
Original line number Diff line number Diff line
@@ -305,9 +305,7 @@ void dma_free_coherent(struct device *dev, size_t size,

			if (pfn_valid(pfn)) {
				struct page *page = pfn_to_page(pfn);
				ClearPageReserved(page);

				__free_page(page);
				__free_reserved_page(page);
				continue;
			}
		}
+2 −5
Original line number Diff line number Diff line
@@ -176,8 +176,7 @@ void consistent_free(size_t size, void *vaddr)
	page = virt_to_page(vaddr);

	do {
		ClearPageReserved(page);
		__free_page(page);
		__free_reserved_page(page);
		page++;
	} while (size -= PAGE_SIZE);
#else
@@ -194,9 +193,7 @@ void consistent_free(size_t size, void *vaddr)
			pte_clear(&init_mm, (unsigned int)vaddr, ptep);
			if (pfn_valid(pfn)) {
				page = pfn_to_page(pfn);

				ClearPageReserved(page);
				__free_page(page);
				__free_reserved_page(page);
			}
		}
		vaddr += PAGE_SIZE;
+1 −3
Original line number Diff line number Diff line
@@ -287,9 +287,7 @@ void __dma_free_coherent(size_t size, void *vaddr)
			pte_clear(&init_mm, addr, ptep);
			if (pfn_valid(pfn)) {
				struct page *page = pfn_to_page(pfn);

				ClearPageReserved(page);
				__free_page(page);
				__free_reserved_page(page);
			}
		}
		addr += PAGE_SIZE;