diff options
author | Tejun Heo <tj@kernel.org> | 2011-07-12 03:58:06 -0400 |
---|---|---|
committer | H. Peter Anvin <hpa@linux.intel.com> | 2011-07-13 19:35:56 -0400 |
commit | 53348f27168534561c0c814843bbf181314374f4 (patch) | |
tree | 619f7945ecb15317dd211c68267eb6603295521f /mm/page_alloc.c | |
parent | bf61549a2d8e0326f5d6e4d1718883a7212d725f (diff) |
bootmem: Fix __free_pages_bootmem() to use @order properly
a226f6c899 (FRV: Clean up bootmem allocator's page freeing algorithm)
separated out __free_pages_bootmem() from free_all_bootmem_core().
__free_pages_bootmem() takes @order argument but it assumes @order is
either 0 or ilog2(BITS_PER_LONG). Note that all the current users
match that assumption and this doesn't cause actual problems.
Fix it by using 1 << order instead of BITS_PER_LONG.
Signed-off-by: Tejun Heo <tj@kernel.org>
Link: http://lkml.kernel.org/r/1310457490-3356-3-git-send-email-tj@kernel.org
Cc: David Howells <dhowells@redhat.com>
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
Diffstat (limited to 'mm/page_alloc.c')
-rw-r--r-- | mm/page_alloc.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 9119faae6e6a..b6da6ed818a8 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c | |||
@@ -705,10 +705,10 @@ void __meminit __free_pages_bootmem(struct page *page, unsigned int order) | |||
705 | int loop; | 705 | int loop; |
706 | 706 | ||
707 | prefetchw(page); | 707 | prefetchw(page); |
708 | for (loop = 0; loop < BITS_PER_LONG; loop++) { | 708 | for (loop = 0; loop < (1 << order); loop++) { |
709 | struct page *p = &page[loop]; | 709 | struct page *p = &page[loop]; |
710 | 710 | ||
711 | if (loop + 1 < BITS_PER_LONG) | 711 | if (loop + 1 < (1 << order)) |
712 | prefetchw(p + 1); | 712 | prefetchw(p + 1); |
713 | __ClearPageReserved(p); | 713 | __ClearPageReserved(p); |
714 | set_page_count(p, 0); | 714 | set_page_count(p, 0); |