On 01.05.2024 08:57, Luca Fancellu wrote: > Hi Jan, > >> On 30 Apr 2024, at 12:37, Jan Beulich <jbeul...@suse.com> wrote: >> >> 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[]; >> }; >> > > At the first sight I thought this solution could have worked, however GCC > brought me back down to earth > remembering me that flexible array members can’t be left alone in an empty > structure: > > /data_sdc/lucfan01/gitlab_mickledore_xen/xen/xen/arch/arm/include/asm/setup.h:70:6: > error: declaration does not declare anything [-Werror] > 70 | }; > | ^ > /data_sdc/lucfan01/gitlab_mickledore_xen/xen/xen/arch/arm/include/asm/setup.h:71:20: > error: flexible array member in a struct with no named members > 71 | struct membank bank[]; > | ^~~~ > [...]
Since for patch 1 you looked at Linux'es uapi/linux/stddef.h, the solution to this lies there, in __DECLARE_FLEX_ARRAY(). Alongside or instead of borrowing __struct_group(), we could consider borrowing this as well. Or open-code it just here, for the time being (perhaps my preference). Yet it's not clear to me that doing so will actually be enough to make things work for you. Jan