I have this chain: coreboot v2 -> etherboot as the payload -> x86_64 kernel 126.96.36.199.
The kernel panics in arch/x86/e820_64.c, reserve_early() with the message:
Overlapping early reservations f0-100ef EBDA to 0-fff BIOS data page
reserve_early(start,end) is called from arch/x86/head64.c, reserve_ebda() with start=0xf0 and end=0x100f0.
The address and size of EBDA is gotten this way:
#define EBDA_ADDR_POINTER 0x40E ebda_addr = *(unsigned short *)__va(EBDA_ADDR_POINTER); ebda_addr <<= 4; ebda_size = *(unsigned short *)__va(ebda_addr);
After the above sequence ebda_addr=0xf0 and ebda_size=0x2049 KiB;
This all happened in a very well working system after I added the second dual-core Opteron.
Without the second CPU, ebda_addr=0x12010 and ebda_size=0, which combination passes reserve_early() without overlapping. The resulting reservations are: early res: 0 [0-fff] BIOS data page early res: 1 [6000-7fff] SMP_TRAMPOLINE early res: 2 [200000-75b503] TEXT DATA BSS early res: 3 [800000-9bd8dd] RAMDISK early res: 4 [12010-1300f] EBDA early res: 5 [8000-cfff] PGTABLE
How come? What is responsible to clear the memory at 0x40e? What is EBDA and what needs it?
Thanks, Roman Kononov