Re: [PATCH] gpiolib: fix filtering out unwanted events
On Thu, Jun 29, 2017 at 1:03 PM, Bartosz Golaszewskiwrote: > 2017-06-29 11:33 GMT+02:00 Linus Walleij : >> On Fri, Jun 23, 2017 at 1:45 PM, Bartosz Golaszewski 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 >> >> 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
Re: [PATCH] gpiolib: fix filtering out unwanted events
On Thu, Jun 29, 2017 at 1:03 PM, Bartosz Golaszewski wrote: > 2017-06-29 11:33 GMT+02:00 Linus Walleij : >> On Fri, Jun 23, 2017 at 1:45 PM, Bartosz Golaszewski 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 >> >> 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
Re: [PATCH] gpiolib: fix filtering out unwanted events
2017-06-29 11:33 GMT+02:00 Linus Walleij: > On Fri, Jun 23, 2017 at 1:45 PM, Bartosz Golaszewski 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 > > 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
Re: [PATCH] gpiolib: fix filtering out unwanted events
2017-06-29 11:33 GMT+02:00 Linus Walleij : > On Fri, Jun 23, 2017 at 1:45 PM, Bartosz Golaszewski 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 > > 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
Re: [PATCH] gpiolib: fix filtering out unwanted events
On Fri, Jun 23, 2017 at 1:45 PM, Bartosz Golaszewskiwrote: > 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 Patch applied for fixes. Yours, Linus Walleij
Re: [PATCH] gpiolib: fix filtering out unwanted events
On Fri, Jun 23, 2017 at 1:45 PM, Bartosz Golaszewski 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 Patch applied for fixes. Yours, Linus Walleij
Re: [PATCH] gpiolib: fix filtering out unwanted events
2017-06-23 13:45 GMT+02:00 Bartosz Golaszewski: > Hi Linux, > s/Linux/Linus :) Bartosz
Re: [PATCH] gpiolib: fix filtering out unwanted events
2017-06-23 13:45 GMT+02:00 Bartosz Golaszewski : > Hi Linux, > s/Linux/Linus :) Bartosz
[PATCH] gpiolib: fix filtering out unwanted events
Hi Linux, I've just fixed an issue in libgpiod which accidentally also led to filtering out unwanted events in user space instead of gpiolib kernel code. I then noticed that programs don't behave correctly and tracked it down to an issue in gpiolib.c. Please take a look at the fix. The bug has been there for some time and it's quite late in the release cycle, but I believe it should still go in v4.12 since currently the character device interface doesn't do what it promises to. Bartosz Golaszewski (1): gpiolib: fix filtering out unwanted events drivers/gpio/gpiolib.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) -- 2.9.3
[PATCH] gpiolib: fix filtering out unwanted events
Hi Linux, I've just fixed an issue in libgpiod which accidentally also led to filtering out unwanted events in user space instead of gpiolib kernel code. I then noticed that programs don't behave correctly and tracked it down to an issue in gpiolib.c. Please take a look at the fix. The bug has been there for some time and it's quite late in the release cycle, but I believe it should still go in v4.12 since currently the character device interface doesn't do what it promises to. Bartosz Golaszewski (1): gpiolib: fix filtering out unwanted events drivers/gpio/gpiolib.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) -- 2.9.3
[PATCH] gpiolib: fix filtering out unwanted events
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--- drivers/gpio/gpiolib.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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) -- 2.9.3
[PATCH] gpiolib: fix filtering out unwanted events
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 --- drivers/gpio/gpiolib.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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) -- 2.9.3