[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v5 04/10] kern/ieee1275/init: ppc64: Add support for alignment re
From: |
Stefan Berger |
Subject: |
[PATCH v5 04/10] kern/ieee1275/init: ppc64: Add support for alignment requirements |
Date: |
Wed, 15 Nov 2023 10:59:35 -0500 |
Add support for memory alignment requirements and adjust a candidate
address to it before checking whether the block is large enough. This
must be done in this order since the alignment adjustment can make a
block smaller than what was requested.
None of the current callers has memory alignment requirements but the
ieee1275 loader for kernel and initrd will use it to convey them.
Signed-off-by: stefan Berger <stefanb@linux.ibm.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.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 | 14 ++++++++++++++
include/grub/powerpc/ieee1275/alloc.h | 1 +
2 files changed, 15 insertions(+)
diff --git a/grub-core/kern/ieee1275/init.c b/grub-core/kern/ieee1275/init.c
index 6d5fb573a..d71d4b682 100644
--- a/grub-core/kern/ieee1275/init.c
+++ b/grub-core/kern/ieee1275/init.c
@@ -502,6 +502,20 @@ 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);
+ 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 346d26429..f04738c2c 100644
--- a/include/grub/powerpc/ieee1275/alloc.h
+++ b/include/grub/powerpc/ieee1275/alloc.h
@@ -30,6 +30,7 @@ struct regions_claim_request {
grub_uint32_t total; /* number of requested bytes */
bool init_region; /* whether to add memory to the heap using
grub_mm_init_region() */
grub_uint64_t addr; /* result address */
+ grub_size_t align; /* alignment restrictions */
};
#endif /* GRUB_POWERPC_IEEE1275_ALLOC_HEADER */
--
2.25.1
- [PATCH v5 00/10] ppc64: Restrict memory allocations for kernel and initrd, Stefan Berger, 2023/11/15
- [PATCH v5 04/10] kern/ieee1275/init: ppc64: Add support for alignment requirements,
Stefan Berger <=
- [PATCH v5 03/10] kern/ieee1275/init: ppc64: Return allocated address using context, Stefan Berger, 2023/11/15
- [PATCH v5 01/10] kern/ieee1275/init: ppc64: Introduce a request for regions_claim, Stefan Berger, 2023/11/15
- [PATCH v5 02/10] kern/ieee1275/init: ppc64: Decide by request whether to initialize region, Stefan Berger, 2023/11/15
- [PATCH v5 06/10] kern/ieee1275/cmain: ppc64: Introduce flags to identify KVM and Power VM, Stefan Berger, 2023/11/15
- [PATCH v5 05/10] kern/ieee1275/init: ppc64: Rename regions_claim to grub_regions_claim, Stefan Berger, 2023/11/15
- [PATCH v5 07/10] loader/powerpc/ieee1275: Use new allocation function for kernel and initrd, Stefan Berger, 2023/11/15
- [PATCH v5 08/10] kern/ieee1275/ieee1275: debug: Display successful memory claims, Stefan Berger, 2023/11/15
- [PATCH v5 09/10] kern/ieee1275/init: ppc64: Fix a comment, Stefan Berger, 2023/11/15
- [PATCH v5 10/10] kern/ieee1275/init: ppc64: Display upper_mem_limit for debugging, Stefan Berger, 2023/11/15
- Re: [PATCH v5 00/10] ppc64: Restrict memory allocations for kernel and initrd, Stefan Berger, 2023/11/15