Message ID | 1498218316-27860-2-git-send-email-brgl@bgdev.pl |
---|---|
State | New |
Headers | show |
On Fri, Jun 23, 2017 at 1:45 PM, Bartosz Golaszewski <brgl@bgdev.pl> wrote: > GPIOEVENT_REQUEST_BOTH_EDGES is not a single flag, but a binary OR of > GPIOEVENT_REQUEST_RISING_EDGE and GPIOEVENT_REQUEST_FALLING_EDGE. > > The expression 'le->eflags & GPIOEVENT_REQUEST_BOTH_EDGES' we'll get > evaluated to true even if only one event type was requested. > > Fix it by checking both RISING & FALLING flags explicitly. > > Signed-off-by: Bartosz Golaszewski <brgl@bgdev.pl> Patch applied for fixes. Yours, Linus Walleij -- To unsubscribe from this list: send the line "unsubscribe linux-gpio" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
2017-06-29 11:33 GMT+02:00 Linus Walleij <linus.walleij@linaro.org>: > On Fri, Jun 23, 2017 at 1:45 PM, Bartosz Golaszewski <brgl@bgdev.pl> wrote: > >> GPIOEVENT_REQUEST_BOTH_EDGES is not a single flag, but a binary OR of >> GPIOEVENT_REQUEST_RISING_EDGE and GPIOEVENT_REQUEST_FALLING_EDGE. >> >> The expression 'le->eflags & GPIOEVENT_REQUEST_BOTH_EDGES' we'll get >> evaluated to true even if only one event type was requested. >> >> Fix it by checking both RISING & FALLING flags explicitly. >> >> Signed-off-by: Bartosz Golaszewski <brgl@bgdev.pl> > > Patch applied for fixes. > > Yours, > Linus Walleij Thanks. I think this should also go to linux-stable (e.g. 4.9 LTS is affected). Will you forward it or should I do it myself? Thanks, Bartosz -- To unsubscribe from this list: send the line "unsubscribe linux-gpio" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Thu, Jun 29, 2017 at 1:03 PM, Bartosz Golaszewski <brgl@bgdev.pl> wrote: > 2017-06-29 11:33 GMT+02:00 Linus Walleij <linus.walleij@linaro.org>: >> On Fri, Jun 23, 2017 at 1:45 PM, Bartosz Golaszewski <brgl@bgdev.pl> wrote: >> >>> GPIOEVENT_REQUEST_BOTH_EDGES is not a single flag, but a binary OR of >>> GPIOEVENT_REQUEST_RISING_EDGE and GPIOEVENT_REQUEST_FALLING_EDGE. >>> >>> The expression 'le->eflags & GPIOEVENT_REQUEST_BOTH_EDGES' we'll get >>> evaluated to true even if only one event type was requested. >>> >>> Fix it by checking both RISING & FALLING flags explicitly. >>> >>> Signed-off-by: Bartosz Golaszewski <brgl@bgdev.pl> >> >> Patch applied for fixes. >> >> Yours, >> Linus Walleij > > Thanks. I think this should also go to linux-stable (e.g. 4.9 LTS is > affected). Will you forward it or should I do it myself? I have added the stable tag so it should JustWork(TM). Yours, Linus Walleij -- To unsubscribe from this list: send the line "unsubscribe linux-gpio" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c index 5db4413..a42a1ee 100644 --- a/drivers/gpio/gpiolib.c +++ b/drivers/gpio/gpiolib.c @@ -708,7 +708,8 @@ static irqreturn_t lineevent_irq_thread(int irq, void *p) ge.timestamp = ktime_get_real_ns(); - if (le->eflags & GPIOEVENT_REQUEST_BOTH_EDGES) { + if (le->eflags & GPIOEVENT_REQUEST_RISING_EDGE + && le->eflags & GPIOEVENT_REQUEST_FALLING_EDGE) { int level = gpiod_get_value_cansleep(le->desc); if (level)
GPIOEVENT_REQUEST_BOTH_EDGES is not a single flag, but a binary OR of GPIOEVENT_REQUEST_RISING_EDGE and GPIOEVENT_REQUEST_FALLING_EDGE. The expression 'le->eflags & GPIOEVENT_REQUEST_BOTH_EDGES' we'll get evaluated to true even if only one event type was requested. Fix it by checking both RISING & FALLING flags explicitly. Signed-off-by: Bartosz Golaszewski <brgl@bgdev.pl> --- drivers/gpio/gpiolib.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)