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

-- 
Regards
Vladimir 'phcoder' Serbinenko

Personal git repository: http://repo.or.cz/w/grub2/phcoder.git
diff --git a/ChangeLog b/ChangeLog
index a0780ab..4b1e410 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2009-07-23  Vladimir Serbinenko  <phco...@gmail.com>
+
+       * kern/i386/pc/mmap.c (grub_machine_mmap_iterate): Zero-fill entry
+       before calling BIOS
+
 2009-07-21  Vladimir Serbinenko  <phco...@gmail.com>
 
        UUID support for UFS
diff --git a/kern/i386/pc/mmap.c b/kern/i386/pc/mmap.c
index 52d8fd5..72a6b35 100644
--- a/kern/i386/pc/mmap.c
+++ b/kern/i386/pc/mmap.c
@@ -20,6 +20,7 @@
 #include <grub/machine/memory.h>
 #include <grub/err.h>
 #include <grub/types.h>
+#include <grub/misc.h>
 
 grub_err_t
 grub_machine_mmap_iterate (int NESTED_FUNC_ATTR (*hook) (grub_uint64_t, 
grub_uint64_t, grub_uint32_t))
@@ -28,6 +29,8 @@ grub_machine_mmap_iterate (int NESTED_FUNC_ATTR (*hook) 
(grub_uint64_t, grub_uin
   struct grub_machine_mmap_entry *entry
     = (struct grub_machine_mmap_entry *) GRUB_MEMORY_MACHINE_SCRATCH_ADDR;
 
+  grub_memset (entry, 0, sizeof (entry));
+
   /* Check if grub_get_mmap_entry works.  */
   cont = grub_get_mmap_entry (entry, 0);
 
@@ -43,6 +46,8 @@ grub_machine_mmap_iterate (int NESTED_FUNC_ATTR (*hook) 
(grub_uint64_t, grub_uin
        if (! cont)
          break;
 
+       grub_memset (entry, 0, sizeof (entry));
+
        cont = grub_get_mmap_entry (entry, cont);
       }
     while (entry->size);
_______________________________________________
Grub-devel mailing list
Grub-devel@gnu.org
http://lists.gnu.org/mailman/listinfo/grub-devel

Reply via email to