From: Janusz Krzysztofik <jmkrzyszt@gmail.com>
To: Linus Walleij <linus.walleij@linaro.org>
Cc: "Andrew Lunn" <andrew@lunn.ch>,
"Ulf Hansson" <ulf.hansson@linaro.org>,
"Tony Lindgren" <tony@atomide.com>,
"Dominik Brodowski" <linux@dominikbrodowski.net>,
"Yegor Yefremov" <yegorslists@googlemail.com>,
netdev@vger.kernel.org, linux-i2c@vger.kernel.org,
"Peter Meerwald-Stadler" <pmeerw@pmeerw.net>,
"Marek Szyprowski" <m.szyprowski@samsung.com>,
devel@driverdev.osuosl.org,
"Florian Fainelli" <f.fainelli@gmail.com>,
"Peter Rosin" <peda@axentia.se>,
"Janusz Krzysztofik" <jmkrzyszt@gmail.com>,
"Krzysztof Kozlowski" <krzk@kernel.org>,
"Kishon Vijay Abraham I" <kishon@ti.com>,
linux-iio@vger.kernel.org,
"Peter Korsgaard" <peter.korsgaard@barco.com>,
"Geert Uytterhoeven" <geert@linux-m68k.org>,
linux-serial@vger.kernel.org, "Jiri Slaby" <jslaby@suse.com>,
"Michael Hennerich" <Michael.Hennerich@analog.com>,
"Uwe Kleine-König" <u.kleine-koenig@pengutronix.de>,
linux-gpio@vger.kernel.org
Subject: [PATCH] gpiolib: Fix incorrect use of find_next_zero_bit()
Date: Sat, 29 Sep 2018 14:20:22 +0200 [thread overview]
Message-ID: <20180929122022.6825-1-jmkrzyszt@gmail.com> (raw)
In-Reply-To: <20180923235336.22148-2-jmkrzyszt@gmail.com>
Commit b17566a6b08b ("gpiolib: Implement fast processing path in
get/set array"), already fixed to some extent with commit 5d581d7e8cdc
("gpiolib: Fix missing updates of bitmap index"), introduced a new mode
of processing bitmaps where bits applicable for fast bitmap processing
path are supposed to be skipped while iterating bits which don't apply.
Unfortunately, find_next_zero_bit() function supposed to skip over
those fast bits is always called with a 'start' argument equal to an
index of last zero bit found and returns that index value again an
again, causing an infinite loop.
Fix it by incrementing the index uncoditionally before
find_next_zero_bit() is optionally called.
Reported-by: Marek Szyprowski <m.szyprowski@samsung.com>
Signed-off-by: Janusz Krzysztofik <jmkrzyszt@gmail.com>
---
Marek,
Could you please test it on top of next-20180920 with "gpiolib: Fix
missing updates of bitmap index" and optionally "mmc: pwrseq_simple:
Fix incorrect handling of GPIO bitmap" also applied?
Thanks,
Janusz
drivers/gpio/gpiolib.c | 9 +++------
1 file changed, 3 insertions(+), 6 deletions(-)
diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
index 6ae13e3e05f1..940b543e966d 100644
--- a/drivers/gpio/gpiolib.c
+++ b/drivers/gpio/gpiolib.c
@@ -2878,12 +2878,11 @@ int gpiod_get_array_value_complex(bool raw, bool can_sleep,
int hwgpio = gpio_chip_hwgpio(desc);
__set_bit(hwgpio, mask);
+ i++;
if (array_info)
i = find_next_zero_bit(array_info->get_mask,
array_size, i);
- else
- i++;
} while ((i < array_size) &&
(desc_array[i]->gdev->chip == chip));
@@ -2903,12 +2902,11 @@ int gpiod_get_array_value_complex(bool raw, bool can_sleep,
value = !value;
__assign_bit(j, value_bitmap, value);
trace_gpio_value(desc_to_gpio(desc), 1, value);
+ j++;
if (array_info)
j = find_next_zero_bit(array_info->get_mask, i,
j);
- else
- j++;
}
if (mask != fastpath)
@@ -3191,12 +3189,11 @@ int gpiod_set_array_value_complex(bool raw, bool can_sleep,
__clear_bit(hwgpio, bits);
count++;
}
+ i++;
if (array_info)
i = find_next_zero_bit(array_info->set_mask,
array_size, i);
- else
- i++;
} while ((i < array_size) &&
(desc_array[i]->gdev->chip == chip));
/* push collected bits to outputs */
--
2.16.4
next prev parent reply other threads:[~2018-09-29 12:20 UTC|newest]
Thread overview: 75+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20180813223448.21316-1-jmkrzyszt@gmail.com>
2018-08-20 23:43 ` [RFC RFT PATCH 0/4] gpiolib: speed up GPIO array processing Janusz Krzysztofik
2018-08-20 23:43 ` [RFC RFT PATCH v4 1/4] gpiolib: Pass bitmaps, not integer arrays, to get/set array Janusz Krzysztofik
2018-08-21 6:49 ` Peter Rosin
2018-08-21 6:52 ` Peter Rosin
2018-08-29 12:03 ` Miguel Ojeda
2018-08-29 18:01 ` Janusz Krzysztofik
2018-08-20 23:43 ` [RFC RFT PATCH v4 2/4] gpiolib: Identify arrays matching GPIO hardware Janusz Krzysztofik
2018-08-20 23:43 ` [RFC RFT PATCH v4 3/4] gpiolib: Pass array info to get/set array functions Janusz Krzysztofik
2018-08-20 23:43 ` [RFC RFT PATCH v4 4/4] gpiolib: Implement fast processing path in get/set array Janusz Krzysztofik
2018-08-29 9:06 ` [RFC RFT PATCH 0/4] gpiolib: speed up GPIO array processing Linus Walleij
2018-08-29 18:16 ` Janusz Krzysztofik
2018-08-29 10:19 ` Ulf Hansson
2018-08-29 20:48 ` [PATH v5 " Janusz Krzysztofik
2018-08-29 20:48 ` [PATCH v5 1/4] gpiolib: Pass bitmaps, not integer arrays, to get/set array Janusz Krzysztofik
2018-08-30 4:30 ` Peter Rosin
2018-08-30 7:40 ` Geert Uytterhoeven
2018-08-30 11:10 ` Miguel Ojeda
2018-08-30 15:35 ` David Laight
2018-09-02 10:19 ` Janusz Krzysztofik
2018-08-31 9:14 ` Linus Walleij
2018-08-29 20:48 ` [PATCH v5 2/4] gpiolib: Identify arrays matching GPIO hardware Janusz Krzysztofik
2018-08-29 20:48 ` [PATCH v5 3/4] gpiolib: Pass array info to get/set array functions Janusz Krzysztofik
2018-08-29 20:49 ` [PATCH v5 4/4] gpiolib: Implement fast processing path in get/set array Janusz Krzysztofik
2018-08-31 22:56 ` [PATH v6 0/4] gpiolib: speed up GPIO array processing Janusz Krzysztofik
2018-08-31 22:56 ` [PATCH v6 1/4] gpiolib: Pass bitmaps, not integer arrays, to get/set array Janusz Krzysztofik
2018-09-01 0:23 ` Peter Rosin
2018-09-04 15:28 ` kbuild test robot
2018-09-04 15:28 ` kbuild test robot
2018-08-31 22:56 ` [PATCH v6 2/4] gpiolib: Identify arrays matching GPIO hardware Janusz Krzysztofik
2018-08-31 22:56 ` [PATCH v6 3/4] gpiolib: Pass array info to get/set array functions Janusz Krzysztofik
2018-09-04 15:27 ` kbuild test robot
2018-08-31 22:56 ` [PATCH v6 4/4] gpiolib: Implement fast processing path in get/set array Janusz Krzysztofik
2018-09-02 12:01 ` [PATCH v7 0/4] gpiolib: speed up GPIO array processing Janusz Krzysztofik
2018-09-02 12:01 ` [PATCH v7 1/4] gpiolib: Pass bitmaps, not integer arrays, to get/set array Janusz Krzysztofik
2018-09-02 13:21 ` Lukas Wunner
2018-09-03 4:31 ` Matthew Wilcox
2018-09-03 14:24 ` Geert Uytterhoeven
2018-09-03 15:07 ` Geert Uytterhoeven
2018-09-04 15:29 ` kbuild test robot
2018-09-05 6:46 ` kbuild test robot
2018-09-02 12:01 ` [PATCH v7 2/4] gpiolib: Identify arrays matching GPIO hardware Janusz Krzysztofik
2018-09-02 12:01 ` [PATCH v7 3/4] gpiolib: Pass array info to get/set array functions Janusz Krzysztofik
2018-09-03 14:21 ` Geert Uytterhoeven
2018-09-04 15:23 ` kbuild test robot
2018-09-05 7:11 ` kbuild test robot
2018-09-02 12:01 ` [PATCH v7 4/4] gpiolib: Implement fast processing path in get/set array Janusz Krzysztofik
[not found] ` <CGME20180920101151eucas1p221f5a1715b8556bb9d99bf08fe09ce6f@eucas1p2.samsung.com>
2018-09-20 10:11 ` Marek Szyprowski
2018-09-20 15:48 ` Janusz Krzysztofik
2018-09-20 16:21 ` Janusz Krzysztofik
2018-09-21 8:18 ` Marek Szyprowski
2018-09-21 10:51 ` Janusz Krzysztofik
2018-09-21 11:26 ` Janusz Krzysztofik
2018-09-21 14:14 ` Marek Szyprowski
2018-09-23 10:43 ` Janusz Krzysztofik
2018-09-23 23:53 ` [PATCH 0/2] gpiolib: Fix issues introduced by fast bitmap processing path Janusz Krzysztofik
2018-09-23 23:53 ` [PATCH 1/2] gpiolib: Fix missing updates of bitmap index Janusz Krzysztofik
2018-09-24 8:11 ` Linus Walleij
2018-09-29 12:20 ` Janusz Krzysztofik [this message]
2018-10-01 6:46 ` [PATCH] gpiolib: Fix incorrect use of find_next_zero_bit() Marek Szyprowski
2018-10-01 9:37 ` Linus Walleij
2018-09-23 23:53 ` [PATCH 2/2] gpiolib: Fix array members of same chip processed separately Janusz Krzysztofik
2018-09-24 8:13 ` Linus Walleij
2018-09-24 9:43 ` [PATCH 0/2] gpiolib: Fix issues introduced by fast bitmap processing path Marek Szyprowski
2018-09-24 11:08 ` Janusz Krzysztofik
2018-09-24 11:38 ` Marek Szyprowski
2018-09-24 14:18 ` Janusz Krzysztofik
2018-09-20 18:05 ` [PATCH v7 4/4] gpiolib: Implement fast processing path in get/set array Dan Carpenter
2018-09-20 15:49 ` Linus Walleij
2018-09-05 21:50 ` [PATCH v8 0/4] gpiolib: speed up GPIO array processing Janusz Krzysztofik
2018-09-05 21:50 ` [PATCH v8 1/4] gpiolib: Pass bitmaps, not integer arrays, to get/set array Janusz Krzysztofik
2018-09-05 21:50 ` [PATCH v8 2/4] gpiolib: Identify arrays matching GPIO hardware Janusz Krzysztofik
2018-09-05 21:50 ` [PATCH v8 3/4] gpiolib: Pass array info to get/set array functions Janusz Krzysztofik
2018-09-05 21:50 ` [PATCH v8 4/4] gpiolib: Implement fast processing path in get/set array Janusz Krzysztofik
2018-09-13 9:22 ` [PATCH v8 0/4] gpiolib: speed up GPIO array processing Linus Walleij
2018-09-19 18:08 ` Linus Walleij
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180929122022.6825-1-jmkrzyszt@gmail.com \
--to=jmkrzyszt@gmail.com \
--cc=Michael.Hennerich@analog.com \
--cc=andrew@lunn.ch \
--cc=devel@driverdev.osuosl.org \
--cc=f.fainelli@gmail.com \
--cc=geert@linux-m68k.org \
--cc=jslaby@suse.com \
--cc=kishon@ti.com \
--cc=krzk@kernel.org \
--cc=linus.walleij@linaro.org \
--cc=linux-gpio@vger.kernel.org \
--cc=linux-i2c@vger.kernel.org \
--cc=linux-iio@vger.kernel.org \
--cc=linux-serial@vger.kernel.org \
--cc=linux@dominikbrodowski.net \
--cc=m.szyprowski@samsung.com \
--cc=netdev@vger.kernel.org \
--cc=peda@axentia.se \
--cc=peter.korsgaard@barco.com \
--cc=pmeerw@pmeerw.net \
--cc=tony@atomide.com \
--cc=u.kleine-koenig@pengutronix.de \
--cc=ulf.hansson@linaro.org \
--cc=yegorslists@googlemail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).