grub-devel
[Top][All Lists]
Advanced

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

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


From: Vladimir 'phcoder' Serbinenko
Subject: Re: [PATCH] sparc64: OBP available region contains grub. Start at grub_phys_end
Date: Sat, 13 Feb 2016 16:06:40 +0000



Le Sat, Feb 13, 2016 à 5:03 PM, Eric Snowberg <address@hidden> a écrit :

> On Feb 12, 2016, at 10:30 PM, Andrei Borzenkov <address@hidden> 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 <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))
>
> 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.

Isn't this an internal implementation detail of OBP? It has to be 8k in virtual memory but why does it have to be in physical memory? 

>>     {
>>       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
address@hidden
https://lists.gnu.org/mailman/listinfo/grub-devel

reply via email to

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