mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-09-04 20:19:47 +08:00
Mapping the MEMRESERVE EFI configuration table from an early initcall
is too late: the GICv3 ITS code that creates persistent reservations
for the boot CPU's LPI tables is invoked from init_IRQ(), which runs
much earlier than the handling of the initcalls. This results in a
WARN() splat because the LPI tables cannot be reserved persistently,
which will result in silent memory corruption after a kexec reboot.
So instead, invoke the initialization performed by the initcall from
efi_mem_reserve_persistent() itself as well, but keep the initcall so
that the init is guaranteed to have been called before SMP boot.
Tested-by: Marc Zyngier <marc.zyngier@arm.com>
Tested-by: Jan Glauber <jglauber@cavium.com>
Tested-by: John Garry <john.garry@huawei.com>
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: linux-efi@vger.kernel.org
Fixes:
|
||
|---|---|---|
| .. | ||
| libstub | ||
| test | ||
| apple-properties.c | ||
| arm-init.c | ||
| arm-runtime.c | ||
| capsule-loader.c | ||
| capsule.c | ||
| cper-arm.c | ||
| cper-x86.c | ||
| cper.c | ||
| dev-path-parser.c | ||
| efi-bgrt.c | ||
| efi-pstore.c | ||
| efi.c | ||
| efibc.c | ||
| efivars.c | ||
| esrt.c | ||
| fake_mem.c | ||
| Kconfig | ||
| Makefile | ||
| memattr.c | ||
| memmap.c | ||
| reboot.c | ||
| runtime-map.c | ||
| runtime-wrappers.c | ||
| tpm.c | ||
| vars.c | ||