[paulmckrcu:cmpxchg2.2026.09.22a 25/28] arch/arc/include/asm/cmpxchg.h:71:23: warning: unused variable '_new_'

Vineet Gupta vgupta at kernel.org
Tue Sep 29 12:42:52 PDT 2026


On 9/29/26 12:16, Paul E. McKenney wrote:
> On Wed, Sep 23, 2026 at 03:23:47PM -0700, Vineet Gupta wrote:
>> On 9/23/26 14:13, Bradley Morgan wrote:
>>> On 23 September 2026 22:12:09 BST, kernel test robot <lkp at intel.com> wrote:
>>>> tree:   https://github.com/paulmckrcu/linux cmpxchg2.2026.09.22a
>>>> head:   54c282c15475ebfae4712fe3ab637c9d19c723d6
>>>> commit: b6d4f6af38f85e7948fd64f9bf09cbb858b4dade [25/28] ARC: Emulate two-byte cmpxchg
>>>> config: arc-randconfig-1001-20260924 (https://download.01.org/0day-ci/archive/20260924/202609240539.AkulvjVe-lkp@intel.com/config)
>>>> compiler: arc-linux-gcc (GCC) 14.3.0
>>>> reproduce (this is a W=1 build):
>>>> (https://download.01.org/0day-ci/archive/20260924/202609240539.AkulvjVe-lkp@intel.com/reproduce)
>>>>
>>>> If you fix the issue in a separate patch/commit (i.e. not just a new
>>>> version of
>>>> the same patch/commit), kindly add following tags
>>>> | Reported-by: kernel test robot <lkp at intel.com>
>>>> | Closes:
>>>> https://lore.kernel.org/oe-kbuild-all/202609240539.AkulvjVe-lkp@intel.com/
>>>>
>>>> All warnings (new ones prefixed by >>):
>>>>
>>>>     In file included from arch/arc/include/asm/atomic.h:13,
>>>>                      from include/linux/atomic.h:7,
>>>>                      from include/asm-generic/bitops/lock.h:5,
>>>>                      from arch/arc/include/asm/bitops.h:190,
>>>>                      from include/linux/bitops.h:67,
>>>>                      from include/linux/log2.h:12,
>>>>                      from kernel/bounds.c:14:
>>>>     include/linux/atomic/atomic-arch-fallback.h: In function 'raw_atomic_cmpxchg':
>>>>     arch/arc/include/asm/cmpxchg.h:80:23: error: '_o_' undeclared (first use in this function); did you mean '_p_'?
>>>>        80 |         if (_prev_ == _o_)                                              \
>>>>           |                       ^~~
>>>>     include/linux/atomic/atomic-arch-fallback.h:55:21: note: in expansion of macro 'arch_cmpxchg'
>>>>        55 | #define raw_cmpxchg arch_cmpxchg
>>>>           |                     ^~~~~~~~~~~~
>>>>     include/linux/atomic/atomic-arch-fallback.h:2026:16: note: in expansion of macro 'raw_cmpxchg'
>>>>      2026 |         return raw_cmpxchg(&v->counter, old, new);
>>>>           |                ^~~~~~~~~~~
>>>>     arch/arc/include/asm/cmpxchg.h:80:23: note: each undeclared identifier is reported only once for each function it appears in
>>>>        80 |         if (_prev_ == _o_)                                              \
>>>>           |                       ^~~
>>>>     include/linux/atomic/atomic-arch-fallback.h:55:21: note: in expansion of macro 'arch_cmpxchg'
>>>>        55 | #define raw_cmpxchg arch_cmpxchg
>>>>           |                     ^~~~~~~~~~~~
>>>>     include/linux/atomic/atomic-arch-fallback.h:2026:16: note: in expansion of macro 'raw_cmpxchg'
>>>>      2026 |         return raw_cmpxchg(&v->counter, old, new);
>>>>           |                ^~~~~~~~~~~
>>>>     arch/arc/include/asm/cmpxchg.h:81:24: error: '_n_' undeclared (first use in this function); did you mean '_p_'?
>>>>        81 |                 *_p_ = _n_;                                             \
>>>>           |                        ^~~
>>>>     include/linux/atomic/atomic-arch-fallback.h:55:21: note: in expansion of macro 'arch_cmpxchg'
>>>>        55 | #define raw_cmpxchg arch_cmpxchg
>>>>           |                     ^~~~~~~~~~~~
>>>>     include/linux/atomic/atomic-arch-fallback.h:2026:16: note: in expansion of macro 'raw_cmpxchg'
>>>>      2026 |         return raw_cmpxchg(&v->counter, old, new);
>>>>           |                ^~~~~~~~~~~
>>>>>> arch/arc/include/asm/cmpxchg.h:71:23: warning: unused variable '_new_'
>>>> [-Wunused-variable]
>>>>        71 |         unsigned long _new_ = (unsigned long)(0 ? *(_p_) : (new));              \
>>>>           |                       ^~~~~
>>>>     include/linux/atomic/atomic-arch-fallback.h:55:21: note: in expansion of macro 'arch_cmpxchg'
>>>>        55 | #define raw_cmpxchg arch_cmpxchg
>>>>           |                     ^~~~~~~~~~~~
>>>>     include/linux/atomic/atomic-arch-fallback.h:2026:16: note: in expansion of macro 'raw_cmpxchg'
>>>>      2026 |         return raw_cmpxchg(&v->counter, old, new);
>>>>           |                ^~~~~~~~~~~
>>>>>> arch/arc/include/asm/cmpxchg.h:70:23: warning: unused variable '_old_'
>>>> [-Wunused-variable]
>>>>        70 |         unsigned long _old_ = (unsigned long)(0 ? *(_p_) : (old));              \
>>>>           |                       ^~~~~
>>>>     include/linux/atomic/atomic-arch-fallback.h:55:21: note: in expansion of macro 'arch_cmpxchg'
>>>>        55 | #define raw_cmpxchg arch_cmpxchg
>>>>           |                     ^~~~~~~~~~~~
>>>>     include/linux/atomic/atomic-arch-fallback.h:2026:16: note: in expansion of macro 'raw_cmpxchg'
>>>>      2026 |         return raw_cmpxchg(&v->counter, old, new);
>>>>           |                ^~~~~~~~~~~
>>>>     include/linux/atomic/atomic-arch-fallback.h: In function 'raw_atomic_cmpxchg_acquire':
>>>>     arch/arc/include/asm/cmpxchg.h:80:23: error: '_o_' undeclared (first use in this function); did you mean '_p_'?
>>>>        80 |         if (_prev_ == _o_)                                              \
>>>>           |                       ^~~
>>>>     include/linux/atomic/atomic-arch-fallback.h:70:29: note: in expansion of macro 'arch_cmpxchg'
>>>>        70 | #define raw_cmpxchg_acquire arch_cmpxchg
>>>>           |                             ^~~~~~~~~~~~
>>>>     include/linux/atomic/atomic-arch-fallback.h:2055:16: note: in expansion of macro 'raw_cmpxchg_acquire'
>>>>      2055 |         return raw_cmpxchg_acquire(&v->counter, old, new);
>>>>           |                ^~~~~~~~~~~~~~~~~~~
>>>>     arch/arc/include/asm/cmpxchg.h:81:24: error: '_n_' undeclared (first use in this function); did you mean '_p_'?
>>>>        81 |                 *_p_ = _n_;                                             \
>>>>           |                        ^~~
>>>>     include/linux/atomic/atomic-arch-fallback.h:70:29: note: in expansion of macro 'arch_cmpxchg'
>>>>        70 | #define raw_cmpxchg_acquire arch_cmpxchg
>>>>           |                             ^~~~~~~~~~~~
>>>>     include/linux/atomic/atomic-arch-fallback.h:2055:16: note: in expansion of macro 'raw_cmpxchg_acquire'
>>>>      2055 |         return raw_cmpxchg_acquire(&v->counter, old, new);
>>>>           |                ^~~~~~~~~~~~~~~~~~~
>>>>>> arch/arc/include/asm/cmpxchg.h:71:23: warning: unused variable '_new_'
>>>> [-Wunused-variable]
>>>>        71 |         unsigned long _new_ = (unsigned long)(0 ? *(_p_) : (new));              \
>>>>           |                       ^~~~~
>>>>     include/linux/atomic/atomic-arch-fallback.h:70:29: note: in expansion of macro 'arch_cmpxchg'
>>>>        70 | #define raw_cmpxchg_acquire arch_cmpxchg
>>>>           |                             ^~~~~~~~~~~~
>>>>     include/linux/atomic/atomic-arch-fallback.h:2055:16: note: in expansion of macro 'raw_cmpxchg_acquire'
>>>>      2055 |         return raw_cmpxchg_acquire(&v->counter, old, new);
>>>>           |                ^~~~~~~~~~~~~~~~~~~
>>>>>> arch/arc/include/asm/cmpxchg.h:70:23: warning: unused variable '_old_'
>>>> [-Wunused-variable]
>>>>        70 |         unsigned long _old_ = (unsigned long)(0 ? *(_p_) : (old));              \
>>>>           |                       ^~~~~
>>>>     include/linux/atomic/atomic-arch-fallback.h:70:29: note: in expansion of macro 'arch_cmpxchg'
>>>>        70 | #define raw_cmpxchg_acquire arch_cmpxchg
>>>>           |                             ^~~~~~~~~~~~
>>>>     include/linux/atomic/atomic-arch-fallback.h:2055:16: note: in expansion of macro 'raw_cmpxchg_acquire'
>>>>      2055 |         return raw_cmpxchg_acquire(&v->counter, old, new);
>>>>           |                ^~~~~~~~~~~~~~~~~~~
>>>>     include/linux/atomic/atomic-arch-fallback.h: In function 'raw_atomic_cmpxchg_release':
>>>>     arch/arc/include/asm/cmpxchg.h:80:23: error: '_o_' undeclared (first use in this function); did you mean '_p_'?
>>>>        80 |         if (_prev_ == _o_)                                              \
>>>>           |                       ^~~
>>>>     include/linux/atomic/atomic-arch-fallback.h:82:29: note: in expansion of macro 'arch_cmpxchg'
>>>>        82 | #define raw_cmpxchg_release arch_cmpxchg
>>>>           |                             ^~~~~~~~~~~~
>>>>     include/linux/atomic/atomic-arch-fallback.h:2083:16: note: in expansion of macro 'raw_cmpxchg_release'
>>>>      2083 |         return raw_cmpxchg_release(&v->counter, old, new);
>>>>           |                ^~~~~~~~~~~~~~~~~~~
>>>>     arch/arc/include/asm/cmpxchg.h:81:24: error: '_n_' undeclared (first use in this function); did you mean '_p_'?
>>>>        81 |                 *_p_ = _n_;                                             \
>>>>           |                        ^~~
>>>>     include/linux/atomic/atomic-arch-fallback.h:82:29: note: in expansion of macro 'arch_cmpxchg'
>>>>        82 | #define raw_cmpxchg_release arch_cmpxchg
>>>>           |                             ^~~~~~~~~~~~
>>>>     include/linux/atomic/atomic-arch-fallback.h:2083:16: note: in expansion of macro 'raw_cmpxchg_release'
>>>>      2083 |         return raw_cmpxchg_release(&v->counter, old, new);
>>>>           |                ^~~~~~~~~~~~~~~~~~~
>>>>>> arch/arc/include/asm/cmpxchg.h:71:23: warning: unused variable '_new_'
>>>> [-Wunused-variable]
>>>>        71 |         unsigned long _new_ = (unsigned long)(0 ? *(_p_) : (new));              \
>>>>           |                       ^~~~~
>>>>     include/linux/atomic/atomic-arch-fallback.h:82:29: note: in expansion of macro 'arch_cmpxchg'
>>>>        82 | #define raw_cmpxchg_release arch_cmpxchg
>>>>           |                             ^~~~~~~~~~~~
>>>>     include/linux/atomic/atomic-arch-fallback.h:2083:16: note: in expansion of macro 'raw_cmpxchg_release'
>>>>      2083 |         return raw_cmpxchg_release(&v->counter, old, new);
>>>>           |                ^~~~~~~~~~~~~~~~~~~
>>>>>> arch/arc/include/asm/cmpxchg.h:70:23: warning: unused variable '_old_'
>>>> [-Wunused-variable]
>>>>        70 |         unsigned long _old_ = (unsigned long)(0 ? *(_p_) : (old));              \
>>>>           |                       ^~~~~
>>>>     include/linux/atomic/atomic-arch-fallback.h:82:29: note: in expansion of macro 'arch_cmpxchg'
>>>>        82 | #define raw_cmpxchg_release arch_cmpxchg
>>>>           |                             ^~~~~~~~~~~~
>>>>     include/linux/atomic/atomic-arch-fallback.h:2083:16: note: in expansion of macro 'raw_cmpxchg_release'
>>>>      2083 |         return raw_cmpxchg_release(&v->counter, old, new);
>>>>           |                ^~~~~~~~~~~~~~~~~~~
>>>>     include/linux/atomic/atomic-arch-fallback.h: In function 'raw_atomic_cmpxchg_relaxed':
>>>>     arch/arc/include/asm/cmpxchg.h:80:23: error: '_o_' undeclared (first use in this function); did you mean '_p_'?
>>>>        80 |         if (_prev_ == _o_)                                              \
>>>>           |                       ^~~
>>>>     include/linux/atomic/atomic-arch-fallback.h:91:29: note: in expansion of macro 'arch_cmpxchg'
>>>>        91 | #define raw_cmpxchg_relaxed arch_cmpxchg
>>>>           |                             ^~~~~~~~~~~~
>>>>     include/linux/atomic/atomic-arch-fallback.h:2108:16: note: in expansion of macro 'raw_cmpxchg_relaxed'
>>>>      2108 |         return raw_cmpxchg_relaxed(&v->counter, old, new);
>>>>           |                ^~~~~~~~~~~~~~~~~~~
>>>>     arch/arc/include/asm/cmpxchg.h:81:24: error: '_n_' undeclared (first use in this function); did you mean '_p_'?
>>>>        81 |                 *_p_ = _n_;                                             \
>>>>           |                        ^~~
>>>>     include/linux/atomic/atomic-arch-fallback.h:91:29: note: in expansion of macro 'arch_cmpxchg'
>>>>        91 | #define raw_cmpxchg_relaxed arch_cmpxchg
>>>>           |                             ^~~~~~~~~~~~
>>>>     include/linux/atomic/atomic-arch-fallback.h:2108:16: note: in expansion of macro 'raw_cmpxchg_relaxed'
>>>>      2108 |         return raw_cmpxchg_relaxed(&v->counter, old, new);
>>>>           |                ^~~~~~~~~~~~~~~~~~~
>>>>>> arch/arc/include/asm/cmpxchg.h:71:23: warning: unused variable '_new_'
>>>> [-Wunused-variable]
>>>>        71 |         unsigned long _new_ = (unsigned long)(0 ? *(_p_) : (new));              \
>>>>           |                       ^~~~~
>>>>     include/linux/atomic/atomic-arch-fallback.h:91:29: note: in expansion of macro 'arch_cmpxchg'
>>>>        91 | #define raw_cmpxchg_relaxed arch_cmpxchg
>>>>           |                             ^~~~~~~~~~~~
>>>>     include/linux/atomic/atomic-arch-fallback.h:2108:16: note: in expansion of macro 'raw_cmpxchg_relaxed'
>>>>      2108 |         return raw_cmpxchg_relaxed(&v->counter, old, new);
>>>>           |                ^~~~~~~~~~~~~~~~~~~
>>>>>> arch/arc/include/asm/cmpxchg.h:70:23: warning: unused variable '_old_'
>>>> [-Wunused-variable]
>>>>        70 |         unsigned long _old_ = (unsigned long)(0 ? *(_p_) : (old));              \
>>>>           |                       ^~~~~
>>>>     include/linux/atomic/atomic-arch-fallback.h:91:29: note: in expansion of macro 'arch_cmpxchg'
>>>>        91 | #define raw_cmpxchg_relaxed arch_cmpxchg
>>>>           |                             ^~~~~~~~~~~~
>>>>     include/linux/atomic/atomic-arch-fallback.h:2108:16: note: in expansion of macro 'raw_cmpxchg_relaxed'
>>>>      2108 |         return raw_cmpxchg_relaxed(&v->counter, old, new);
>>>>           |                ^~~~~~~~~~~~~~~~~~~
>>>>     make[3]: *** [scripts/Makefile.build:185: kernel/bounds.s] Error 1 shuffle=1050985161
>>>>     make[3]: Target 'prepare' not remade because of errors.
>>>>     make[2]: *** [Makefile:1425: prepare0] Error 2 shuffle=1050985161
>>>>     make[2]: Target 'prepare' not remade because of errors.
>>>>     make[1]: *** [Makefile:248: __sub-make] Error 2 shuffle=1050985161
>>>>     make[1]: Target 'prepare' not remade because of errors.
>>>>     make: *** [Makefile:248: __sub-make] Error 2 shuffle=1050985161
>>>>     make: Target 'prepare' not remade because of errors.
>>>>
>>>>
>>>> vim +/_new_ +71 arch/arc/include/asm/cmpxchg.h
>>>>
>>>>      66	
>>>>      67	#define arch_cmpxchg(ptr, old, new)				        \
>>>>      68	({									\
>>>>      69		volatile __typeof__(ptr) _p_ = (ptr);				\
>>>>    > 70		unsigned long _old_ = (unsigned long)(0 ? *(_p_) : (old));		\
>>>>    > 71		unsigned long _new_ = (unsigned long)(0 ? *(_p_) : (new));		\
>>>>      72		__typeof__(*(ptr)) _prev_;					\
>>>>      73		unsigned long __flags;						\
>>>>      74										\
>>>>      75		/*								\
>>>>      76		 * spin lock/unlock provide the needed smp_mb() before/after	\
>>>>      77		 */								\
>>>>      78		atomic_ops_lock(__flags);					\
>>>>      79		_prev_ = *_p_;							\
>>>>      80		if (_prev_ == _o_)						\
>>>>      81			*_p_ = _n_;						\
>>>>      82		atomic_ops_unlock(__flags);					\
>>>>      83		_prev_;								\
>>>>      84	})
>>>>      85	
>>>>
>>>> --
>>>> 0-DAY CI Kernel Test Service
>>>> https://github.com/intel/lkp-tests/wiki
>>> Apparently nobody uses arc
>> Yes the development has slowed down compared to five years ago, but its not
>> dead, if anything it is still my hobby project, like so many other things
>> open source and you repeating this hurts.
>>
>> You stumbled onto a real issue: typeof ptr vs. *ptr which unmasked an
>> existing shortcoming.
>> @Paul can you please apply this in your tree and rebase the series on top.
>> If not I can send this fix to Linus urgently, but it will cause some
>> collisions.
> I tried applying this against current linux/master, v7.2, and v7.3-rc1,
> and no go.  Please let me know what you based this on.
>
> Or is this in your recent pull request from Linus?  In which case,
> I could pull that and cherry-pick this patch.

Its the latter.

Thx,
-Vineet

>
> 							Thanx, Paul
>
>> ---------->
>>  From f3e2402f62bebfa9f1ad21e23d1663a0a3e5a58d Mon Sep 17 00:00:00 2001
>> From: Vineet Gupta <vgupta at kernel.org>
>> Date: Wed, 23 Sep 2026 15:01:38 -0700
>> Subject: [PATCH] ARC: arch_cmpxchg_relaxed to use size of pointed type not
>>   pointer
>>
>> Bradley spotted this snafu when working on two-byte cmpxchg emulation.
>> He originally folded this fix into his series but the fix itself
>> uncovered a pre-existing issue, missing arch_atomic64_cmpxchg_relaxed
>> which just needed to be wired up.
>>
>> Fixes: e188f3330a13 ("ARC: cmpxchg/xchg: rewrite as macros to make type
>> safe")
>> Reported-by: kernel test robot <lkp at intel.com>
>> Closes:
>> https://lore.kernel.org/oe-kbuild-all/202609240539.AkulvjVe-lkp@intel.com/
>> Suggested-by: Bradley Morgan <brads at mainlining.org>
>> Signed-off-by: Vineet Gupta <vgupta at kernel.org>
>> ---
>>   arch/arc/include/asm/atomic64-arcv2.h | 6 ++++++
>>   arch/arc/include/asm/cmpxchg.h        | 4 ++--
>>   2 files changed, 8 insertions(+), 2 deletions(-)
>>
>> diff --git a/arch/arc/include/asm/atomic64-arcv2.h
>> b/arch/arc/include/asm/atomic64-arcv2.h
>> index 73080a664369..1ca4a1047fb3 100644
>> --- a/arch/arc/include/asm/atomic64-arcv2.h
>> +++ b/arch/arc/include/asm/atomic64-arcv2.h
>> @@ -156,6 +156,12 @@ static inline u64 __arch_cmpxchg64_relaxed(volatile
>> void *ptr, u64 old, u64 new)
>>   }
>>   #define arch_cmpxchg64_relaxed __arch_cmpxchg64_relaxed
>>
>> +static inline s64 arch_atomic64_cmpxchg_relaxed(atomic64_t *v, s64 old, s64
>> new)
>> +{
>> +    return arch_cmpxchg64_relaxed(&v->counter, old, new);
>> +}
>> +#define arch_atomic64_cmpxchg_relaxed arch_atomic64_cmpxchg_relaxed
>> +
>>   static inline s64 arch_atomic64_xchg(atomic64_t *ptr, s64 new)
>>   {
>>       s64 prev;
>> diff --git a/arch/arc/include/asm/cmpxchg.h b/arch/arc/include/asm/cmpxchg.h
>> index 76f43db0890f..66b3743c9400 100644
>> --- a/arch/arc/include/asm/cmpxchg.h
>> +++ b/arch/arc/include/asm/cmpxchg.h
>> @@ -46,7 +46,7 @@
>>       __typeof__(*(ptr)) _n_ = (new);                    \
>>       __typeof__(*(ptr)) _prev_;                    \
>>                                       \
>> -    switch(sizeof((_p_))) {                        \
>> +    switch (sizeof(*(_p_))) {                        \
>>       case 1:                                \
>>           _prev_ = (__typeof__(*(ptr)))cmpxchg_emu_u8((volatile u8
>> *__force)_p_, (uintptr_t)_o_, (uintptr_t)_n_);    \
>>           break;                            \
>> @@ -102,7 +102,7 @@
>>       __typeof__(ptr) _p_ = (ptr);                    \
>>       __typeof__(*(ptr)) _val_ = (val);                \
>>                                       \
>> -    switch(sizeof(*(_p_))) {                    \
>> +    switch (sizeof(*(_p_))) {                    \
>>       case 4:                                \
>>           _val_ = __arch_xchg(_p_, _val_);            \
>>           break;                            \
>> -- 
>> 2.53.0
>>




More information about the linux-snps-arc mailing list