Re: [PATCH] arm64: mm: Fix memmap to be initialized for the entire section

From: David Daney
Date: Mon Oct 10 2016 - 11:34:07 EST

On 10/06/2016 02:52 AM, Robert Richter wrote:
There is a memory setup problem on ThunderX systems with certain
memory configurations. The symptom is

kernel BUG at mm/page_alloc.c:1848!

This happens for some configs with 64k page size enabled. The bug
triggers for page zones with some pages in the zone not assigned to
this particular zone. In my case some pages that are marked as nomap
were not reassigned to the new zone of node 1, so those are still
assigned to node 0.

The reason for the mis-configuration is a change in pfn_valid() which
reports pages marked nomap as invalid:

68709f45385a arm64: only consider memblocks with NOMAP cleared for linear mapping

This causes pages marked as nomap being no long reassigned to the new
zone in memmap_init_zone() by calling __init_single_pfn().

Fixing this by restoring the old behavior of pfn_valid() to use
memblock_is_memory(). Also changing users of pfn_valid() in arm64 code
to use memblock_is_map_memory() where necessary. This only affects
code in ioremap.c. The code in mmu.c still can use the new version of

Should be marked stable v4.5..

In that case you should add:

Cc: <stable@xxxxxxxxxxxxxxx> # 4.5.x-


Signed-off-by: Robert Richter <rrichter@xxxxxxxxxx>