]> git.baikalelectronics.ru Git - kernel.git/commit
Revert "mm/page_alloc: fix memmap_init_zone pageblock alignment"
authorArd Biesheuvel <ard.biesheuvel@linaro.org>
Wed, 14 Mar 2018 19:29:37 +0000 (19:29 +0000)
committerLinus Torvalds <torvalds@linux-foundation.org>
Wed, 14 Mar 2018 23:33:28 +0000 (16:33 -0700)
commit13f5c828d6dfd402f10c6655a2c4464469b0dfaf
tree6aa6d607f562ab2804bfe1ee94a4afcc296e4590
parent4728db89b11cb068b53dd3ea1e3a8b42f0948f79
Revert "mm/page_alloc: fix memmap_init_zone pageblock alignment"

This reverts commit 7d1d952c018f90582b5fdb36fe00465885440449.

Commit 7d1d952c018f ("mm/page_alloc: fix memmap_init_zone pageblock
alignment") modified the logic in memmap_init_zone() to initialize
struct pages associated with invalid PFNs, to appease a VM_BUG_ON()
in move_freepages(), which is redundant by its own admission, and
dereferences struct page fields to obtain the zone without checking
whether the struct pages in question are valid to begin with.

Commit 7d1d952c018f only makes it worse, since the rounding it does
may cause pfn assume the same value it had in a prior iteration of
the loop, resulting in an infinite loop and a hang very early in the
boot. Also, since it doesn't perform the same rounding on start_pfn
itself but only on intermediate values following an invalid PFN, we
may still hit the same VM_BUG_ON() as before.

So instead, let's fix this at the core, and ensure that the BUG
check doesn't dereference struct page fields of invalid pages.

Fixes: 7d1d952c018f ("mm/page_alloc: fix memmap_init_zone pageblock alignment")
Tested-by: Jan Glauber <jglauber@cavium.com>
Tested-by: Shanker Donthineni <shankerd@codeaurora.org>
Cc: Daniel Vacek <neelx@redhat.com>
Cc: Mel Gorman <mgorman@techsingularity.net>
Cc: Michal Hocko <mhocko@suse.com>
Cc: Paul Burton <paul.burton@imgtec.com>
Cc: Pavel Tatashin <pasha.tatashin@oracle.com>
Cc: Vlastimil Babka <vbabka@suse.cz>
Cc: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
mm/page_alloc.c