On 26/09/07 12:14 -0700, H. Peter Anvin wrote:Okay, we have clarity. Here is the output e820: err 0 id 0x534d4150 next 15476 00000000:0009fc00 1 e820: err 0 id 0x534d4150 next 15496 0009fc00:00000400 2 e820: err 0 id 0x534d4150 next 15516 000e0000:00020000 2 e820: err 0 id 0x0e7b0000 next 11536 00100000:0e6b0000 1 In the last entry, id is obviously wrong (it should be 'SMAP' or 0x534d4150). This is the BIOS bug. Here's the reason why this bothers us now. In the old assembly code, if the returned ID wasn't equal to 'SMAP', we jumped straight to the e801 code. In the new code in memory.c, if id != SMAP, we break out of the int15 loop, and return boot_params.e820_entries, which in our case is 3. detect_memory() considers this to be successful, and no attempt to parse e801 is made. So thats where the problem is - in the old code with the buggy BIOS, we punted to reading the e801 information, and that was enough to keep us going. In the new code, we allow a partial table to be used, and we blow up. Attached is a patch to fix this - it returns -1 on error, and only sets boot_params.e820_entries to be non-zero if we have something useful in it. This punts the detection to the e801 code, which then is then successful. This fixes the problem with the DB800, and so it probably should with the other Geode platforms affected by this. Many thanks to hpa for the guiding hand. Jordan -- Jordan Crouse Systems Software Development Engineer Advanced Micro Devices, Inc.
| Parag Warudkar | BUG: soft lockup - CPU#1 stuck for 15s! [swapper:0] |
| Tarkan Erimer | Re: Dual-Licensing Linux Kernel with GPL V2 and GPL V3 |
| Greg Kroah-Hartman | [PATCH 010/196] Chinese: add translation of Codingstyle |
| Andrew Morton | -mm merge plans for 2.6.23 |
git: | |
| Gerrit Renker | [PATCH 24/37] dccp: Processing Confirm options |
| David Miller | Re: [PATCH] pkt_sched: Destroy gen estimators under rtnl_lock(). |
| Alexey Dobriyan | Re: [GIT]: Networking |
| david | Re: iptables very slow after commit 784544739a25c30637397ace5489eeb6e15d7d49 |
