#9100 BLOC 10.1.2: 2.6.27+ early boot crashes on XO1
Zarro Boogs per Child
bugtracker at laptop.org
Sat Aug 21 09:19:28 EDT 2010
#9100: 2.6.27+ early boot crashes on XO1
--------------------------------+-------------------------------------------
Reporter: dsd | Owner: dsaxena
Type: defect | Status: new
Priority: blocker | Milestone: 10.1.2
Component: kernel | Version: Development build as of this date
Resolution: | Keywords:
Next_action: diagnose | Verified: 0
Deployment_affected: | Blockedby:
Blocking: |
--------------------------------+-------------------------------------------
Comment(by dsd):
Hal has received the serial console and we've narrowed down the conditions
of the hang. Call trace is i386_start_kernel --> reserve_ebda_region
http://lxr.free-electrons.com/source/arch/x86/kernel/head.c?v=2.6.31
This function does:
{{{
#define BIOS_LOWMEM_KILOBYTES 0x413
lowmem = *(unsigned short *)__va(BIOS_LOWMEM_KILOBYTES);
lowmem <<= 10;
}}}
At this point, lowmem usually has value 0.
In the case when it crashes, lowmem has value 0x800 (meaning that the
memory at 0x413 has value 0x2 instead of 0).
Then:
{{{
ebda_addr = get_bios_ebda();
}}}
This consistently returns 0x20000 (in both the hang and non-hang case)
The function then does a few potential tweaks to the lowmem value (based
on the values of lowmem and ebda_addr), then calls:
{{{
/* reserve all memory between lowmem and the 1MB mark */
reserve_early_overlap_ok(lowmem, 0x100000, "BIOS reserved");
}}}
and the hang occurs somewhere within that function call.
So, why is the value of BIOS_LOWMEM_KILOBYTES changing? Is this something
controlled by OFW?
--
Ticket URL: <http://dev.laptop.org/ticket/9100#comment:47>
One Laptop Per Child <http://laptop.org/>
OLPC bug tracking system
More information about the Bugs
mailing list