Differences
This shows you the differences between two versions of the page.
| Next revision | Previous revision | ||
|
e820irc:irc_logs_for_e820_issue [2006/06/14 22:47] ashieh created |
e820irc:irc_logs_for_e820_issue [2006/06/14 22:50] (current) ashieh |
||
|---|---|---|---|
| Line 77: | Line 77: | ||
| </file> | </file> | ||
| - | I fixed the 640KB reporting, but there were other problems: | + | After an adventure through 16-bit real mode code. I fixed the 640KB e820 hole, but there were other problems with the E820 map: |
| + | <file> | ||
| + | Date: Mon, 12 Jun 2006 04:20:08 -0400 | ||
| + | From: "Alan Shieh" <alancshieh@gmail.com> | ||
| + | To: Etherboot <Etherboot-discuss@lists.sourceforge.net> | ||
| + | Subject: E820 map | ||
| + | MIME-Version: 1.0 | ||
| + | Content-Type: text/plain; charset=ISO-8859-1; format=flowed | ||
| + | Content-Transfer-Encoding: 7bit | ||
| + | Content-Disposition: inline | ||
| + | Delivered-To: alancshieh@gmail.com | ||
| + | As discussed on IRC, my PXE booted Linux was not getting a E820 map | ||
| + | that reflected the resident PXE stack. | ||
| + | |||
| + | I tracked down the problem for my Etherboot 5.2 snapshot. _hide_memory | ||
| + | only had 2 entries, one for the .text segment, and one for the heap. | ||
| + | However, the UNDI Code and Data segments are allocated from base | ||
| + | memory, which is not covered by either of these regions. | ||
| + | |||
| + | So I fixed hide_etherboot() and _hide_memory to reflect the UNDI | ||
| + | segments, and now they are correctly omitted from the e820 map. | ||
| + | |||
| + | However, I'm still wary of my e820 map: | ||
| + | |||
| + | BIOS-e820: 0000000000000000 - 000000000009e000 (usable) | ||
| + | BIOS-e820: 0000000000100000 - 0000000007eeeee0 (usable) | ||
| + | |||
| + | I expect another hole for the Etherboot .text and heap segments, | ||
| + | located at [01eeef70,01f00000). On entry to pxelinux (and while Linux | ||
| + | is active), the hide_memory regions array includes | ||
| + | |||
| + | [01eeef70,01f00000) | ||
| + | [01eeef60,01eeef70) | ||
| + | // as well as UNDI Data & Code | ||
| + | |||
| + | Based on my understanding of the E820 adjustment code, I should get a | ||
| + | memory region of [1f00000,7eeeee0). | ||
| + | |||
| + | I've instrumented my Linux kernel to dump the E820 map as it is | ||
| + | processed, and it looks like the E820 map I am getting has not been | ||
| + | modified from the BIOS version. | ||
| + | |||
| + | Any ideas on how to proceed? | ||
| + | |||
| + | </file> | ||
| + | |||
| + | <file> | ||
| + | Date: Wed, 14 Jun 2006 15:12:16 +0100 (BST) | ||
| + | From: Michael Brown <mbrown@fensystems.co.uk> | ||
| + | X-X-Sender: mcb30@dolphin.home | ||
| + | To: Alan Shieh <alancshieh@gmail.com> | ||
| + | Cc: Etherboot <Etherboot-discuss@lists.sourceforge.net> | ||
| + | Subject: Re: [Etherboot-discuss] E820 map | ||
| + | In-Reply-To: <1a7e305d0606120120l39b78b49n610b4ab7c9c03e05@mail.gmail.com> | ||
| + | Message-ID: <Pine.LNX.4.62.0606141509050.27611@dolphin.home> | ||
| + | References: <1a7e305d0606120120l39b78b49n610b4ab7c9c03e05@mail.gmail.com> | ||
| + | MIME-Version: 1.0 | ||
| + | Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed | ||
| + | |||
| + | On Mon, 12 Jun 2006, Alan Shieh wrote: | ||
| + | > As discussed on IRC, my PXE booted Linux was not getting a E820 map | ||
| + | > that reflected the resident PXE stack. | ||
| + | > | ||
| + | > I tracked down the problem for my Etherboot 5.2 snapshot. _hide_memory | ||
| + | > only had 2 entries, one for the .text segment, and one for the heap. | ||
| + | > However, the UNDI Code and Data segments are allocated from base | ||
| + | > memory, which is not covered by either of these regions. | ||
| + | > | ||
| + | > So I fixed hide_etherboot() and _hide_memory to reflect the UNDI | ||
| + | > segments, and now they are correctly omitted from the e820 map. | ||
| + | > | ||
| + | > However, I'm still wary of my e820 map: | ||
| + | > | ||
| + | > BIOS-e820: 0000000000000000 - 000000000009e000 (usable) | ||
| + | > BIOS-e820: 0000000000100000 - 0000000007eeeee0 (usable) | ||
| + | > | ||
| + | > I expect another hole for the Etherboot .text and heap segments, | ||
| + | > located at [01eeef70,01f00000). On entry to pxelinux (and while Linux | ||
| + | > is active), the hide_memory regions array includes | ||
| + | > | ||
| + | > [01eeef70,01f00000) | ||
| + | > [01eeef60,01eeef70) | ||
| + | > // as well as UNDI Data & Code | ||
| + | |||
| + | How much memory does this machine actually have? The 0x07eeeee0 suggests | ||
| + | a figure around the 128MB mark. Etherboot should be relocating itself to | ||
| + | somewhere near the top of this, yet 0x01eeef70 is around the 32MB mark. | ||
| + | Something here doesn't add up. | ||
| + | |||
| + | Michael | ||
| + | |||
| + | </file> | ||
| + | |||
| + | <file> | ||
| + | Date: Wed, 14 Jun 2006 16:14:11 +0100 (BST) | ||
| + | From: Michael Brown <mbrown@fensystems.co.uk> | ||
| + | X-X-Sender: mcb30@dolphin.home | ||
| + | To: Alan Shieh <alancshieh@gmail.com> | ||
| + | Cc: Etherboot <Etherboot-discuss@lists.sourceforge.net> | ||
| + | Subject: Re: [Etherboot-discuss] E820 map | ||
| + | In-Reply-To: <1a7e305d0606140727r2cdc2576u527c082b5b39eef6@mail.gmail.com> | ||
| + | Message-ID: <Pine.LNX.4.62.0606141611220.27611@dolphin.home> | ||
| + | References: <1a7e305d0606120120l39b78b49n610b4ab7c9c03e05@mail.gmail.com> | ||
| + | <Pine.LNX.4.62.0606141509050.27611@dolphin.home> | ||
| + | <1a7e305d0606140727r2cdc2576u527c082b5b39eef6@mail.gmail.com> | ||
| + | MIME-Version: 1.0 | ||
| + | Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed | ||
| + | |||
| + | On Wed, 14 Jun 2006, Alan Shieh wrote: | ||
| + | >>> [01eeef70,01f00000) | ||
| + | >>> [01eeef60,01eeef70) | ||
| + | >>> // as well as UNDI Data & Code | ||
| + | >> | ||
| + | >> How much memory does this machine actually have? The 0x07eeeee0 suggests | ||
| + | >> a figure around the 128MB mark. Etherboot should be relocating itself to | ||
| + | >> somewhere near the top of this, yet 0x01eeef70 is around the 32MB mark. | ||
| + | >> Something here doesn't add up. | ||
| + | > | ||
| + | > Yes, the machine has 128 MB. | ||
| + | |||
| + | Thanks. Can you add some debug statements to the relocation logic, to see | ||
| + | how Etherboot ends up making the decision to relocate to the 32MB mark? | ||
| + | |||
| + | For Etherboot 5.4 and below, the e820 map mangler can only truncate | ||
| + | regions; it can't split them. This can result in wasting huge amounts | ||
| + | of memory space unless the region to be hidden is located near the end of | ||
| + | an existing region. | ||
| + | |||
| + | This is fixed in gpxe-0.5 (which can split regions), but that branch | ||
| + | doesn't currently have a working PXE API and so is not much use for your | ||
| + | tests. | ||
| + | |||
| + | Michael | ||
| + | |||
| + | </file> | ||