[PATCH v2 0/7] syscore: Pass context data to callbacks
Greg Kroah-Hartman
gregkh at linuxfoundation.org
Tue Jul 22 07:08:09 PDT 2025
On Tue, Jul 22, 2025 at 03:56:40PM +0200, Thierry Reding wrote:
> On Sat, Jul 19, 2025 at 08:52:41AM +0200, Greg Kroah-Hartman wrote:
> > On Fri, Jul 18, 2025 at 03:49:37PM +0200, Thierry Reding wrote:
> > > On Thu, Jul 17, 2025 at 02:11:41PM +0200, Greg Kroah-Hartman wrote:
> > > > On Thu, Jul 17, 2025 at 12:32:34PM +0200, Thierry Reding wrote:
> [...]
> > > struct syscore;
> > >
> > > struct syscore_ops {
> > > int (*suspend)(struct syscore *syscore);
> > > void (*resume)(struct syscore *syscore);
> > > void (*shutdown)(struct syscore *syscore);
> > > };
> > >
> > > struct syscore {
> > > const struct syscore_ops *ops;
> > > struct list_head node;
> > > };
> > >
> > > Is that what you had in mind?
> >
> > I missed the list_head, so yes, this would be better, but don't pass
> > back the syscore structure, how about just a void * instead, making the
> > whole container_of() stuff go away?
>
> Yeah, that's a possibility. I personally don't like passing the void *
> around because it's easier to make mistakes that way. I also find it
> unintuitive because it doesn't immediately show you what the functions
> expect.
>
> My understanding is that the container_of() should get optimized away
> most of the time, so there aren't any obvious downsides that I can see.
container_of() is just pointer math, but a cast is even faster :)
> But I don't feel very strongly, so if you have a strong preference for
> void pointers, I can do that.
That's what you really want to have here, it's a syscore data type
thing, that the callback wants to reference. Just like a irqrequest_t
function passes back a void * that the handler "knows" how to deal with
properly.
thanks,
greg k-h
More information about the linux-arm-kernel
mailing list