Commit 56d30ec1 authored by Johan Hovold's avatar Johan Hovold Committed by Linus Walleij

gpio: sysfs: clean up gpiod_export_link locking

Drop unnecessary locking from gpiod_export_link. If the class device has
not already been unregistered, class_find_device returns the ref-counted
class device so there's no need for locking.
Signed-off-by: default avatarJohan Hovold <johan@kernel.org>
Reviewed-by: default avatarAlexandre Courbot <acourbot@nvidia.com>
Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
parent e4339ce3
...@@ -631,34 +631,22 @@ static int match_export(struct device *dev, const void *desc) ...@@ -631,34 +631,22 @@ static int match_export(struct device *dev, const void *desc)
int gpiod_export_link(struct device *dev, const char *name, int gpiod_export_link(struct device *dev, const char *name,
struct gpio_desc *desc) struct gpio_desc *desc)
{ {
int status = -EINVAL; struct device *cdev;
int ret;
if (!desc) { if (!desc) {
pr_warn("%s: invalid GPIO\n", __func__); pr_warn("%s: invalid GPIO\n", __func__);
return -EINVAL; return -EINVAL;
} }
mutex_lock(&sysfs_lock); cdev = class_find_device(&gpio_class, NULL, desc, match_export);
if (!cdev)
if (test_bit(FLAG_EXPORT, &desc->flags)) { return -ENODEV;
struct device *tdev;
tdev = class_find_device(&gpio_class, NULL, desc, match_export);
if (tdev != NULL) {
status = sysfs_create_link(&dev->kobj, &tdev->kobj,
name);
put_device(tdev);
} else {
status = -ENODEV;
}
}
mutex_unlock(&sysfs_lock);
if (status) ret = sysfs_create_link(&dev->kobj, &cdev->kobj, name);
gpiod_dbg(desc, "%s: status %d\n", __func__, status); put_device(cdev);
return status; return ret;
} }
EXPORT_SYMBOL_GPL(gpiod_export_link); EXPORT_SYMBOL_GPL(gpiod_export_link);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment