[PATCH v2 0/2] iopoll: Busy loop and timeout improvements

From: Geert Uytterhoeven
Date: Wed May 10 2023 - 09:23:47 EST


Hi all,

When implementing a polling loop, a common review comment is to use one
of the read*_poll_timeout*() helpers. Unfortunately this is not always
possible, or might introduce subtle bugs. This patch series aims to
improve these helpers, so they can gain wider use.

1. The first patch improves busy-looping behavior of both the atomic
and non-atomic read*_poll_timeout*() helpers.
The issue addressed by this patch was discussed before[1-2], but I
am not aware of any patches moving forward.

2. The second patch fixes timeout handling of the atomic variants.
Some of the issues addressed by this patch were mitigated in
various places[3-5], and some of these findings may of interest to
the authors of [6-8].

The first patch was sent before, and already received some acks, but I
hadn't queued it yet as a depedency for more read*_poll_timeout*() use,
because I ran into the issue fixed by the second patch.

Changes compared to v1[9]:
- Add Acked-by,
- Add compiler barrier and inlining explanation (thanks, Peter!),
- Add patch [2/2].

Thanks for your comments!

[1] "Re: [PATCH 6/7] clk: renesas: rcar-gen3: Add custom clock for PLLs"
https://lore.kernel.org/all/CAMuHMdWUEhs=nwP+a0vO2jOzkq-7FEOqcJ+SsxAGNXX1PQ2KMA@xxxxxxxxxxxxxx
[2] "Re: [PATCH v2] clk: samsung: Prevent potential endless loop in the
PLL set_rate ops"
https://lore.kernel.org/all/20200811164628.GA7958@kozik-lap
[3] b3e9431854e8f305 ("bus: ti-sysc: Fix timekeeping_suspended warning
on resume")
[4] 44a9e78f9242872c ("clk: samsung: Prevent potential endless loop in
the PLL ops")
[5] 3d8598fb9c5a7783 ("clk: ti: clkctrl: use fallback udelay approach if
timekeeping is suspended")
[6] bd40cbb0e3b37a4d ("PM: domains: Move genpd's time-accounting to
ktime_get_mono_fast_ns()")
[7] c155f6499f9797f2 ("PM-runtime: Switch accounting over to
ktime_get_mono_fast_ns()")
[8] 15efb47dc560849d ("PM-runtime: Fix deadlock with ktime_get()")

[9] https://lore.kernel.org/r/8d492ee4a391bd089a01c218b0b4e05cf8ea593c.1674729407.git.geert+renesas@xxxxxxxxx/

Geert Uytterhoeven (2):
iopoll: Call cpu_relax() in busy loops
iopoll: Do not use timekeeping in read_poll_timeout_atomic()

include/linux/iopoll.h | 20 +++++++++++++++-----
1 file changed, 15 insertions(+), 5 deletions(-)

--
2.34.1

Gr{oetje,eeting}s,

Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@xxxxxxxxxxxxxx

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds