A sysfs memory file is created for each 128MiB or 2GiB of a memory block on x86. [1] When the start address of a memory block is not backed by struct page, i.e. memory range is not aligned by the memory block size, reading its valid_zones attribute file leads to a kernel oops. This patch-set fixes this issue.
Patch 1 first fixes an issue in test_pages_in_a_zone() that it does not test the start section. Patch 2 then fixes the kernel oops by extending test_pages_in_a_zone() to return valid [start, end). [1] 2GB when the system has 64GB or larger memory. --- Toshi Kani (2): 1/2 mm/memory_hotplug.c: check start_pfn in test_pages_in_a_zone() 2/2 base/memory, hotplug: fix a kernel oops in show_valid_zones() --- drivers/base/memory.c | 12 ++++++------ include/linux/memory_hotplug.h | 3 ++- mm/memory_hotplug.c | 28 +++++++++++++++++++++------- 3 files changed, 29 insertions(+), 14 deletions(-)