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: Andrei Borzenkov
Subject: Re: [PATCH] sparc64: OBP available region contains grub. Start at grub_phys_end
Date: Sat, 13 Feb 2016 17:49:28 +0300
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.5.1

13.02.2016 16:56, Vladimir 'phcoder' Serbinenko пишет:
> Le sam. 13 févr. 2016 06:30, Andrei Borzenkov <address@hidden> a
> écrit :
> 
>> 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
>>
>> Good catch. Condition should have been
> grub_phys_start >= addr && grub_phys_start < end) || (addr >
> grub_phys_start && addr < grub_phys_end))
> My pattern matching algorithm failed and I thought it was standard check
> for segment intersection but it wasn't. I'll fix this
> 
> 
>>
>> b) is is possible for requested region to fit before grub?
>>
> There is only 16KiB of memory before GRUB but thinking about it again, it's
> 16 KiB of virtual memory, not physical. What about attached patch?
> 

As far as I understand what it does looks OK.




reply via email to

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