On Wed, Dec 13, 2023 at 11:03:40AM +0100, Bartosz Golaszewski wrote: > On Wed, Dec 13, 2023 at 12:58 AM Kent Gibson <warthog618@xxxxxxxxx> wrote: > > > > On Tue, Dec 12, 2023 at 06:09:00PM +0100, Bartosz Golaszewski wrote: > > [snip] > > > > > > > Patches 2-4 look fine, I was about to review patch 1 in detail but I > > > thought I'd just throw this one in here before we commit to a specific > > > solution. > > > > > > For some reason I thought this would not work but I'm now considering > > > it as an alternative approach: is there anything wrong with adding > > > struct kref to struct line, allocating it separately per-line when > > > gpio_chardev_data is created, referencing it from struct linereq when > > > the line is being requested, and dropping the reference from > > > gpio_chardev_data and linereq when either is being removed? Other than > > > the increased number of allocations? > > > > > > > The collection of struct line always has to be global, right, as both > > gpio_chardev_data and linereq are ephemeral. e.g. if one process requests > > a line and another checks the lineinfo, those will have distinct > > gpio_chardev_data. > > > > Strictly speaking at least the supplemental info has to be globally > accessible. But I get your point. > > > But the key issue is that the linereq and struct line lifetimes are > > strictly tied - a struct line does not live beyond the containing linereq. > > I was thinking about decoupling one from the other actually. > I was also headed down that path - making the supplemental info for each line distinct from the struct line. But then I realised that the lifetime is strictly tied to the linereq, as per the struct line, and there was no benefit in a separate object - just more overhead. Cheers, Kent.