From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Cc: htejun@gmail.com, linux-kernel@vger.kernel.org,
Guenter Roeck <linux@roeck-us.net>
Subject: Re: [PATCH v2 4/7] driver core: add devm_device_add_group() and friends
Date: Thu, 20 Jul 2017 10:20:09 +0200 [thread overview]
Message-ID: <20170720082009.GB12571@kroah.com> (raw)
In-Reply-To: <BE1DA622-8285-4A3F-8885-4D08F3E42646@gmail.com>
On Thu, Jul 20, 2017 at 01:12:56AM -0700, Dmitry Torokhov wrote:
> On July 19, 2017 10:10:18 PM PDT, Greg Kroah-Hartman <gregkh@linuxfoundation.org> wrote:
> >On Wed, Jul 19, 2017 at 05:24:33PM -0700, Dmitry Torokhov wrote:
> >> Many drivers create additional driver-specific device attributes when
> >> binding to the device, and providing managed version of
> >> device_create_group() will simplify unbinding and error handling in
> >probe
> >> path for such drivers.
> >>
> >> Without managed version driver writers either have to mix manual and
> >> managed resources, which is prone to errors, or open-code this
> >function by
> >> providing a wrapper to device_add_group() and use it with
> >devm_add_action()
> >> or devm_add_action_or_reset().
> >>
> >> Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
> >> ---
> >> drivers/base/core.c | 130
> >+++++++++++++++++++++++++++++++++++++++++++++++++
> >> include/linux/device.h | 9 ++++
> >> 2 files changed, 139 insertions(+)
> >>
> >> diff --git a/drivers/base/core.c b/drivers/base/core.c
> >> index 14f8cf5c8b05..09723532725d 100644
> >> --- a/drivers/base/core.c
> >> +++ b/drivers/base/core.c
> >> @@ -1035,6 +1035,136 @@ void device_remove_groups(struct device *dev,
> >> }
> >> EXPORT_SYMBOL_GPL(device_remove_groups);
> >>
> >> +union device_attr_group_devres {
> >> + const struct attribute_group *group;
> >> + const struct attribute_group **groups;
> >> +};
> >> +
> >> +static int devm_attr_group_match(struct device *dev, void *res, void
> >*data)
> >> +{
> >> + return ((union device_attr_group_devres *)res)->group == data;
> >> +}
> >> +
> >> +static void devm_attr_group_remove(struct device *dev, void *res)
> >> +{
> >> + union device_attr_group_devres *devres = res;
> >> + const struct attribute_group *group = devres->group;
> >> +
> >> + dev_dbg(dev, "%s: removing group %p\n", __func__, group);
> >> + sysfs_remove_group(&dev->kobj, group);
> >> +}
> >> +
> >> +static void devm_attr_groups_remove(struct device *dev, void *res)
> >> +{
> >> + union device_attr_group_devres *devres = res;
> >> + const struct attribute_group **groups = devres->groups;
> >> +
> >> + dev_dbg(dev, "%s: removing groups %p\n", __func__, groups);
> >> + sysfs_remove_groups(&dev->kobj, groups);
> >> +}
> >> +
> >> +/**
> >> + * devm_device_add_group - given a device, create a managed
> >attribute group
> >> + * @dev: The device to create the group for
> >> + * @grp: The attribute group to create
> >> + *
> >> + * This function creates a group for the first time. It will
> >explicitly
> >> + * warn and error if any of the attribute files being created
> >already exist.
> >> + *
> >> + * Returns 0 on success or error code on failure.
> >> + */
> >> +int devm_device_add_group(struct device *dev, const struct
> >attribute_group *grp)
> >> +{
> >> + union device_attr_group_devres *devres;
> >> + int error;
> >> +
> >> + devres = devres_alloc(devm_attr_group_remove,
> >> + sizeof(*devres), GFP_KERNEL);
> >> + if (!devres)
> >> + return -ENOMEM;
> >> +
> >> + error = sysfs_create_group(&dev->kobj, grp);
> >
> >Minor nit, this can now call device_create_group(), right?
> >
> >Same with below I think as well.
>
> Right.
>
> >
> >It's fine, these look great, I'll queue them up this afternoon...
> >
> >Thanks for persisting with these, and sorry it took so long to convince
> >me I was wrong :)
>
> :)
>
> Any chance you could create an unmutable branch off 4.12 so I can start using it in input drivers?
I'll be glad to, can it be off of 4.13-rc1? Or do you need it off of
4.12?
thanks,
greg k-h
next prev parent reply other threads:[~2017-07-20 8:20 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-07-20 0:24 [PATCH v2 0/7] New bind/unbingd uevents Dmitry Torokhov
2017-07-20 0:24 ` [PATCH v2 1/7] driver core: emit uevents when device is bound to a driver Dmitry Torokhov
2017-09-29 19:36 ` Dan Williams
2017-09-29 19:40 ` Ruhl, Michael J
2017-09-29 23:23 ` Dmitry Torokhov
2017-09-30 8:13 ` Greg Kroah-Hartman
2017-07-20 0:24 ` [PATCH v2 2/7] driver core: make device_{add|remove}_groups() public Dmitry Torokhov
2017-07-20 0:24 ` [PATCH v2 3/7] driver core: add device_{add|remove}_group() helpers Dmitry Torokhov
2017-07-20 0:24 ` [PATCH v2 4/7] driver core: add devm_device_add_group() and friends Dmitry Torokhov
2017-07-20 5:10 ` Greg Kroah-Hartman
2017-07-20 8:12 ` Dmitry Torokhov
2017-07-20 8:20 ` Greg Kroah-Hartman [this message]
2017-07-20 15:50 ` Dmitry Torokhov
2017-07-22 10:03 ` Greg Kroah-Hartman
2017-07-20 0:24 ` [PATCH v2 5/7] Input: gpio_keys - use devm_device_add_group() for attributes Dmitry Torokhov
2017-07-20 3:22 ` Guenter Roeck
2017-07-20 0:24 ` [PATCH v2 6/7] Input: synaptics_rmi4 - use devm_device_add_group() for attributes in F01 Dmitry Torokhov
2017-07-20 3:22 ` Guenter Roeck
2017-07-20 0:24 ` [PATCH v2 7/7] Input: axp20x-pek - switch to using devm_device_add_group() Dmitry Torokhov
2017-07-20 3:21 ` Guenter Roeck
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=20170720082009.GB12571@kroah.com \
--to=gregkh@linuxfoundation.org \
--cc=dmitry.torokhov@gmail.com \
--cc=htejun@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux@roeck-us.net \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.