--- ../../grub/grub-core/loader/i386/linux.c	2012-05-31 12:59:19.000000000 -0400
+++ grub-core/loader/i386/linux.c	2012-06-12 19:13:16.053987681 -0400
@@ -108,38 +108,15 @@ static grub_efi_uintn_t
 find_efi_mmap_size (void)
 {
   static grub_efi_uintn_t mmap_size = 0;
+  void *mmap_buf = 0;
+  grub_efi_uintn_t desc_size;
 
-  if (mmap_size != 0)
-    return mmap_size;
-
-  mmap_size = (1 << 12);
-  while (1)
-    {
-      int ret;
-      grub_efi_memory_descriptor_t *mmap;
-      grub_efi_uintn_t desc_size;
-
-      mmap = grub_malloc (mmap_size);
-      if (! mmap)
-	return 0;
-
-      ret = grub_efi_get_memory_map (&mmap_size, mmap, 0, &desc_size, 0);
-      grub_free (mmap);
-
-      if (ret < 0)
-	{
-	  grub_error (GRUB_ERR_IO, "cannot get memory map");
-	  return 0;
-	}
-      else if (ret > 0)
-	break;
-
-      mmap_size += (1 << 12);
-    }
+  if (grub_efi_get_memory_map (&mmap_size, mmap_buf, 0, &desc_size, 0) < 0)
+    return grub_error (GRUB_ERR_IO, "couldn't retrieve memory map");
 
   /* Increase the size a bit for safety, because GRUB allocates more on
      later, and EFI itself may allocate more.  */
-  mmap_size += (1 << 12);
+  mmap_size += (3 << 12);
 
   mmap_size = page_align (mmap_size);
   return mmap_size;
