Kernel panic - Fails to load BIOS-E820 memory map booted through iPXE, uses BIOS-88
From: james harvey
Date: Mon Aug 08 2016 - 20:33:53 EST
<<< How does booting through iPXE disrupt the BIOS E820 map? >>>
Booting 4.6.4 from the Arch 2016.08.01 ISO on a DVD properly sees
64GB. (See quote 1.)
Booting the same ISO through iPXE only sees about 50*M*B usable, and
the detected memory map sections are reported as "BIOS-88" rather than
"BIOS-e820". (See quote 2.) I have seen discussions that say the
0x88 BIOS memory function may limit reporting to 15MB, or sometimes up
to 64MB.
This gives a kernel panic for "initrd too large to handle, disabling
initrd (27,426,236 needed, 26,398,720 available)" (commas added.)
How would booting through iPXE disrupt kernel's ability to obtain the
BIOS-supplied E820 map? This is happening in
linux/arch/x86/kernel/e820.c::default_machine_specific_memory_setup().
What are my avenues forward?
=== Quote 1 ==============================
[ 0.000000] e820: BIOS-provided physical RAM map:
[ 0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009e7ff] usable
[ 0.000000] BIOS-e820: [mem 0x000000000009e800-0x000000000009ffff] reserved
[ 0.000000] BIOS-e820: [mem 0x00000000000e0000-0x00000000000fffff] reserved
[ 0.000000] BIOS-e820: [mem 0x0000000000100000-0x00000000392f6fff] usable
[ 0.000000] BIOS-e820: [mem 0x00000000392f7000-0x0000000039e69fff] reserved
[ 0.000000] BIOS-e820: [mem 0x0000000039e6a000-0x000000003a109fff] usable
[ 0.000000] BIOS-e820: [mem 0x000000003a10a000-0x000000003acb8fff] ACPI NVS
[ 0.000000] BIOS-e820: [mem 0x000000003acb9000-0x000000003b613fff] reserved
[ 0.000000] BIOS-e820: [mem 0x000000003b614000-0x000000003b614fff] usable
[ 0.000000] BIOS-e820: [mem 0x000000003b615000-0x000000003b69afff] reserved
[ 0.000000] BIOS-e820: [mem 0x000000003b69b000-0x000000003b8b7fff] usable
[ 0.000000] BIOS-e820: [mem 0x000000003b8b8000-0x000000003bff8fff] reserved
[ 0.000000] BIOS-e820: [mem 0x000000003bff9000-0x000000003bffffff] usable
[ 0.000000] BIOS-e820: [mem 0x000000003c000000-0x000000003dffffff] reserved
[ 0.000000] BIOS-e820: [mem 0x0000000040000000-0x000000004fffffff] reserved
[ 0.000000] BIOS-e820: [mem 0x00000000fed1c000-0x00000000fed24fff] reserved
[ 0.000000] BIOS-e820: [mem 0x00000000fed30000-0x00000000fed34fff] reserved
[ 0.000000] BIOS-e820: [mem 0x00000000fed40000-0x00000000fed44fff] reserved
[ 0.000000] BIOS-e820: [mem 0x00000000ff000000-0x00000000ffffffff] reserved
[ 0.000000] BIOS-e820: [mem 0x0000000100000000-0x00000010bfffffff] usable
[ 0.000000] debug: ignoring loglevel setting.
==========================================
=== Quote 2 ==============================
... (manually typed, some scrolled, serial console doesn't seem to get
anything this early?)
[ 0.000000] x86/fpu: Supporting XSAVE feature 0x004: 'AVX registers'
[ 0.000000] x86/fpu: Enabled xstate features 0x7, context size is 832 bytes,
using 'standard' format.
[ 0.000000] x86/fpu: Using 'eager' FPU context switches.
[ 0.000000] e820: BIOS-provided physical RAM map:
[ 0.000000] BIOS-88: [mem 0x0000000000000000-0x000000000009efff] usable
[ 0.000000] BIOS-88: [mem 0x0000000000100000-0x00000000032bbfff] usable
[ 0.000000] debug: ignoring loglevel setting.
[ 0.000000] console [earlyvga0] enabled
[ 0.000000] NX (Execute Disable) protection: active
[ 0.000000] DMI not present or invalid.
[ 0.000000] e820: update [mem 0x00000000-0x00000fff] usable ==> reserved
[ 0.000000] e820: remove [mem 0x000a0000-0x000fffff] usable
[ 0.000000] e820: last_pfn = 0x32bc max_arch_pfn = 0x400000000
[ 0.000000] MTRR default type: write-back
[ 0.000000] MTRR fixed ranges enabled:
[ 0.000000] 00000-9FFFF write-back
[ 0.000000] A0000-BFFFF uncachable
[ 0.000000] C0000-FFFFF write-protect
[ 0.000000] MTRR variable ranges enabled:
[ 0.000000] 0 base 000080000000 mask 3FFF80000000 uncachable
[ 0.000000] 1 base 000040000000 mask 3FFFC0000000 uncachable
[ 0.000000] 2 base 380000000000 mask 3FC000000000 uncachable
[ 0.000000] 3 base 00003F000000 mask 3FFFFF000000 uncachable
[ 0.000000] 4 base 0000E0000000 mask 3FFFF0000000 write-through
[ 0.000000] 5 base 0000F0000000 mask 3FFFFF000000 write-through
[ 0.000000] 6 base 0000F1000000 mask 3FFFFF800000 write-through
[ 0.000000] 7 disabled
[ 0.000000] 8 disabled
[ 0.000000] 9 disabled
[ 0.000000] x86/PAT: Configuration [0-7]: WB WC UC- UC WB WC UC- WT
[ 0.000000] Scanning 1 areas for low memory corruption
[ 0.000000] Base memory trampoline at [ffff880000096000] 96000 size 24576
[ 0.000000] Using GB pages for direct mapping
[ 0.000000] BRK [0x01b4e000, 0x01b4efff] PGTABLE
[ 0.000000] BRK [0x01b4f000, 0x01b4ffff] PGTABLE
[ 0.000000] BRK [0x01b50000, 0x01b50fff] PGTABLE
[ 0.000000] Kernel panic - not syncing: initrd too large to handle, disabling
initrd (27426236 needed, 26398720 available)
[ 0.000000]
[ 0.000000] CPU: 0 PID: 0 Comm: swapper Not tainted 4.6.4-1-ARCH #1
[ 0.000000] 0000000000000086 5c08bc9d6d100ae8 ffffffff81803e48 ffffffff812e5
4c2
[ 0.000000] ffffffff816f5de0 ffffffff81803ee0 ffffffff81803ed0 ffffffff8116d
721
[ 0.000000] 0000000000000018 ffffffff81803ee0 ffffffff81803e78 5c08bc9d6d100
ae8
[ 0.000000] Call Trace:
[ 0.000000] [<ffffffff812e54c2>] dump_stack+0x63/0x81
[ 0.000000] [<ffffffff8116d721>] panic+0xde/0x220
[ 0.000000] [<ffffffff819198e4>] setup_arch+0x79d/0xcdd
[ 0.000000] [<ffffffff8116da49>] ? printk+0x57/0x73
[ 0.000000] [<ffffffff8190c120>] ? early_idt_handler_array+0x120/0x120
[ 0.000000] [<ffffffff8190cc64>] start_kernel+0xb2/0x45f
[ 0.000000] [<ffffffff8190c120>] ? early_idt_handler_array+0x120/0x120
[ 0.000000] [<ffffffff8190c346>] x86_64_start_reservations+0x2a/0x2c
[ 0.000000] [<ffffffff8190c494>] x86_64_start_kernel+0x14c/0x16f
[ 0.000000] ---[ end Kernel panic - not syncing: initrd too large to handle,
disabling initrd (27426236 needed, 26398720 available)
[ 0.000000]
==========================================