All of lore.kernel.org
 help / color / mirror / Atom feed
From: Al Viro <viro@zeniv.linux.org.uk>
To: Peter Zijlstra <peterz@infradead.org>
Cc: "kernel test robot" <lkp@intel.com>,
	"Eric Dumazet" <edumazet@google.com>,
	oe-kbuild-all@lists.linux.dev, linux-kernel@vger.kernel.org,
	"Jakub Kicinski" <kuba@kernel.org>,
	"Maciej Żenczykowski" <maze@google.com>,
	"Will Deacon" <will@kernel.org>,
	"Paul E. McKenney" <paulmck@kernel.org>
Subject: Re: include/net/sock.h:2100:16: sparse: sparse: cast to non-scalar
Date: Mon, 12 Jan 2026 19:30:19 +0000	[thread overview]
Message-ID: <20260112193019.GK3634291@ZenIV> (raw)
In-Reply-To: <20260112123224.GH830755@noisy.programming.kicks-ass.net>

On Mon, Jan 12, 2026 at 01:32:24PM +0100, Peter Zijlstra wrote:
> On Sat, Jan 10, 2026 at 10:35:48PM +0000, Al Viro wrote:
> 
> > #define __READ_ONCE(x)                                                  \
> > ({                                                                      \
> >         __unqual_scalar_typeof(x) __x =                                 \
> > 		(*(volatile typeof(__x) *)(&(x)));                      \
> > 	mb();                                                           \
> > 	(typeof(x))__x;                                                 \
> > })
> > combined with
> > typedef struct {
> >         uid_t val;
> > } kuid_t;
> > 
> > IOW, it complains about a cast from structure to itself, which is fair
> > enough - C is pretty clear about not allowing any typecasts to or from
> > non-scalar types, tautological or not.
> > 
> > Why do we even need that cast?  Seeing that generic __READ_ONCE() is
> > #define __READ_ONCE(x)  (*(const volatile __unqual_scalar_typeof(x) *)&(x))
> > the cast added on alpha seems to be pointless.
> 
> The problem was things like test_bit() that take a volatile argument,
> doing READ_ONCE() on them would instantiate a volatile temporary and GCC
> would end up generating shit code.
> 
> The __unqual_scalar_typeof() was the result of trying to remove CV
> qualifiers from a type.

Sure, but what does that have to do with the final cast in there?  Note
that generic __READ_ONCE() ends up with __unqual_scalar_typeof(x) for the
type of result and it seems to be working fine.

Why would the same type of result be a problem for alpha?  Sure, we need
a barrier there, so it can't be literal copy of generic __READ_ONCE(),
but what's the problem with using

#define __READ_ONCE(x)							\
({									\
	__unqual_scalar_typeof(x) __x =					\
 		(*(volatile typeof(__x) *)(&(x)));			\
	mb();								\
	__x;								\
})

there?  What could possibly need those qualifiers added back to the result?
It is, after all, an r-value, so...

IDGI...

  reply	other threads:[~2026-01-12 19:28 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-01-10 21:06 include/net/sock.h:2100:16: sparse: sparse: cast to non-scalar kernel test robot
2026-01-10 22:15 ` Al Viro
2026-01-10 22:35   ` Al Viro
2026-01-11 10:08     ` Eric Dumazet
2026-01-12 12:33       ` Peter Zijlstra
2026-01-11 18:20     ` Al Viro
2026-01-11 18:51       ` Al Viro
2026-01-12 12:37       ` Peter Zijlstra
2026-01-12 15:02         ` Will Deacon
2026-01-12 19:21         ` Al Viro
2026-01-12 21:16           ` Al Viro
2026-01-12 22:39             ` David Laight
2026-01-13  0:28               ` Al Viro
2026-01-12 12:32     ` Peter Zijlstra
2026-01-12 19:30       ` Al Viro [this message]
2026-01-13 15:27         ` Peter Zijlstra
2026-01-12  0:49   ` Philip Li
  -- strict thread matches above, loose matches on Subject: below --
2025-12-06 10:09 kernel test robot
2025-08-25  4:45 kernel test robot

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=20260112193019.GK3634291@ZenIV \
    --to=viro@zeniv.linux.org.uk \
    --cc=edumazet@google.com \
    --cc=kuba@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lkp@intel.com \
    --cc=maze@google.com \
    --cc=oe-kbuild-all@lists.linux.dev \
    --cc=paulmck@kernel.org \
    --cc=peterz@infradead.org \
    --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 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.