From: Tony Lindgren <tony@atomide.com>
To: Geert Uytterhoeven <geert+renesas@glider.be>
Cc: Stephen Boyd <sboyd@kernel.org>,
Tomasz Figa <tomasz.figa@gmail.com>,
Sylwester Nawrocki <s.nawrocki@samsung.com>,
Will Deacon <will@kernel.org>, Arnd Bergmann <arnd@arndb.de>,
Wolfram Sang <wsa+renesas@sang-engineering.com>,
Dejin Zheng <zhengdejin5@gmail.com>,
Kai-Heng Feng <kai.heng.feng@canonical.com>,
Nicholas Piggin <npiggin@gmail.com>,
Heiko Carstens <hca@linux.ibm.com>,
Peter Zijlstra <peterz@infradead.org>,
Russell King <linux@armlinux.org.uk>,
John Stultz <jstultz@google.com>,
Thomas Gleixner <tglx@linutronix.de>,
Krzysztof Kozlowski <krzk@kernel.org>,
Tero Kristo <tero.kristo@linux.intel.com>,
Ulf Hansson <ulf.hansson@linaro.org>,
"Rafael J . Wysocki" <rafael.j.wysocki@intel.com>,
Vincent Guittot <vincent.guittot@linaro.org>,
linux-arm-kernel@lists.infradead.org,
linux-renesas-soc@vger.kernel.org, linux-pm@vger.kernel.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2 1/2] iopoll: Call cpu_relax() in busy loops
Date: Thu, 11 May 2023 09:48:39 +0300 [thread overview]
Message-ID: <20230511064839.GG14287@atomide.com> (raw)
In-Reply-To: <fe235a1f65bb6c86d2afcdf52d85f80ae728dcc5.1683722688.git.geert+renesas@glider.be>
* Geert Uytterhoeven <geert+renesas@glider.be> [230510 13:23]:
> It is considered good practice to call cpu_relax() in busy loops, see
> Documentation/process/volatile-considered-harmful.rst. This can not
> only lower CPU power consumption or yield to a hyperthreaded twin
> processor, but also allows an architecture to mitigate hardware issues
> (e.g. ARM Erratum 754327 for Cortex-A9 prior to r2p0) in the
> architecture-specific cpu_relax() implementation.
>
> In addition, cpu_relax() is also a compiler barrier. It is not
> immediately obvious that the @op argument "function" will result in an
> actual function call (e.g. in case of inlining).
>
> Where a function call is a C sequence point, this is lost on inlining.
> Therefore, with agressive enough optimization it might be possible for
> the compiler to hoist the:
>
> (val) = op(args);
>
> "load" out of the loop because it doesn't see the value changing. The
> addition of cpu_relax() would inhibit this.
>
> As the iopoll helpers lack calls to cpu_relax(), people are sometimes
> reluctant to use them, and may fall back to open-coded polling loops
> (including cpu_relax() calls) instead.
>
> Fix this by adding calls to cpu_relax() to the iopoll helpers:
> - For the non-atomic case, it is sufficient to call cpu_relax() in
> case of a zero sleep-between-reads value, as a call to
> usleep_range() is a safe barrier otherwise. However, it doesn't
> hurt to add the call regardless, for simplicity, and for similarity
> with the atomic case below.
> - For the atomic case, cpu_relax() must be called regardless of the
> sleep-between-reads value, as there is no guarantee all
> architecture-specific implementations of udelay() handle this.
Reviewed-by: Tony Lindgren <tony@atomide.com>
next prev parent reply other threads:[~2023-05-11 6:48 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-05-10 13:23 [PATCH v2 0/2] iopoll: Busy loop and timeout improvements Geert Uytterhoeven
2023-05-10 13:23 ` [PATCH v2 1/2] iopoll: Call cpu_relax() in busy loops Geert Uytterhoeven
2023-05-11 6:48 ` Tony Lindgren [this message]
2023-05-11 10:48 ` David Laight
2023-05-23 7:29 ` Geert Uytterhoeven
2023-05-23 7:29 ` Geert Uytterhoeven
2023-05-23 8:55 ` David Laight
2023-05-23 8:55 ` David Laight
2023-05-11 9:48 ` Ulf Hansson
2023-05-10 13:23 ` [PATCH v2 2/2] iopoll: Do not use timekeeping in read_poll_timeout_atomic() Geert Uytterhoeven
2023-05-10 13:35 ` Arnd Bergmann
2023-05-10 13:46 ` Geert Uytterhoeven
2023-05-10 13:56 ` Arnd Bergmann
2023-05-11 6:48 ` Tony Lindgren
2023-05-11 10:26 ` Ulf Hansson
2023-05-11 12:44 ` Geert Uytterhoeven
2023-05-12 7:53 ` Ulf Hansson
2023-05-12 8:03 ` Geert Uytterhoeven
2023-05-15 9:26 ` Ulf Hansson
2023-05-15 9:26 ` Ulf Hansson
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=20230511064839.GG14287@atomide.com \
--to=tony@atomide.com \
--cc=arnd@arndb.de \
--cc=geert+renesas@glider.be \
--cc=hca@linux.ibm.com \
--cc=jstultz@google.com \
--cc=kai.heng.feng@canonical.com \
--cc=krzk@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=linux-renesas-soc@vger.kernel.org \
--cc=linux@armlinux.org.uk \
--cc=npiggin@gmail.com \
--cc=peterz@infradead.org \
--cc=rafael.j.wysocki@intel.com \
--cc=s.nawrocki@samsung.com \
--cc=sboyd@kernel.org \
--cc=tero.kristo@linux.intel.com \
--cc=tglx@linutronix.de \
--cc=tomasz.figa@gmail.com \
--cc=ulf.hansson@linaro.org \
--cc=vincent.guittot@linaro.org \
--cc=will@kernel.org \
--cc=wsa+renesas@sang-engineering.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.