[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
- [PATCH] sparc64: OBP available region contains grub. Start at grub_phys_end,
Eric Snowberg <=