[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
Wed Sep 23 15:23:47 PDT 2026
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.
---------->
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