Commit 17c144f1 authored by Helge Deller's avatar Helge Deller
Browse files

parisc: Check kernel mapping earlier at bootup



The check if the initial mapping is sufficient needs to happen much
earlier during bootup. Move this test directly to the start_parisc()
function and use native PDC iodc functions to print the warning, because
panic() and printk() are not functional yet.

This fixes boot when enabling various KALLSYSMS options which need
much more space.

Signed-off-by: default avatarHelge Deller <deller@gmx.de>
Cc: <stable@vger.kernel.org> # v6.0+
parent 8e732934
Loading
Loading
Loading
Loading
+12 −8
Original line number Diff line number Diff line
@@ -120,14 +120,6 @@ void __init setup_arch(char **cmdline_p)
#endif
	printk(KERN_CONT ".\n");

	/*
	 * Check if initial kernel page mappings are sufficient.
	 * panic early if not, else we may access kernel functions
	 * and variables which can't be reached.
	 */
	if (__pa((unsigned long) &_end) >= KERNEL_INITIAL_SIZE)
		panic("KERNEL_INITIAL_ORDER too small!");

#ifdef CONFIG_64BIT
	if(parisc_narrow_firmware) {
		printk(KERN_INFO "Kernel is using PDC in 32-bit mode.\n");
@@ -279,6 +271,18 @@ void __init start_parisc(void)
	int ret, cpunum;
	struct pdc_coproc_cfg coproc_cfg;

	/*
	 * Check if initial kernel page mapping is sufficient.
	 * Print warning if not, because we may access kernel functions and
	 * variables which can't be reached yet through the initial mappings.
	 * Note that the panic() and printk() functions are not functional
	 * yet, so we need to use direct iodc() firmware calls instead.
	 */
	const char warn1[] = "CRITICAL: Kernel may crash because "
			     "KERNEL_INITIAL_ORDER is too small.\n";
	if (__pa((unsigned long) &_end) >= KERNEL_INITIAL_SIZE)
		pdc_iodc_print(warn1, sizeof(warn1) - 1);

	/* check QEMU/SeaBIOS marker in PAGE0 */
	running_on_qemu = (memcmp(&PAGE0->pad0, "SeaBIOS", 8) == 0);