Message ID | 20200509141507.19531-1-brgl@bgdev.pl |
---|---|
State | New |
Headers | show |
Series | gpiolib: notify user-space about line status changes after flags are set | expand |
On Sat, May 9, 2020 at 4:15 PM Bartosz Golaszewski <brgl@bgdev.pl> wrote: > 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. > 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 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
On Sat, May 16, 2020 at 11:30:36AM +0200, Linus Walleij wrote: > On Sat, May 9, 2020 at 4:15 PM Bartosz Golaszewski <brgl@bgdev.pl> wrote: > > > 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. > > > 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 > > 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
diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c index 40f2d7f69be2..550751a6e51c 100644 --- a/drivers/gpio/gpiolib.c +++ b/drivers/gpio/gpiolib.c @@ -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);