]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
Split a memory chunk spanning accross 1MiB mark for openbsd
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Sun, 2 May 2010 14:26:00 +0000 (16:26 +0200)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Sun, 2 May 2010 14:26:00 +0000 (16:26 +0200)
loader/i386/bsd.c

index c0c75204d94d650dc86dc0fe357ba6c1f55f7d61..26055d5ca456615c97b7495056e9964f8fcedc4a 100644 (file)
@@ -301,7 +301,7 @@ generate_e820_mmap (grub_size_t *len, grub_size_t *cnt, void *buf)
        {
          prev.size += cur.size;
          if (mmap)
-           mmap[-1] = prev;
+           mmap[-1] = prev;
        }
       else
        {
@@ -311,6 +311,23 @@ generate_e820_mmap (grub_size_t *len, grub_size_t *cnt, void *buf)
          count++;
        }
 
+      if (kernel_type == KERNEL_TYPE_OPENBSD && prev.addr < 0x100000
+         && prev.addr + prev.size > 0x100000)
+       {
+         cur.addr = 0x100000;
+         cur.size = prev.addr + prev.size - 0x100000;
+         cur.type = prev.type;
+         prev.size = 0x100000 - prev.addr;
+         if (mmap)
+           {
+             mmap[-1] = prev;
+             mmap[0] = cur;
+             mmap++;
+           }
+         prev = cur;
+         count++;
+       }
+
       return 0;
     }
 
@@ -1475,7 +1492,7 @@ grub_cmd_openbsd (grub_extcmd_t cmd, int argc, char *argv[])
 
   if (grub_bsd_load (argc, argv) == GRUB_ERR_NONE)
     {
-      grub_loader_set (grub_openbsd_boot, grub_bsd_unload, 1);
+      grub_loader_set (grub_openbsd_boot, grub_bsd_unload, 0);
       openbsd_root = bootdev;
     }