Skip to content

Commit

Permalink
mm/arch: use __free_reserved_page() to simplify the code
Browse files Browse the repository at this point in the history
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: Xishi Qiu <[email protected]>
Cc: James Hogan <[email protected]>
Cc: Michal Simek <[email protected]>
Cc: Benjamin Herrenschmidt <[email protected]>
Cc: Paul Mackerras <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
  • Loading branch information
Xishi Qiu authored and torvalds committed Nov 13, 2013
1 parent 9e4be47 commit c1ce4b3
Show file tree
Hide file tree
Showing 3 changed files with 4 additions and 11 deletions.
4 changes: 1 addition & 3 deletions arch/metag/kernel/dma.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
}
Expand Down
7 changes: 2 additions & 5 deletions arch/microblaze/mm/consistent.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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;
Expand Down
4 changes: 1 addition & 3 deletions arch/powerpc/mm/dma-noncoherent.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down

0 comments on commit c1ce4b3

Please sign in to comment.