]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
* grub-core/loader/i386/linux.c (grub_linux_boot): Supply target rather
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Mon, 25 Apr 2011 14:58:25 +0000 (16:58 +0200)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Mon, 25 Apr 2011 14:58:25 +0000 (16:58 +0200)
than source address for efi mmap buffer.

ChangeLog
grub-core/loader/i386/linux.c

index 3da7693dbbf2ed0f9e61f2a2dc550715bbe627c9..0a7e4d64c113a35187ab1b5d890128fdb161175e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2011-04-25  Vladimir Serbinenko  <phcoder@gmail.com>
+
+       * grub-core/loader/i386/linux.c (grub_linux_boot): Supply target rather
+       than source address for efi mmap buffer.
+
 2011-04-25  Vladimir Serbinenko  <phcoder@gmail.com>
 
        * grub-core/partmap/amiga.c (amiga_partition_map_iterate): Fix a
index 241eaa5e760a19d04cefadda48b0e86c2dd06546..f19f471ab82bcb8a0f186c64485e1a697049a5fe 100644 (file)
@@ -549,6 +549,7 @@ grub_linux_boot (void)
 #ifdef GRUB_MACHINE_EFI
   {
     grub_efi_uintn_t efi_desc_size;
+    grub_size_t efi_mmap_target;
     grub_efi_uint32_t efi_desc_version;
     err = grub_efi_finish_boot_services (&efi_mmap_size, efi_mmap_buf, NULL,
                                         &efi_desc_size, &efi_desc_version);
@@ -556,23 +557,24 @@ grub_linux_boot (void)
       return err;
     
     /* Note that no boot services are available from here.  */
-
+    efi_mmap_target = real_mode_target 
+      + ((grub_uint8_t *) efi_mmap_buf - (grub_uint8_t *) real_mode_mem);
     /* Pass EFI parameters.  */
     if (grub_le_to_cpu16 (params->version) >= 0x0206)
       {
        params->v0206.efi_mem_desc_size = efi_desc_size;
        params->v0206.efi_mem_desc_version = efi_desc_version;
-       params->v0206.efi_mmap = (grub_uint32_t) (unsigned long) efi_mmap_buf;
+       params->v0206.efi_mmap = efi_mmap_target;
        params->v0206.efi_mmap_size = efi_mmap_size;
 #ifdef __x86_64__
-       params->v0206.efi_mmap_hi = (grub_uint32_t) ((grub_uint64_t) efi_mmap_buf >> 32);
+       params->v0206.efi_mmap_hi = (efi_mmap_target >> 32);
 #endif
       }
     else if (grub_le_to_cpu16 (params->version) >= 0x0204)
       {
        params->v0204.efi_mem_desc_size = efi_desc_size;
        params->v0204.efi_mem_desc_version = efi_desc_version;
-       params->v0204.efi_mmap = (grub_uint32_t) (unsigned long) efi_mmap_buf;
+       params->v0204.efi_mmap = efi_mmap_target;
        params->v0204.efi_mmap_size = efi_mmap_size;
       }
   }