Re: [PATCH 3/5] driver core: make struct device_type.uevent() take a const *

Greg Kroah-Hartman
2022-11-23T17:01:55Z

On Wed, Nov 23, 2022 at 12:25:32PM -0400, Jason Gunthorpe wrote:
> On Wed, Nov 23, 2022 at 04:37:59PM +0100, Greg Kroah-Hartman wrote:
> > static inline struct device *__kobj_to_dev(struct kobject *kobj)
> > {
> > return container_of(kobj, struct device, kobj);
> > }
> >
> > static inline const struct device *__kobj_to_dev_const(const struct kobject *kobj)
> > {
> > return container_of(kobj, const struct device, kobj);
> > }
> >
> > /*
> > * container_of() will happily take a const * and spit back a non-const * as it
> > * is just doing pointer math. But we want to be a bit more careful in the
> > * driver code, so manually force any const * of a kobject to also be a const *
> > * to a device.
> > */
> > #define kobj_to_dev(kobj) \
> > _Generic((kobj), \
> > const struct kobject *: __kobj_to_dev_const, \
> > struct kobject *: __kobj_to_dev)(kobj)
> >
> >
> > Want me to do the same thing here as well?
>
> It would be nice to have a shared macro code gen all of the above
> instead of copy and pasting it. Then maybe other cases beyond struct
> device could adopt const too..

I think I tried to create such a beast, but failed, so ended up
open-coding it in a few places in the USB headers already. I can try it
again, but the redirection gets tricky (defines creating defines...)

thanks,

greg k-h