> On Feb 12, 2016, at 10:30 PM, Andrei Borzenkov <arvidj...@gmail.com> wrote: > > 13.02.2016 00:35, Eric Snowberg пишет: >> 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 <eric.snowb...@oracle.com> >> --- >> 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)) > > What about > > a) overlapping regions? > > addr < grub_phys_start < end < grub_phys_end > > b) is is possible for requested region to fit before grub? > > addr < end < grub_phys_start >
On SPARC, there is always an 8k offset from the beginning of memory to grub_phys_start. I had intentionally skipped this memory for the 2 cases above. >> { >> 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); _______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel