[coreboot] kernel panics reserving EBDA pages

Roman Kononov kononov at dls.net
Mon Jul 21 23:27:21 CEST 2008


I have this chain: coreboot v2 -> etherboot as the payload -> x86_64 kernel

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?

Roman Kononov

More information about the coreboot mailing list