grub-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] sparc64: OBP available region contains grub. Start at grub_phys_


From: Eric Snowberg
Subject: [PATCH] sparc64: OBP available region contains grub. Start at grub_phys_end
Date: Fri, 12 Feb 2016 13:35:23 -0800

OBP available region contains grub. Start at grub_phys_end.

This prevents a problem where grub was being overwritten since
grub_phys_start does not start at a zero offset within the memory
map.

Signed-off-by: Eric Snowberg <address@hidden>
---
 grub-core/loader/sparc64/ieee1275/linux.c |   16 ++++++++--------
 1 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/grub-core/loader/sparc64/ieee1275/linux.c 
b/grub-core/loader/sparc64/ieee1275/linux.c
index d44d7a1..67ef048 100644
--- a/grub-core/loader/sparc64/ieee1275/linux.c
+++ b/grub-core/loader/sparc64/ieee1275/linux.c
@@ -203,20 +203,20 @@ alloc_phys_choose (grub_uint64_t addr, grub_uint64_t len,
   if (addr + ctx->size >= end)
     return 0;
 
-  if (addr >= grub_phys_start && addr < grub_phys_end)
-    {
-      addr = ALIGN_UP (grub_phys_end, FOUR_MB);
-      if (addr + ctx->size >= end)
-       return 0;
-    }
-  if ((addr + ctx->size) >= grub_phys_start
-      && (addr + ctx->size) < grub_phys_end)
+  /* OBP available region contains grub. Start at grub_phys_end. */
+  /* grub_phys_start does not start at the beginning of the memory region */
+  if ((grub_phys_start >= addr && grub_phys_end < end) ||
+      (addr > grub_phys_start && addr < grub_phys_end))
     {
       addr = ALIGN_UP (grub_phys_end, FOUR_MB);
       if (addr + ctx->size >= end)
        return 0;
     }
 
+  grub_dprintf("loader",
+    "addr = 0x%lx grub_phys_start = 0x%lx grub_phys_end = 0x%lx\n",
+    addr, grub_phys_start, grub_phys_end);
+
   if (loaded)
     {
       grub_addr_t linux_end = ALIGN_UP (linux_paddr + linux_size, FOUR_MB);
-- 
1.7.1




reply via email to

[Prev in Thread] Current Thread [Next in Thread]