On Thu, Dec 14, 2023 at 05:09:01PM +0200, Andy Shevchenko wrote: > On Thu, Dec 14, 2023 at 05:03:03PM +0200, Andy Shevchenko wrote: > > On Thu, Dec 14, 2023 at 05:58:11PM +0800, Kent Gibson wrote: > > ... > > > > +/* > > > + * Used to populate gpio_v2_line_info with cdev specific fields not contained > > > + * in the struct gpio_desc. > > > + * A line is determined to contain supplemental information by > > > + * line_is_supplemental(). > > > + */ > > > +static struct { > > > + /* a rbtree of the struct lines containing the supplemental info */ > > > + struct rb_root tree; > > > + /* covers tree */ > > > + spinlock_t lock; > > > +} supinfo; > > Hmm... If I read the kernel-doc script it should support anonymous structs > and unions... > > ... > > > > +static void supinfo_init(void) > > > +{ > > > + supinfo.tree = RB_ROOT; > > > + spin_lock_init(&supinfo.lock); > > > +} > > > > Can it be done statically? > > > > supinfo = { > > .tree = RB_ROOT, > > .lock = __SPIN_LOCK_UNLOCKED(supinfo.lock), > > I even checked the current tree, we have 32 users of this pattern in drivers/. > Ah, that is what you meant. Yeah sure can - the supinfo_init() is another hangover from when I was trying to create the supinfo per chip, but now it is a global a static initialiser makes sense. And I still haven't received the email you quote there. Cheers, Kent.