[PATCH 5/8] sparc32: Use memblock when freeing highmem pages

From: Sam Ravnborg

Date: Sun Dec 31 2023 - 07:56:43 EST


Signed-off-by: Sam Ravnborg <sam@xxxxxxxxxxxx>
Cc: "David S. Miller" <davem@xxxxxxxxxxxxx>
Cc: Andreas Larsson <andreas@xxxxxxxxxxx>
---
arch/sparc/mm/init_32.c | 34 ++++++++++++++--------------------
1 file changed, 14 insertions(+), 20 deletions(-)

diff --git a/arch/sparc/mm/init_32.c b/arch/sparc/mm/init_32.c
index b5dd819dc314..a55d34c94d12 100644
--- a/arch/sparc/mm/init_32.c
+++ b/arch/sparc/mm/init_32.c
@@ -171,21 +171,10 @@ void __init paging_init(void)
device_scan();
}

-static void map_high_region(unsigned long start_pfn, unsigned long end_pfn)
-{
- unsigned long tmp;
-
-#ifdef CONFIG_DEBUG_HIGHMEM
- printk("mapping high region %08lx - %08lx\n", start_pfn, end_pfn);
-#endif
-
- for (tmp = start_pfn; tmp < end_pfn; tmp++)
- free_highmem_page(pfn_to_page(tmp));
-}
-
void __init mem_init(void)
{
- int i;
+ phys_addr_t range_start, range_end;
+ u64 i;

if (PKMAP_BASE+LAST_PKMAP*PAGE_SIZE >= FIXADDR_START) {
prom_printf("BUG: fixmap and pkmap areas overlap\n");
@@ -202,20 +191,25 @@ void __init mem_init(void)
memset((void *)empty_zero_page, 0, PAGE_SIZE);

max_mapnr = max_pfn - pfn_base;
+
high_memory = __va(max_low_pfn << PAGE_SHIFT);
memblock_free_all();

- for (i = 0; sp_banks[i].num_bytes != 0; i++) {
- unsigned long start_pfn = sp_banks[i].base_addr >> PAGE_SHIFT;
- unsigned long end_pfn = (sp_banks[i].base_addr + sp_banks[i].num_bytes) >> PAGE_SHIFT;
+ for_each_free_mem_range(i, NUMA_NO_NODE, MEMBLOCK_NONE,
+ &range_start, &range_end, NULL) {
+ unsigned long start = PFN_UP(range_start);
+ unsigned long end = PFN_DOWN(range_end);

- if (end_pfn <= highstart_pfn)
+ /* Ignore complete lowmem entries */
+ if (end <= max_low_pfn)
continue;

- if (start_pfn < highstart_pfn)
- start_pfn = highstart_pfn;
+ /* Truncate partial highmem entries */
+ if (start < max_low_pfn)
+ start = max_low_pfn;

- map_high_region(start_pfn, end_pfn);
+ for (; start < end; start++)
+ free_highmem_page(pfn_to_page(start));
}
}

--
2.53.0


--7JT2ezVoPwppFeaz
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
filename="0006-sparc32-Drop-mem-support.patch"