From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Cc: Johan Hovold <johan@kernel.org>,
lkml <linux-kernel@vger.kernel.org>,
Richard Gong <richard.gong@linux.intel.com>,
Romain Izard <romain.izard.pro@gmail.com>,
"Rafael J. Wysocki" <rafael@kernel.org>,
Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
Mans Rullgard <mans@mansr.com>,
Bartosz Golaszewski <bgolaszewski@baylibre.com>,
Randy Dunlap <rdunlap@infradead.org>
Subject: Re: [PATCH 01/12 v2] Platform: add a dev_groups pointer to struct platform_driver
Date: Sat, 6 Jul 2019 10:32:51 +0200 [thread overview]
Message-ID: <20190706083251.GA9249@kroah.com> (raw)
In-Reply-To: <CAKdAkRQ4W7wjYjZcBn4_s+PD26pv_8mrjUt-ne24GkimGEXoiA@mail.gmail.com>
On Thu, Jul 04, 2019 at 02:17:22PM -0700, Dmitry Torokhov wrote:
> Hi Greg,
>
> On Thu, Jul 4, 2019 at 5:15 AM Greg Kroah-Hartman
> <gregkh@linuxfoundation.org> wrote:
> >
> > Platform drivers like to add sysfs groups to their device, but right now
> > they have to do it "by hand". The driver core should handle this for
> > them, but there is no way to get to the bus-default attribute groups as
> > all platform devices are "special and unique" one-off drivers/devices.
> >
> > To combat this, add a dev_groups pointer to platform_driver which allows
> > a platform driver to set up a list of default attributes that will be
> > properly created and removed by the platform driver core when a probe()
> > function is successful and removed right before the device is unbound.
>
> Why is this limited to platform bus? Drivers for other buses also
> often want to augment list of their attributes during probe(). I'd
> move it to generic probe handling.
This is not limited to the platform at all, the driver core supports
this for any bus type today, but it's then up to the bus-specific code
to pass that on to the driver core. That's usually set for the
bus-specific attributes that they want exposed for all devices of that
bus type (see the bus_groups, dev_groups, and drv_groups pointers in
struct bus_type).
For the platform devices, the problem is that this is something that the
individual drivers want after they bind to the device. And as all
platform devices are "different" they can't be a "common" set of
attributes, so they need to be created after the device is bound to the
driver.
> > Cc: Richard Gong <richard.gong@linux.intel.com>
> > Cc: Romain Izard <romain.izard.pro@gmail.com>
> > Cc: "Rafael J. Wysocki" <rafael@kernel.org>
> > Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> > Cc: Mans Rullgard <mans@mansr.com>
> > Cc: Bartosz Golaszewski <bgolaszewski@baylibre.com>
> > Cc: Randy Dunlap <rdunlap@infradead.org>
> > Cc: Johan Hovold <johan@kernel.org>
> > Cc: linux-kernel@vger.kernel.org
> > Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> > ---
> > v2: addressed Johan's comments by reordering when we remove the files
> > from the device, and clean up on an error in a nicer way. Ended up
> > making the patch smaller overall, always nice.
> >
> > drivers/base/platform.c | 16 +++++++++++++++-
> > include/linux/platform_device.h | 1 +
> > 2 files changed, 16 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/base/platform.c b/drivers/base/platform.c
> > index 713903290385..74428a1e03f3 100644
> > --- a/drivers/base/platform.c
> > +++ b/drivers/base/platform.c
> > @@ -614,8 +614,20 @@ static int platform_drv_probe(struct device *_dev)
> >
> > if (drv->probe) {
> > ret = drv->probe(dev);
> > - if (ret)
> > + if (ret) {
> > + dev_pm_domain_detach(_dev, true);
> > + goto out;
> > + }
> > + }
> > + if (drv->dev_groups) {
> > + ret = device_add_groups(_dev, drv->dev_groups);
> > + if (ret) {
> > + if (drv->remove)
> > + drv->remove(dev);
> > dev_pm_domain_detach(_dev, true);
> > + return ret;
> > + }
> > + kobject_uevent(&_dev->kobj, KOBJ_CHANGE);
>
> We already emit KOBJ_BIND when we finish binding device to a driver,
> regardless of the bus. I know we still need to teach systemd to handle
> it properly, but I think it is better than sprinkling KOBJ_CHANGE
> around.
But the object's attributes did just change, which is what KOBJ_CHANGE
tells userspace, so this should be the correct thing to say to
userspace.
And yes, ideally KOBJ_BIND would be handled, and it will be sent once
the device's probe function succeeds, but we have to deal with old
userspaces as well, right?
thanks,
greg k-h
next prev parent reply other threads:[~2019-07-06 8:33 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-07-04 8:46 [PATCH 00/11] Platform drivers, provide a way to add sysfs groups easily Greg Kroah-Hartman
2019-07-04 8:46 ` [PATCH 01/11] Platform: add a dev_groups pointer to struct platform_driver Greg Kroah-Hartman
2019-07-04 9:32 ` Johan Hovold
2019-07-04 10:43 ` Greg Kroah-Hartman
2019-07-04 12:11 ` [PATCH 01/12 v2] " Greg Kroah-Hartman
2019-07-04 21:17 ` Dmitry Torokhov
2019-07-06 8:32 ` Greg Kroah-Hartman [this message]
2019-07-06 17:04 ` Dmitry Torokhov
2019-07-06 17:19 ` Greg Kroah-Hartman
2019-07-06 17:39 ` Dmitry Torokhov
2019-07-19 11:52 ` Greg Kroah-Hartman
2019-07-20 4:38 ` Dmitry Torokhov
2019-07-25 13:44 ` Greg Kroah-Hartman
2019-07-25 19:02 ` Richard Gong
2019-07-25 19:04 ` Greg Kroah-Hartman
2019-07-25 19:13 ` Dmitry Torokhov
2019-07-25 19:18 ` Dmitry Torokhov
2019-07-04 8:46 ` [PATCH 02/11] uio: uio_fsl_elbc_gpcm: convert platform driver to use dev_groups Greg Kroah-Hartman
2019-07-04 8:46 ` [PATCH 03/11] serial: sh-sci: use driver core functions, not sysfs ones Greg Kroah-Hartman
2019-07-04 8:46 ` [PATCH 04/11] firmware: arm_scpi: convert platform driver to use dev_groups Greg Kroah-Hartman
2019-07-04 9:10 ` Sudeep Holla
2019-07-31 12:28 ` Greg Kroah-Hartman
2019-07-04 8:46 ` [PATCH 05/11] olpc: x01: " Greg Kroah-Hartman
2019-07-04 13:28 ` Andy Shevchenko
2019-07-04 8:46 ` [PATCH 06/11] platform: x86: hp-wmi: " Greg Kroah-Hartman
2019-07-04 13:29 ` Andy Shevchenko
2019-07-04 8:46 ` [PATCH 07/11] video: fbdev: wm8505fb: " Greg Kroah-Hartman
2019-07-04 13:29 ` Andy Shevchenko
2019-07-04 14:25 ` Greg Kroah-Hartman
2019-07-04 8:46 ` [PATCH 08/11] video: fbdev: w100fb: " Greg Kroah-Hartman
2019-07-05 15:01 ` Bartlomiej Zolnierkiewicz
2019-07-04 8:46 ` [PATCH 09/11] video: fbdev: sm501fb: " Greg Kroah-Hartman
2019-07-05 15:01 ` Bartlomiej Zolnierkiewicz
2019-07-04 8:46 ` [PATCH 10/11] input: keyboard: gpio_keys: " Greg Kroah-Hartman
2019-07-04 8:46 ` [PATCH 11/11] input: axp20x-pek: " Greg Kroah-Hartman
2019-07-04 14:26 ` [PATCH 07/11] video: fbdev: wm8505fb: " Greg Kroah-Hartman
2019-07-05 15:00 ` Bartlomiej Zolnierkiewicz
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=20190706083251.GA9249@kroah.com \
--to=gregkh@linuxfoundation.org \
--cc=andriy.shevchenko@linux.intel.com \
--cc=bgolaszewski@baylibre.com \
--cc=dmitry.torokhov@gmail.com \
--cc=johan@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mans@mansr.com \
--cc=rafael@kernel.org \
--cc=rdunlap@infradead.org \
--cc=richard.gong@linux.intel.com \
--cc=romain.izard.pro@gmail.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