On Thu, 2009-07-23 at 11:38 +0200, Vladimir 'phcoder' Serbinenko wrote:
> Hello. According to xen some BIOSes update only lower 32-bit in mmap
> entries. To workaround this and not get high values in memory map
> zero-fill before calling BIOS

I think the fix belongs to grub_get_mmap_entry(), not to all of its
callers.  Something like this:

diff --git a/kern/i386/pc/startup.S b/kern/i386/pc/startup.S
index be258fb..5468ba8 100644
--- a/kern/i386/pc/startup.S
+++ b/kern/i386/pc/startup.S
@@ -997,6 +997,14 @@ FUNCTION(grub_get_mmap_entry)
        /* push ADDR */
        pushl   %eax
 
+       /* clear the request area, buggy BIOSes may not clear it */
+       xor     %edi, %edi
+       movl    %edi, 4(%eax)
+       movl    %edi, 8(%eax)
+       movl    %edi, 12(%eax)
+       movl    %edi, 16(%eax)
+       movl    %edi, 20(%eax)
+
        /* place address (+4) in ES:DI */
        addl    $4, %eax
        movl    %eax, %edi

I don't know whether it would interfere with the Apple CC workaround.
It would be great if we get rid of it, perhaps by using labels starting
with "L_".

-- 
Regards,
Pavel Roskin


_______________________________________________
Grub-devel mailing list
Grub-devel@gnu.org
http://lists.gnu.org/mailman/listinfo/grub-devel

Reply via email to