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 08:30:09 +0300
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.5.1

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

>      {
>        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);
> 




reply via email to

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