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> |