From: David Laight <david.laight.linux@gmail.com>
To: Jani Nikula <jani.nikula@intel.com>
Cc: "Ville Syrjälä" <ville.syrjala@linux.intel.com>,
intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org,
"Imre Deak" <imre.deak@intel.com>,
"Geert Uytterhoeven" <geert+renesas@glider.be>,
"Matt Wagantall" <mattw@codeaurora.org>,
"Dejin Zheng" <zhengdejin5@gmail.com>,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH 18/18] drm/i915/ddi: prefer read_poll_timeout() over readx_poll_timeout()
Date: Mon, 30 Jun 2025 21:52:18 +0100 [thread overview]
Message-ID: <20250630215218.1aa32a1f@pumpkin> (raw)
In-Reply-To: <1b5d73351eda2d86437a597673bd892baf90fafa@intel.com>
On Fri, 27 Jun 2025 19:26:22 +0300
Jani Nikula <jani.nikula@intel.com> wrote:
> On Fri, 27 Jun 2025, Ville Syrjälä <ville.syrjala@linux.intel.com> wrote:
> > On Fri, Jun 27, 2025 at 04:34:23PM +0300, Jani Nikula wrote:
> >> Internally the macro has:
> >>
> >> #define read_poll_timeout(op, val, cond, sleep_us, timeout_us, \
> >> sleep_before_read, args...) \
> >>
> >> ...
> >>
> >> (val) = op(args); \
> >>
> >> So you do need to provide an lvalue val, and you need to be able to add
> >> () after op. I think GCC allows not passing varargs. IOW you'd need to
> >> implement another macro (which could be used to implement the existing
> >> one, but not the other way round).
> >
> > Just get rid of the 'args' and 'val' and it'll work just fine.
> > Then it'll be almost identical to wait_for() (basically just missing the
> > increasing backoff stuff).
> >
> > AFAICS this thing was originally added just for reading a single
> > register and checking some bit/etc, so the name made some sense.
> > But now we're abusing it for all kinds of random things, so even
> > the name no longer makes that much sense.
>
> Yeah, evolution not intelligent design.
>
> > So I think just something like this would work fine for us:
>
> LGTM, with the _atomic version for completeness.
>
> Want to send it to lkml?
>
>
> BR,
> Jani.
>
>
> >
> > diff --git a/include/linux/iopoll.h b/include/linux/iopoll.h
> > index 91324c331a4b..9c38fd732028 100644
> > --- a/include/linux/iopoll.h
> > +++ b/include/linux/iopoll.h
> > @@ -14,27 +14,24 @@
> > #include <linux/io.h>
> >
> > /**
> > - * read_poll_timeout - Periodically poll an address until a condition is
> > - * met or a timeout occurs
> > - * @op: accessor function (takes @args as its arguments)
> > - * @val: Variable to read the value into
> > - * @cond: Break condition (usually involving @val)
> > - * @sleep_us: Maximum time to sleep between reads in us (0 tight-loops). Please
> > - * read usleep_range() function description for details and
> > + * poll_timeout - Periodically poll and perform an operaion until
> > + * a condition is met or a timeout occurs
> > + *
> > + * @op: Operation
> > + * @cond: Break condition
> > + * @sleep_us: Maximum time to sleep between operations in us (0 tight-loops).
> > + * Please read usleep_range() function description for details and
> > * limitations.
> > * @timeout_us: Timeout in us, 0 means never timeout
> > - * @sleep_before_read: if it is true, sleep @sleep_us before read.
> > - * @args: arguments for @op poll
> > + * @sleep_before_read: if it is true, sleep @sleep_us before operation.
> > *
> > * When available, you'll probably want to use one of the specialized
> > * macros defined below rather than this macro directly.
> > *
> > - * Returns: 0 on success and -ETIMEDOUT upon a timeout. In either
> > - * case, the last read value at @args is stored in @val. Must not
> > + * Returns: 0 on success and -ETIMEDOUT upon a timeout. Must not
> > * be called from atomic context if sleep_us or timeout_us are used.
> > */
> > -#define read_poll_timeout(op, val, cond, sleep_us, timeout_us, \
> > - sleep_before_read, args...) \
> > +#define poll_timeout(op, cond, sleep_us, timeout_us, sleep_before_read) \
I might name it poll_timeout_us(...) so that the units are obvious
at the call site.
There are so many different units for timeouts its is worth always
appending _sec, _ms, _us (etc) just to avoid all the silly bugs.
David
next prev parent reply other threads:[~2025-07-02 18:54 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-06-27 11:36 [PATCH 00/18] drm/i915/display: convert to generic read_poll_timeout() Jani Nikula
2025-06-27 11:36 ` [PATCH 01/18] drm/i915/hdmi: use generic read_poll_timeout() instead of __wait_for() Jani Nikula
2025-06-27 11:36 ` [PATCH 02/18] drm/i915/hdcp: " Jani Nikula
2025-06-29 13:39 ` Kandpal, Suraj
2025-06-27 11:36 ` [PATCH 03/18] drm/i915/dsi: use generic read_poll_timeout() instead of wait_for_us() Jani Nikula
2025-06-27 11:36 ` [PATCH 04/18] drm/i915/dsi-pll: use generic read_poll_timeout() instead of wait_for() Jani Nikula
2025-06-27 11:36 ` [PATCH 05/18] drm/i915/gmbus: use generic read_poll_timeout*() instead of wait_for*() Jani Nikula
2025-06-27 11:36 ` [PATCH 06/18] drm/i915/wm: use generic read_poll_timeout() instead of wait_for() Jani Nikula
2025-06-27 11:36 ` [PATCH 07/18] drm/i915/cdclk: " Jani Nikula
2025-06-27 11:36 ` [PATCH 08/18] drm/i915/power: " Jani Nikula
2025-06-27 11:36 ` [PATCH 09/18] drm/i915/power-well: use generic read_poll_timeout() instead of wait_for() for DKL PHY Jani Nikula
2025-06-27 11:36 ` [PATCH 10/18] drm/i915/power-well: use generic read_poll_timeout() instead of wait_for() for VLV/CHV Jani Nikula
2025-06-27 11:36 ` [PATCH 11/18] drm/i915/dp: use generic read_poll_timeout() instead of wait_for() Jani Nikula
2025-06-27 11:36 ` [PATCH 12/18] drm/i915/dp: use generic read_poll_timeout() instead of wait_for() in link training Jani Nikula
2025-06-27 11:36 ` [PATCH 13/18] drm/i915/vblank: use generic read_poll_timeout() instead of wait_for() Jani Nikula
2025-06-27 11:36 ` [PATCH 14/18] drm/i915/tc: " Jani Nikula
2025-06-27 11:36 ` [PATCH 15/18] drm/i915/dsb: " Jani Nikula
2025-06-27 11:36 ` [PATCH 16/18] drm/i915/lspcon: " Jani Nikula
2025-06-27 11:36 ` [PATCH 17/18] drm/i915/opregion: " Jani Nikula
2025-06-27 11:36 ` [PATCH 18/18] drm/i915/ddi: prefer read_poll_timeout() over readx_poll_timeout() Jani Nikula
2025-06-27 12:00 ` Imre Deak
2025-06-27 12:43 ` Jani Nikula
2025-06-27 12:53 ` Ville Syrjälä
2025-06-27 13:34 ` Jani Nikula
2025-06-27 15:40 ` Ville Syrjälä
2025-06-27 16:26 ` Jani Nikula
2025-06-27 17:32 ` Ville Syrjälä
2025-06-30 20:52 ` David Laight [this message]
2025-06-27 14:15 ` [PATCH v2] " Jani Nikula
2025-06-30 15:35 ` ✗ CI.checkpatch: warning for drm/i915/display: convert to generic read_poll_timeout() (rev2) Patchwork
2025-06-30 15:36 ` ✓ CI.KUnit: success " Patchwork
2025-06-30 15:50 ` ✗ CI.checksparse: warning " Patchwork
2025-06-30 16:17 ` ✓ Xe.CI.BAT: success " Patchwork
2025-07-01 17:57 ` ✗ Xe.CI.Full: failure " Patchwork
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=20250630215218.1aa32a1f@pumpkin \
--to=david.laight.linux@gmail.com \
--cc=geert+renesas@glider.be \
--cc=imre.deak@intel.com \
--cc=intel-gfx@lists.freedesktop.org \
--cc=intel-xe@lists.freedesktop.org \
--cc=jani.nikula@intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mattw@codeaurora.org \
--cc=ville.syrjala@linux.intel.com \
--cc=zhengdejin5@gmail.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