On 04/02/2025 8:36 am, Jan Beulich wrote: > On 03.02.2025 17:58, Jan Beulich wrote: >> On 03.02.2025 17:48, Andrew Cooper wrote: >>> On 03/02/2025 4:26 pm, Jan Beulich wrote: >>>> ... now that static initialization is possible. Use RADIX_TREE() for >>>> pci_segments and ivrs_maps. >>>> >>>> Requested-by: Andrew Cooper <andrew.coop...@citrix.com> >>>> Signed-off-by: Jan Beulich <jbeul...@suse.com> >>> I'd not considered having RADIX_TREE() but it's nicer than my attempt. >>> >>> However, >>> >>>> --- a/xen/include/xen/radix-tree.h >>>> +++ b/xen/include/xen/radix-tree.h >>>> @@ -72,6 +72,9 @@ struct radix_tree_root { >>>> *** radix-tree API starts here ** >>>> */ >>>> >>>> +#define RADIX_TREE_INIT() {} >>> ... this ought to be (struct radix_tree_root){} so it can't be used with >>> other types, and radix_tree_init() wants to become: >>> >>> void radix_tree_init(struct radix_tree_root *root) >>> { >>> *root = RADIX_TREE_INIT(); >>> } >>> >>> instead of the raw memset(), so the connection is retained. >> Can do; in fact I did consider both, but omitted them for simplicity. > Sadly I've now learned the hard way that the former can't be done. Gcc > 4.3 complains "initializer element is not constant", which - aiui - is > correct when considering plain C99 (and apparently the GNU99 extension > to this was introduced only later). > > What I can do is make this compiler version dependent, adding type- > safety on at least all more modern compilers. Thoughts?
I think you can guess what my view is about us still supporting GCC 4.3. As this needs backporting, lets just go with {} for now. ~Andrew