gpiolib: notify user-space about line status changes after flags are set
PATCH 1/1 gpiolib: notify user-space about line status changes after flags are set
From: Bartosz Golaszewski <[email protected]>
Currently we emit the REQUESTED line state event after the line is requested but before the flags are configured. This is obviously wrong as we want to pass the updated lineinfo to user-space together with the event.
Since the flags can be configured in different ways depending on how the line is being requested - we need to call the notifier chain in different places separately.
---
This comes late in the release cycle but I only recently got down to writing libgpiod support for this new ioctl(). When writing test cases I noticed this doesn't really work as expected. This patch fixes the issue I identified this week. There may be more coming the following week though...
drivers/gpio/gpiolib.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-)
drivers/gpio/gpiolib.c +13 -2
@@ -729,6 +729,10 @@ static int linehandle_create(struct gpio_device *gdev, void __user *ip)if (ret) goto out_free_descs; } + +atomic_notifier_call_chain (&desc->gdev->notifier, +GPIOLINE_CHANGED_REQUESTED , desc); +dev_dbg (&gdev->dev,"registered chardev handle for line %d\n" , offset); }
@@ -1083,6 +1087,9 @@ static int lineevent_create(struct gpio_device *gdev, void __user *ip)if (ret) goto out_free_desc; +atomic_notifier_call_chain (&desc->gdev->notifier, +GPIOLINE_CHANGED_REQUESTED , desc); + le->irq =gpiod_to_irq (desc);if (le->irq <=0 ) { ret = -ENODEV ;
@@ -2975,8 +2982,6 @@ static int gpiod_request_commit(struct gpio_desc *desc, const char *label) } done:spin_unlock_irqrestore (&gpio_lock, flags); -atomic_notifier_call_chain (&desc->gdev->notifier, -GPIOLINE_CHANGED_REQUESTED , desc);return ret; }
@@ -4938,6 +4943,9 @@ struct gpio_desc *__must_check gpiod_get_index(struct device *dev,return ERR_PTR (ret); } +atomic_notifier_call_chain (&desc->gdev->notifier, +GPIOLINE_CHANGED_REQUESTED , desc); +return desc; }EXPORT_SYMBOL_GPL (gpiod_get_index);
@@ -5003,6 +5011,9 @@ struct gpio_desc *fwnode_get_named_gpiod(struct fwnode_handle *fwnode,return ERR_PTR (ret); } +atomic_notifier_call_chain (&desc->gdev->notifier, +GPIOLINE_CHANGED_REQUESTED , desc); +return desc; }EXPORT_SYMBOL_GPL (fwnode_get_named_gpiod);
Signature · 1 line
2.25.0
Quoted 3 lines · Bartosz Golaszewski
Since the flags can be configured in different ways depending on how the line is being requested - we need to call the notifier chain in different places separately.
Ooops.
Quoted 3 lines
This comes late in the release cycle but I only recently got down to writing libgpiod support for this new
ioctl(). When writing test cases I noticed this doesn't really work as expected.
This is why I am so grateful about the tests you are doing with libgpiod! We actually find these problems quickly and not after years. Thanks!
Quoted 3 lines
This patch fixes the
issue I identified this week. There may be more coming the following week though...
I will pull in your pull request once the next -rc is out as I had already sent my first pull request, but do not hesitate to bug me about this.
Yours,
Linus Walleij
Quoted 8 lines · Linus Walleij
Quoted 3 lines · Bartosz Golaszewski
Since the flags can be configured in different ways depending on how the line is being requested - we need to call the notifier chain in different places separately.
Ooops.
Quoted 8 lines
Quoted 3 lines
This comes late in the release cycle but I only recently got down to writing libgpiod support for this new
ioctl(). When writing test cases I noticed this doesn't really work as expected.This is why I am so grateful about the tests you are doing with libgpiod! We actually find these problems quickly and not after years. Thanks!
This forces me to add tests for chardev in MRAA ;) (Don't ask me about other interfaces)
Thanks,
Mani
Quoted 9 lines
Quoted 3 lines
This patch fixes the
issue I identified this week. There may be more coming the following week though...I will pull in your pull request once the next -rc is out as I had already sent my first pull request, but do not hesitate to bug me about this.
Yours,
Linus Walleij