kernel_samsung_a53x/arch/mips
Serge Semin 430cbbd160 mips: Fix max_mapnr being uninitialized on early stages
[ Upstream commit e1a9ae45736989c972a8d1c151bc390678ae6205 ]

max_mapnr variable is utilized in the pfn_valid() method in order to
determine the upper PFN space boundary. Having it uninitialized
effectively makes any PFN passed to that method invalid. That in its turn
causes the kernel mm-subsystem occasion malfunctions even after the
max_mapnr variable is actually properly updated. For instance,
pfn_valid() is called in the init_unavailable_range() method in the
framework of the calls-chain on MIPS:
setup_arch()
+-> paging_init()
    +-> free_area_init()
        +-> memmap_init()
            +-> memmap_init_zone_range()
                +-> init_unavailable_range()

Since pfn_valid() always returns "false" value before max_mapnr is
initialized in the mem_init() method, any flatmem page-holes will be left
in the poisoned/uninitialized state including the IO-memory pages. Thus
any further attempts to map/remap the IO-memory by using MMU may fail.
In particular it happened in my case on attempt to map the SRAM region.
The kernel bootup procedure just crashed on the unhandled unaligned access
bug raised in the __update_cache() method:

> Unhandled kernel unaligned access[#1]:
> CPU: 0 PID: 1 Comm: swapper/0 Not tainted 6.7.0-rc1-XXX-dirty #2056
> ...
> Call Trace:
> [<8011ef9c>] __update_cache+0x88/0x1bc
> [<80385944>] ioremap_page_range+0x110/0x2a4
> [<80126948>] ioremap_prot+0x17c/0x1f4
> [<80711b80>] __devm_ioremap+0x8c/0x120
> [<80711e0c>] __devm_ioremap_resource+0xf4/0x218
> [<808bf244>] sram_probe+0x4f4/0x930
> [<80889d20>] platform_probe+0x68/0xec
> ...

Let's fix the problem by initializing the max_mapnr variable as soon as
the required data is available. In particular it can be done right in the
paging_init() method before free_area_init() is called since all the PFN
zone boundaries have already been calculated by that time.

Cc: stable@vger.kernel.org
Signed-off-by: Serge Semin <fancer.lancer@gmail.com>
Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-11-18 12:13:33 +01:00
..
alchemy MIPS: Alchemy: Fix an out-of-bound access in db1550_dev_setup() 2024-11-18 12:12:48 +01:00
ar7 Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ath25 Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ath79 Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
bcm47xx Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
bcm63xx Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
bmips Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
boot Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
cavium-octeon Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
cobalt Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
configs Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
crypto Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
dec Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
fw Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
generic Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
include MIPS: Add 'memory' clobber to csum_ipv6_magic() inline assembler 2024-11-18 12:13:28 +01:00
ingenic Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
jazz Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
kernel mips: Call lose_fpu(0) before initializing fcr31 in mips_set_personality_nan 2024-11-18 12:13:07 +01:00
kvm MIPS: KVM: Fix a build warning about variable set but not used 2024-11-18 12:10:56 +01:00
lantiq Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
lib Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
loongson2ef Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
loongson32 Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
loongson64 Revert "MIPS: Loongson64: Enable DMA noncoherent support" 2024-11-18 12:12:04 +01:00
math-emu Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
mm mips: Fix max_mapnr being uninitialized on early stages 2024-11-18 12:13:33 +01:00
mti-malta Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
net Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
netlogic Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
oprofile Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
pci Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
pic32 Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
pistachio Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
power Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ralink Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
rb532 Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
sgi-ip22 Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
sgi-ip27 Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
sgi-ip30 Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
sgi-ip32 Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
sibyte Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
sni Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
tools Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
txx9 Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
vdso Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
vr41xx Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
Kbuild Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
Kbuild.platforms Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
Kconfig Revert "MIPS: Loongson64: Enable DMA noncoherent support" 2024-11-18 12:12:04 +01:00
Kconfig.debug Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
Makefile Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
Makefile.postlink Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00