Re: Regression in 2.6.23-pre Was: Problems with 2.6.23-rc6 on AMDGeode LX800

From: H. Peter Anvin
Date: Wed Sep 26 2007 - 15:15:19 EST


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;