grub-devel
[Top][All Lists]
Advanced

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

Re: [PATCH 5/8] kern/ieee1275/init: ppc64: Add support for alignment req


From: Stefan Berger
Subject: Re: [PATCH 5/8] kern/ieee1275/init: ppc64: Add support for alignment requirements
Date: Sat, 28 Oct 2023 09:11:27 -0400
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.13.0


On 10/27/23 10:14, Stefan Berger wrote:
Add support for memory alignment requirements and adjust a candidate
address to it before checking whether the block is large enough since
the alignment adjustment can make a block smaller than what was
requested.

Signed-off-by: stefan Berger <stefanb@linux.ibm.com>
Cc: Hari Bathini <hbathini@linux.ibm.com>
Cc: Pavithra Prakash <pavrampu@in.ibm.com>
Cc: Michael Ellerman <mpe@ellerman.id.au>
Cc: Carolyn Scherrer <cpscherr@us.ibm.com>
Cc: Mahesh Salgaonkar <mahesh@linux.ibm.com>
Cc: Sourabh Jain <sourabhjain@linux.ibm.com>
---
  grub-core/kern/ieee1275/init.c        | 10 ++++++++++
  include/grub/powerpc/ieee1275/alloc.h |  1 +
  2 files changed, 11 insertions(+)

diff --git a/grub-core/kern/ieee1275/init.c b/grub-core/kern/ieee1275/init.c
index a0ce9d55e..5414f659c 100644
--- a/grub-core/kern/ieee1275/init.c
+++ b/grub-core/kern/ieee1275/init.c
@@ -506,6 +506,16 @@ regions_claim (grub_uint64_t addr, grub_uint64_t len, 
grub_memory_type_t type,
              }
          }
      }
+
+  /* Honor alignment restrictions on candidate addr */
+  if (rcr->align)
+    {
+      grub_uint64_t align_addr = ALIGN_UP (addr, rcr->align);
+
+      len = len - (align_addr - addr);

In v2 this will look like this:

      grub_uint64_t align_addr = ALIGN_UP (addr, rcr->align);
      grub_uint64_t d = align_addr - addr;

      if (d > len)
        return 0;

      len -= d;

+      addr = align_addr;
+    }
+
    if (rcr->flags & GRUB_MM_ADD_REGION_CONSECUTIVE && len < rcr->total)
      return 0;
diff --git a/include/grub/powerpc/ieee1275/alloc.h b/include/grub/powerpc/ieee1275/alloc.h
index 136e1df0b..b3d14f095 100644
--- a/include/grub/powerpc/ieee1275/alloc.h
+++ b/include/grub/powerpc/ieee1275/alloc.h
@@ -11,6 +11,7 @@ struct regions_claim_request {
    bool init_region;       /* whether to init the region */
    grub_uint64_t addr;     /* result address */
    grub_uint64_t len;      /* number of bytes allocated */
+  grub_size_t align;      /* alignment restrictions */
  };
#endif /* GRUB_POWERPC_IEEE1275_ALLOC_HEADER */



reply via email to

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