Jordan Crouse wrote: > > Its the latter - max_pfn as read by find_max_pfn() in arch/i386/e820.c > is being set to 9F (640k) in the broken case, this due to the > the e820 map looking something like this: > > Address Size Type > 00000000 0009FC00 1 > 0009FC00 00000400 2 > 000E0000 00002000 2 > > (Yep, thats it - thats the list. e820.nr_map is indeed 3). > > Long story short, bdata->node_low_pfn gets set to 9F, and When we > try to allocate the bootmem bitmap (at _pa_symbol(_text), which is > page 0x100), then the system gets appropriately angry. > > As background, I'm using syslinux 3.36 as my loader here - I've used this > exact same version for a very long time, so I don't blame it in the least. > Something is getting confused in the early kernel, and whatever that > something is, a still unknown change in a newer version of the BIOS > fixed it. The search goes on. >
Please try the following debug patch to let us know what is going on. -hpa
diff --git a/arch/i386/boot/memory.c b/arch/i386/boot/memory.c index 1a2e62d..a0ccf29 100644 --- a/arch/i386/boot/memory.c +++ b/arch/i386/boot/memory.c @@ -33,6 +33,12 @@ static int detect_memory_e820(void) "=m" (*desc) : "D" (desc), "a" (0xe820)); + printf("e820: err %d id 0x%08x next %u %08x:%08x %u\n", + err, id, next, + (unsigned int)desc->addr, + (unsigned int)desc->size, + desc->type); + if (err || id != SMAP) break;