arm64: Use correct method to calculate nomap region boundaries
authorHuacai Chen <chenhuacai@loongson.cn>
Fri, 22 Oct 2021 07:06:46 +0000 (15:06 +0800)
committerCatalin Marinas <catalin.marinas@arm.com>
Wed, 5 Jan 2022 14:46:06 +0000 (14:46 +0000)
Nomap regions are treated as "reserved". When region boundaries are not
page aligned, we usually increase the "reserved" regions rather than
decrease them. So, we should use memblock_region_reserved_base_pfn()/
memblock_region_reserved_end_pfn() instead of memblock_region_memory_
base_pfn()/memblock_region_memory_base_pfn() to calculate boundaries.

Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
Link: https://lore.kernel.org/r/20211022070646.41923-1-chenhuacai@loongson.cn
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
arch/arm64/kernel/setup.c

index a804305..f705739 100644 (file)
@@ -237,12 +237,14 @@ static void __init request_standard_resources(void)
                if (memblock_is_nomap(region)) {
                        res->name  = "reserved";
                        res->flags = IORESOURCE_MEM;
+                       res->start = __pfn_to_phys(memblock_region_reserved_base_pfn(region));
+                       res->end = __pfn_to_phys(memblock_region_reserved_end_pfn(region)) - 1;
                } else {
                        res->name  = "System RAM";
                        res->flags = IORESOURCE_SYSTEM_RAM | IORESOURCE_BUSY;
+                       res->start = __pfn_to_phys(memblock_region_memory_base_pfn(region));
+                       res->end = __pfn_to_phys(memblock_region_memory_end_pfn(region)) - 1;
                }
-               res->start = __pfn_to_phys(memblock_region_memory_base_pfn(region));
-               res->end = __pfn_to_phys(memblock_region_memory_end_pfn(region)) - 1;
 
                request_resource(&iomem_resource, res);