Re: [PATCH 1/2] rcu: Fix casting while dereferencing rcu pointers

From: Ricardo Ribalda

Date: Wed Aug 26 2026 - 07:33:04 EST


Hi David

On Wed, 26 Aug 2026 at 11:55, David Laight <david.laight.linux@xxxxxxxxx> wrote:
>
> On Tue, 25 Aug 2026 20:02:10 +0000
> Ricardo Ribalda <ribalda@xxxxxxxxxxxx> wrote:
> >
> > diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h
> > index 44c07a66edff..80276cedda80 100644
> > --- a/include/linux/rcupdate.h
> > +++ b/include/linux/rcupdate.h
> > @@ -488,7 +488,7 @@ static __always_inline bool lockdep_assert_rcu_helper(bool c, const struct __ctx
> > context_unsafe( \
> > typeof(*p) *local = (typeof(*p) *__force)(p); \
> > rcu_check_sparse(p, __rcu); \
> > - ((typeof(*p) __force __kernel *)(local)) \
> > + ((TYPEOF_UNQUAL(*p) __force __kernel *)(local)) \
>
> Ugg... TYPEOF_UNQUAL() is absolutely horrid...
> When __CHECKER__ is undefined the whole thing is just (p).

About using __CHECKER__: Are you suggesting using #ifdef __CHECKER__
to use TYPEOF_UNQUAL or the current code?

I am open to doing that, but I would like to hear from Paul if he
favors adding the (also horrid) #ifdef to save some CPU cycles on
older compilers.

>
> I suspect reducing all the definitions would measurably improve
> kernel compile time (even before these changes).

When I checked earlier in the other patch in this patchset, with my
compiler I can hardly see any difference in compilation times [1].
This is probably because GCC15 direclty maps TYPEOF_UNQUAL to the
built-in __typeof_unqual__.


Thanks!


[1] https://lore.kernel.org/all/CANiDSCsMrULsrGQg76x28GRXLg+HSKFWhhA14Zcn8hdm4KyOVw@xxxxxxxxxxxxxx/

>
> David