On 30.04.2024 13:09, Luca Fancellu wrote: > --- a/xen/arch/arm/include/asm/setup.h > +++ b/xen/arch/arm/include/asm/setup.h > @@ -64,18 +64,20 @@ struct membank { > }; > > struct membanks { > - unsigned int nr_banks; > - unsigned int max_banks; > + __struct_group(membanks_hdr, common, , > + unsigned int nr_banks; > + unsigned int max_banks; > + ); > struct membank bank[]; > };
I'm afraid I can't spot why __struct_group() is needed here. Why would just one of the two more straightforward struct membanks { struct membanks_hdr { unsigned int nr_banks; unsigned int max_banks; ); struct membank bank[]; }; struct membanks { struct membanks_hdr { unsigned int nr_banks; unsigned int max_banks; ) common; struct membank bank[]; }; not do? (Perhaps the latter, seeing that you need the field name in ... > struct meminfo { > - struct membanks common; > + struct membanks_hdr common; > struct membank bank[NR_MEM_BANKS]; > }; > > struct shared_meminfo { > - struct membanks common; > + struct membanks_hdr common; > struct membank bank[NR_SHMEM_BANKS]; > struct shmem_membank_extra extra[NR_SHMEM_BANKS]; > }; > @@ -166,25 +168,25 @@ extern domid_t max_init_domid; > > static inline struct membanks *bootinfo_get_mem(void) > { > - return &bootinfo.mem.common; > + return container_of(&bootinfo.mem.common, struct membanks, common); > } ... container_of() uses.) Jan