Hi Michal, Julien, > On 28 Jan 2025, at 09:40, Michal Orzel <michal.or...@amd.com> wrote: > > On Arm32, when CONFIG_PHYS_ADDR_T_32 is set, a build failure is observed: > common/device-tree/bootfdt.c: In function 'build_assertions': > ./include/xen/macros.h:47:31: error: static assertion failed: > "!(alignof(struct membanks) != 8)" > 47 | #define BUILD_BUG_ON(cond) ({ _Static_assert(!(cond), "!(" #cond ")"); > }) > | ^~~~~~~~~~~~~~ > common/device-tree/bootfdt.c:31:5: note: in expansion of macro 'BUILD_BUG_ON' > 31 | BUILD_BUG_ON(alignof(struct membanks) != 8); > > When CONFIG_PHYS_ADDR_T_32 is set, paddr_t is defined as unsigned long, > therefore the struct membanks alignment is 4B and not 8B. The check is > there to ensure the struct membanks and struct membank, which is a > member of the former, are equally aligned. Therefore modify the check to > compare alignments obtained via alignof not to rely on hardcoded > values. > > Fixes: 2209c1e35b47 ("xen/arm: Introduce a generic way to access memory bank > structures") > Signed-off-by: Michal Orzel <michal.or...@amd.com> > Release-Acked-by: Oleksii Kurochko <oleksii.kuroc...@gmail.com> > --- > Changes in v2: > - modify the check to test against alignment of struct membank > --- > xen/common/device-tree/bootfdt.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/xen/common/device-tree/bootfdt.c > b/xen/common/device-tree/bootfdt.c > index 47386d4fffea..529c91e603ab 100644 > --- a/xen/common/device-tree/bootfdt.c > +++ b/xen/common/device-tree/bootfdt.c > @@ -27,8 +27,8 @@ static void __init __maybe_unused build_assertions(void) > */ > BUILD_BUG_ON((offsetof(struct membanks, bank) != > offsetof(struct meminfo, bank))); > - /* Ensure "struct membanks" is 8-byte aligned */ > - BUILD_BUG_ON(alignof(struct membanks) != 8); > + /* Ensure "struct membanks" and "struct membank" are equally aligned */ > + BUILD_BUG_ON(alignof(struct membanks) != alignof(struct membank));
Apologies for not catching the issue for your v1, probably I didn't understand very well the test itself, why are we checking that the structure have the same alignment? I see we check the offset of `(struct membanks).bank` against `(struct meminfo|struct shared_meminfo).bank`, isn't that enough? For sure I’m missing something... Anyway I tested this: Tested-by: Luca Fancellu <luca.fance...@arm.com> > } > > static bool __init device_tree_node_is_available(const void *fdt, int node) > -- > 2.25.1 > >