summaryrefslogtreecommitdiffstats
path: root/mm/page_alloc.c
diff options
context:
space:
mode:
authorTony Luck <tony.luck@intel.com>2017-03-08 12:35:39 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2017-03-08 14:10:10 -0500
commitb4fb8f66f1ae2e167d06c12d018025a8d4d3ba7e (patch)
tree919fe4cb94b39a50fc2a7566e1a9e96b24a0c987 /mm/page_alloc.c
parent8557b8e43a1de99b12b0d61384742e0d5d0adf84 (diff)
mm, page_alloc: Add missing check for memory holes
Commit 13ad59df67f1 ("mm, page_alloc: avoid page_to_pfn() when merging buddies") moved the check for memory holes out of page_is_buddy() and had the callers do the check. But this wasn't done correctly in one place which caused ia64 to crash very early in boot. Update to fix that and make ia64 boot again. [ v2: Vlastimil pointed out we don't need to call page_to_pfn() since we already have the result of that in "buddy_pfn" ] Fixes: 13ad59df67f1 ("avoid page_to_pfn() when merging buddies") Cc: Mel Gorman <mgorman@techsingularity.net> Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com> Cc: Michal Hocko <mhocko@kernel.org> Cc: "Kirill A. Shutemov" <kirill.shutemov@linux.intel.com> Cc: Johannes Weiner <hannes@cmpxchg.org> Cc: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Tony Luck <tony.luck@intel.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm/page_alloc.c')
-rw-r--r--mm/page_alloc.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index eaa64d2ffdc5..6cbde310abed 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -873,7 +873,8 @@ done_merging:
873 higher_page = page + (combined_pfn - pfn); 873 higher_page = page + (combined_pfn - pfn);
874 buddy_pfn = __find_buddy_pfn(combined_pfn, order + 1); 874 buddy_pfn = __find_buddy_pfn(combined_pfn, order + 1);
875 higher_buddy = higher_page + (buddy_pfn - combined_pfn); 875 higher_buddy = higher_page + (buddy_pfn - combined_pfn);
876 if (page_is_buddy(higher_page, higher_buddy, order + 1)) { 876 if (pfn_valid_within(buddy_pfn) &&
877 page_is_buddy(higher_page, higher_buddy, order + 1)) {
877 list_add_tail(&page->lru, 878 list_add_tail(&page->lru,
878 &zone->free_area[order].free_list[migratetype]); 879 &zone->free_area[order].free_list[migratetype]);
879 goto out; 880 goto out;