mirror of
https://github.com/torvalds/linux.git
synced 2026-07-28 01:55:51 +02:00
mips: fix HIGHMEM initialization
Commit6faea3422e("arch, mm: streamline HIGHMEM freeing") overzealously removed mem_init_free_highmem() function that beside freeing high memory pages checked for CPU support for high memory as a prerequisite. Partially restore mem_init_free_highmem() with a new highmem_init() name and make it discard high memory in case there is no CPU support for it. Link: https://lkml.kernel.org/r/20251231105701.519711-1-rppt@kernel.org Fixes:6faea3422e("arch, mm: streamline HIGHMEM freeing") Signed-off-by: Mike Rapoport (Microsoft) <rppt@kernel.org> Reported-by: Markus Stockhausen <markus.stockhausen@gmx.de> Cc: Chris Packham <chris.packham@alliedtelesis.co.nz> Cc: Hauke Mehrtens <hauke@hauke-m.de> Cc: Jonas Jelonek <jelonek.jonas@gmail.com> Cc: Thomas Bogendoerfer <tsbogend@alpha.franken.de> Cc: Thomas Gleinxer <tglx@linutronix.de> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
b020191692
commit
f171b55f14
|
|
@ -425,6 +425,28 @@ void __init paging_init(void)
|
||||||
static struct kcore_list kcore_kseg0;
|
static struct kcore_list kcore_kseg0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static inline void __init highmem_init(void)
|
||||||
|
{
|
||||||
|
#ifdef CONFIG_HIGHMEM
|
||||||
|
unsigned long tmp;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If CPU cannot support HIGHMEM discard the memory above highstart_pfn
|
||||||
|
*/
|
||||||
|
if (cpu_has_dc_aliases) {
|
||||||
|
memblock_remove(PFN_PHYS(highstart_pfn), -1);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (tmp = highstart_pfn; tmp < highend_pfn; tmp++) {
|
||||||
|
struct page *page = pfn_to_page(tmp);
|
||||||
|
|
||||||
|
if (!memblock_is_memory(PFN_PHYS(tmp)))
|
||||||
|
SetPageReserved(page);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
void __init arch_mm_preinit(void)
|
void __init arch_mm_preinit(void)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
|
|
@ -435,6 +457,7 @@ void __init arch_mm_preinit(void)
|
||||||
|
|
||||||
maar_init();
|
maar_init();
|
||||||
setup_zero_pages(); /* Setup zeroed pages. */
|
setup_zero_pages(); /* Setup zeroed pages. */
|
||||||
|
highmem_init();
|
||||||
|
|
||||||
#ifdef CONFIG_64BIT
|
#ifdef CONFIG_64BIT
|
||||||
if ((unsigned long) &_text > (unsigned long) CKSEG0)
|
if ((unsigned long) &_text > (unsigned long) CKSEG0)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user