From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: Sakari Ailus <sakari.ailus@linux.intel.com>
Cc: linux-kernel@vger.kernel.org,
Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
"Rafael J. Wysocki" <rafael@kernel.org>
Subject: Re: [PATCH v2] driver core: allow kobj_to_dev() to take a const pointer
Date: Mon, 17 Oct 2022 10:04:14 +0200 [thread overview]
Message-ID: <Y00Mfgymi+Xv6El3@kroah.com> (raw)
In-Reply-To: <Y00KTAobXJ0/Jgv3@paasikivi.fi.intel.com>
On Mon, Oct 17, 2022 at 07:54:52AM +0000, Sakari Ailus wrote:
> Hi Greg,
>
> On Sun, Oct 16, 2022 at 12:41:26PM +0200, Greg Kroah-Hartman wrote:
> > If a const * to a kobject is passed to kobj_to_dev(), we want to return
> > back a const * to a device as the driver core shouldn't be modifying a
> > constant structure. But when dealing with container_of() the pointer
> > const attribute is cast away, so we need to manually handle this by
> > determining the type of the pointer passed in to know the type of the
> > pointer to pass out.
>
> Alternatively container_of() could be fixed, but that will likely produce
> lots of warnings currently.
Yeah, we can not do that because, as you found out, there's just too
many warnings that it would cause. Let's work on the individual
subsystems to clean them all up first before worrying about the core
container_of() macro as that should fix the majority of the build
warnings.
> > Luckily _Generic can do this type of magic, and as the kernel now
> > supports C11 it is availble to us to handle this type of build-time type
> > detection.
> >
> > Cc: Sakari Ailus <sakari.ailus@linux.intel.com>
> > Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> > Cc: "Rafael J. Wysocki" <rafael@kernel.org>
> > Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> > ---
> > v2 - use _Generic() to make this type safe as pointed out by Sakari
> >
> > include/linux/device.h | 18 +++++++++++++++++-
> > 1 file changed, 17 insertions(+), 1 deletion(-)
> >
> > diff --git a/include/linux/device.h b/include/linux/device.h
> > index 424b55df0272..023ea50b1916 100644
> > --- a/include/linux/device.h
> > +++ b/include/linux/device.h
> > @@ -680,11 +680,27 @@ struct device_link {
> > bool supplier_preactivated; /* Owned by consumer probe. */
> > };
> >
> > -static inline struct device *kobj_to_dev(struct kobject *kobj)
> > +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.
> > + */
>
> container_of() documentation has (probably?) never warned about this.
We never thought of it before :(
> Wouldn't such a comment be more appropriate there? Albeit it wouldn't be
> needed if container_of() were fixed.
Some comment added to container_of() would be great, but that does not
remove the need to keep this one.
thanks,
greg k-h
next prev parent reply other threads:[~2022-10-17 8:04 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-10-16 10:41 [PATCH v2] driver core: allow kobj_to_dev() to take a const pointer Greg Kroah-Hartman
2022-10-17 7:54 ` Sakari Ailus
2022-10-17 8:04 ` Greg Kroah-Hartman [this message]
2022-10-17 9:39 ` Sakari Ailus
2022-10-17 11:24 ` David Laight
2022-10-17 11:32 ` 'Greg Kroah-Hartman'
2022-10-17 9:24 ` Andy Shevchenko
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Y00Mfgymi+Xv6El3@kroah.com \
--to=gregkh@linuxfoundation.org \
--cc=andriy.shevchenko@linux.intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=rafael@kernel.org \
--cc=sakari.ailus@linux.intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox