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

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
...@@ -305,9 +305,7 @@ void dma_free_coherent(struct device *dev, size_t size, ...@@ -305,9 +305,7 @@ void dma_free_coherent(struct device *dev, size_t size,
if (pfn_valid(pfn)) { if (pfn_valid(pfn)) {
struct page *page = pfn_to_page(pfn); struct page *page = pfn_to_page(pfn);
ClearPageReserved(page); __free_reserved_page(page);
__free_page(page);
continue; continue;
} }
} }
......
...@@ -176,8 +176,7 @@ void consistent_free(size_t size, void *vaddr) ...@@ -176,8 +176,7 @@ void consistent_free(size_t size, void *vaddr)
page = virt_to_page(vaddr); page = virt_to_page(vaddr);
do { do {
ClearPageReserved(page); __free_reserved_page(page);
__free_page(page);
page++; page++;
} while (size -= PAGE_SIZE); } while (size -= PAGE_SIZE);
#else #else
...@@ -194,9 +193,7 @@ void consistent_free(size_t size, void *vaddr) ...@@ -194,9 +193,7 @@ void consistent_free(size_t size, void *vaddr)
pte_clear(&init_mm, (unsigned int)vaddr, ptep); pte_clear(&init_mm, (unsigned int)vaddr, ptep);
if (pfn_valid(pfn)) { if (pfn_valid(pfn)) {
page = pfn_to_page(pfn); page = pfn_to_page(pfn);
__free_reserved_page(page);
ClearPageReserved(page);
__free_page(page);
} }
} }
vaddr += PAGE_SIZE; vaddr += PAGE_SIZE;
......
...@@ -287,9 +287,7 @@ void __dma_free_coherent(size_t size, void *vaddr) ...@@ -287,9 +287,7 @@ void __dma_free_coherent(size_t size, void *vaddr)
pte_clear(&init_mm, addr, ptep); pte_clear(&init_mm, addr, ptep);
if (pfn_valid(pfn)) { if (pfn_valid(pfn)) {
struct page *page = pfn_to_page(pfn); struct page *page = pfn_to_page(pfn);
__free_reserved_page(page);
ClearPageReserved(page);
__free_page(page);
} }
} }
addr += PAGE_SIZE; addr += PAGE_SIZE;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment