public inbox for linux-arm-kernel@lists.infradead.org
 help / color / mirror / Atom feed
From: Marco Elver <elver@google.com>
To: elver@google.com, Peter Zijlstra <peterz@infradead.org>,
	Will Deacon <will@kernel.org>
Cc: Ingo Molnar <mingo@kernel.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	 Boqun Feng <boqun.feng@gmail.com>,
	Waiman Long <longman@redhat.com>,
	 Bart Van Assche <bvanassche@acm.org>,
	llvm@lists.linux.dev,
	 David Laight <david.laight.linux@gmail.com>,
	Al Viro <viro@zeniv.linux.org.uk>,
	 Catalin Marinas <catalin.marinas@arm.com>,
	Nathan Chancellor <nathan@kernel.org>,
	 Arnd Bergmann <arnd@arndb.de>,
	linux-arm-kernel@lists.infradead.org,
	 linux-kernel@vger.kernel.org
Subject: [PATCH v4 0/2] arm64: Fixes for __READ_ONCE() with CONFIG_LTO=y
Date: Mon, 16 Feb 2026 15:16:21 +0100	[thread overview]
Message-ID: <20260216142436.2207937-2-elver@google.com> (raw)

While investigating a Clang Context Analysis [1] false positive [2], I
started to dig deeper into arm64's __READ_ONCE() implementation with
LTO. That rabbit hole led me to find one critical bug with the current
implementation (fixed already in [3]), and subtle improvements that then
enabled me to fix the original false positive.

Patch 1 refactors the macro to use a different way of getting an
unqualified type and eliminates the ternary conditional.

Building on the refactor, patch 2 fixes the context analysis false
positive, by helping its alias analysis "see through" the __READ_ONCE
despite the inline asm.

## Note on Alternative for Patch 2

An alternative considered for the Context Analysis fix was introducing a
helper function to redirect the pointer alias; specifically passing a
pointer to const-pointer does not invalidate an alias either (casting
away the const is a deliberate escape hatch, albeit somewhat unusual
looking). This approach was slightly more verbose, so the simpler
approach was chosen for now. It is preserved here for future reference
in case we need it for something else:

	static __always_inline void __set_pointer_opaque(void *const *dst, const void *val)
	{
	    *(void **)dst = (void *)val;
	}

	...
	__set_pointer_opaque((void *const *)&__ret, &__u.__val);
	...

[1] https://docs.kernel.org/next/dev-tools/context-analysis.html
[2] https://lore.kernel.org/all/202601221040.TeM0ihff-lkp@intel.com/
[3] https://git.kernel.org/torvalds/c/bb0c99e08ab9aa6d04b

---
v4:
* Use the return-value-of-function-drops-qualifiers hack.
* Rebase (original patch 1 already merged).

v3: https://lore.kernel.org/all/20260130132951.2714396-1-elver@google.com/
* Comments-smithing.
* Use 'typeof(*__ret) __val'

v2:
* Add __rwonce_typeof_unqual() as fallback for old compilers.

Marco Elver (2):
  arm64: Optimize __READ_ONCE() with CONFIG_LTO=y
  arm64, compiler-context-analysis: Permit alias analysis through
    __READ_ONCE() with CONFIG_LTO=y

 arch/arm64/include/asm/rwonce.h | 24 +++++++++++++++++++-----
 1 file changed, 19 insertions(+), 5 deletions(-)

-- 
2.53.0.335.g19a08e0c02-goog


             reply	other threads:[~2026-02-16 14:51 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-02-16 14:16 Marco Elver [this message]
2026-02-16 14:16 ` [PATCH v4 1/2] arm64: Optimize __READ_ONCE() with CONFIG_LTO=y Marco Elver
2026-02-16 14:16 ` [PATCH v4 2/2] arm64, compiler-context-analysis: Permit alias analysis through " Marco Elver
2026-02-16 18:00   ` David Laight
2026-02-16 18:40     ` Marco Elver
2026-02-27  3:16 ` [PATCH v4 0/2] arm64: Fixes for " Will Deacon

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=20260216142436.2207937-2-elver@google.com \
    --to=elver@google.com \
    --cc=arnd@arndb.de \
    --cc=boqun.feng@gmail.com \
    --cc=bvanassche@acm.org \
    --cc=catalin.marinas@arm.com \
    --cc=david.laight.linux@gmail.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=llvm@lists.linux.dev \
    --cc=longman@redhat.com \
    --cc=mingo@kernel.org \
    --cc=nathan@kernel.org \
    --cc=peterz@infradead.org \
    --cc=tglx@linutronix.de \
    --cc=viro@zeniv.linux.org.uk \
    --cc=will@kernel.org \
    /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