* [paulmckrcu:cmpxchg2.2026.09.22a 25/28] arch/arc/include/asm/cmpxchg.h:46:58: error: pointer type mismatch in conditional expression
@ 2026-09-24 7:51 ` kernel test robot
0 siblings, 0 replies; 18+ messages in thread
From: kernel test robot @ 2026-09-24 7:51 UTC (permalink / raw)
To: Bradley Morgan; +Cc: oe-kbuild-all, linux-snps-arc, Paul E. McKenney
tree: https://github.com/paulmckrcu/linux cmpxchg2.2026.09.22a
head: 54c282c15475ebfae4712fe3ab637c9d19c723d6
commit: b6d4f6af38f85e7948fd64f9bf09cbb858b4dade [25/28] ARC: Emulate two-byte cmpxchg
config: arc-allyesconfig (https://download.01.org/0day-ci/archive/20260924/202609241517.SSV1Goz3-lkp@intel.com/config)
compiler: arc-linux-gcc (GCC) 16.1.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260924/202609241517.SSV1Goz3-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@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202609241517.SSV1Goz3-lkp@intel.com/
All errors (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 include/asm-generic/div64.h:55,
from ./arch/arc/include/generated/asm/div64.h:1,
from include/linux/math.h:6,
from include/linux/math64.h:6,
from include/linux/time.h:6,
from include/linux/stat.h:19,
from include/linux/fs_dirent.h:5,
from include/linux/fs/super_types.h:5,
from include/linux/fs/super.h:5,
from include/linux/fs.h:5,
from include/linux/fscrypt.h:16,
from fs/crypto/fscrypt_private.h:15,
from fs/crypto/hooks.c:10:
fs/crypto/hooks.c: In function 'fscrypt_get_symlink':
>> arch/arc/include/asm/cmpxchg.h:46:58: error: pointer type mismatch in conditional expression [-Wincompatible-pointer-types]
46 | unsigned long _new_ = (unsigned long)(0 ? *(_p_) : (new)); \
| ^
include/linux/atomic.h:68:9: note: in expansion of macro 'arch_cmpxchg_relaxed'
68 | op##_relaxed(args); \
| ^~
include/linux/atomic/atomic-arch-fallback.h:80:9: note: in expansion of macro '__atomic_op_release'
80 | __atomic_op_release(arch_cmpxchg, __VA_ARGS__)
| ^~~~~~~~~~~~~~~~~~~
include/linux/atomic/atomic-instrumented.h:4803:9: note: in expansion of macro 'raw_cmpxchg_release'
4803 | raw_cmpxchg_release(__ai_ptr, __VA_ARGS__); \
| ^~~~~~~~~~~~~~~~~~~
fs/crypto/hooks.c:420:13: note: in expansion of macro 'cmpxchg_release'
420 | cmpxchg_release(&inode->i_link, NULL, pstr.name) != NULL)
| ^~~~~~~~~~~~~~~
arch/arc/include/asm/cmpxchg.h:46:51: note: first expression has type 'char *'
46 | unsigned long _new_ = (unsigned long)(0 ? *(_p_) : (new)); \
| ^~~~~~
include/linux/atomic.h:68:9: note: in expansion of macro 'arch_cmpxchg_relaxed'
68 | op##_relaxed(args); \
| ^~
include/linux/atomic/atomic-arch-fallback.h:80:9: note: in expansion of macro '__atomic_op_release'
80 | __atomic_op_release(arch_cmpxchg, __VA_ARGS__)
| ^~~~~~~~~~~~~~~~~~~
include/linux/atomic/atomic-instrumented.h:4803:9: note: in expansion of macro 'raw_cmpxchg_release'
4803 | raw_cmpxchg_release(__ai_ptr, __VA_ARGS__); \
| ^~~~~~~~~~~~~~~~~~~
fs/crypto/hooks.c:420:13: note: in expansion of macro 'cmpxchg_release'
420 | cmpxchg_release(&inode->i_link, NULL, pstr.name) != NULL)
| ^~~~~~~~~~~~~~~
arch/arc/include/asm/cmpxchg.h:46:60: note: second expression has type 'unsigned char *'
46 | unsigned long _new_ = (unsigned long)(0 ? *(_p_) : (new)); \
| ^~~~~
include/linux/atomic.h:68:9: note: in expansion of macro 'arch_cmpxchg_relaxed'
68 | op##_relaxed(args); \
| ^~
include/linux/atomic/atomic-arch-fallback.h:80:9: note: in expansion of macro '__atomic_op_release'
80 | __atomic_op_release(arch_cmpxchg, __VA_ARGS__)
| ^~~~~~~~~~~~~~~~~~~
include/linux/atomic/atomic-instrumented.h:4803:9: note: in expansion of macro 'raw_cmpxchg_release'
4803 | raw_cmpxchg_release(__ai_ptr, __VA_ARGS__); \
| ^~~~~~~~~~~~~~~~~~~
fs/crypto/hooks.c:420:13: note: in expansion of macro 'cmpxchg_release'
420 | cmpxchg_release(&inode->i_link, NULL, pstr.name) != NULL)
| ^~~~~~~~~~~~~~~
vim +46 arch/arc/include/asm/cmpxchg.h
41
42 #define arch_cmpxchg_relaxed(ptr, old, new) \
43 ({ \
44 __typeof__(ptr) _p_ = (ptr); \
45 unsigned long _old_ = (unsigned long)(0 ? *(_p_) : (old)); \
> 46 unsigned long _new_ = (unsigned long)(0 ? *(_p_) : (new)); \
47 __typeof__(*(ptr)) _prev_; \
48 \
49 switch (sizeof(*(_p_))) { \
50 case 1: \
51 _prev_ = (__typeof__(*(ptr)))cmpxchg_emu_u8((volatile u8 *__force)_p_, _old_, _new_); \
52 break; \
53 case 2: \
54 _prev_ = (__typeof__(*(ptr)))cmpxchg_emu_u16((volatile u16 *__force)_p_, _old_, _new_); \
55 break; \
56 case 4: \
57 _prev_ = (__typeof__(*(ptr)))__cmpxchg(_p_, _old_, _new_); \
58 break; \
59 default: \
60 BUILD_BUG(); \
61 } \
62 _prev_; \
63 })
64
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 18+ messages in thread
* [paulmckrcu:cmpxchg2.2026.09.22a 25/28] arch/arc/include/asm/cmpxchg.h:46:58: error: pointer type mismatch in conditional expression
@ 2026-09-24 7:51 ` kernel test robot
0 siblings, 0 replies; 18+ messages in thread
From: kernel test robot @ 2026-09-24 7:51 UTC (permalink / raw)
To: Bradley Morgan; +Cc: oe-kbuild-all, linux-snps-arc, Paul E. McKenney
tree: https://github.com/paulmckrcu/linux cmpxchg2.2026.09.22a
head: 54c282c15475ebfae4712fe3ab637c9d19c723d6
commit: b6d4f6af38f85e7948fd64f9bf09cbb858b4dade [25/28] ARC: Emulate two-byte cmpxchg
config: arc-allyesconfig (https://download.01.org/0day-ci/archive/20260924/202609241517.SSV1Goz3-lkp@intel.com/config)
compiler: arc-linux-gcc (GCC) 16.1.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260924/202609241517.SSV1Goz3-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@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202609241517.SSV1Goz3-lkp@intel.com/
All errors (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 include/asm-generic/div64.h:55,
from ./arch/arc/include/generated/asm/div64.h:1,
from include/linux/math.h:6,
from include/linux/math64.h:6,
from include/linux/time.h:6,
from include/linux/stat.h:19,
from include/linux/fs_dirent.h:5,
from include/linux/fs/super_types.h:5,
from include/linux/fs/super.h:5,
from include/linux/fs.h:5,
from include/linux/fscrypt.h:16,
from fs/crypto/fscrypt_private.h:15,
from fs/crypto/hooks.c:10:
fs/crypto/hooks.c: In function 'fscrypt_get_symlink':
>> arch/arc/include/asm/cmpxchg.h:46:58: error: pointer type mismatch in conditional expression [-Wincompatible-pointer-types]
46 | unsigned long _new_ = (unsigned long)(0 ? *(_p_) : (new)); \
| ^
include/linux/atomic.h:68:9: note: in expansion of macro 'arch_cmpxchg_relaxed'
68 | op##_relaxed(args); \
| ^~
include/linux/atomic/atomic-arch-fallback.h:80:9: note: in expansion of macro '__atomic_op_release'
80 | __atomic_op_release(arch_cmpxchg, __VA_ARGS__)
| ^~~~~~~~~~~~~~~~~~~
include/linux/atomic/atomic-instrumented.h:4803:9: note: in expansion of macro 'raw_cmpxchg_release'
4803 | raw_cmpxchg_release(__ai_ptr, __VA_ARGS__); \
| ^~~~~~~~~~~~~~~~~~~
fs/crypto/hooks.c:420:13: note: in expansion of macro 'cmpxchg_release'
420 | cmpxchg_release(&inode->i_link, NULL, pstr.name) != NULL)
| ^~~~~~~~~~~~~~~
arch/arc/include/asm/cmpxchg.h:46:51: note: first expression has type 'char *'
46 | unsigned long _new_ = (unsigned long)(0 ? *(_p_) : (new)); \
| ^~~~~~
include/linux/atomic.h:68:9: note: in expansion of macro 'arch_cmpxchg_relaxed'
68 | op##_relaxed(args); \
| ^~
include/linux/atomic/atomic-arch-fallback.h:80:9: note: in expansion of macro '__atomic_op_release'
80 | __atomic_op_release(arch_cmpxchg, __VA_ARGS__)
| ^~~~~~~~~~~~~~~~~~~
include/linux/atomic/atomic-instrumented.h:4803:9: note: in expansion of macro 'raw_cmpxchg_release'
4803 | raw_cmpxchg_release(__ai_ptr, __VA_ARGS__); \
| ^~~~~~~~~~~~~~~~~~~
fs/crypto/hooks.c:420:13: note: in expansion of macro 'cmpxchg_release'
420 | cmpxchg_release(&inode->i_link, NULL, pstr.name) != NULL)
| ^~~~~~~~~~~~~~~
arch/arc/include/asm/cmpxchg.h:46:60: note: second expression has type 'unsigned char *'
46 | unsigned long _new_ = (unsigned long)(0 ? *(_p_) : (new)); \
| ^~~~~
include/linux/atomic.h:68:9: note: in expansion of macro 'arch_cmpxchg_relaxed'
68 | op##_relaxed(args); \
| ^~
include/linux/atomic/atomic-arch-fallback.h:80:9: note: in expansion of macro '__atomic_op_release'
80 | __atomic_op_release(arch_cmpxchg, __VA_ARGS__)
| ^~~~~~~~~~~~~~~~~~~
include/linux/atomic/atomic-instrumented.h:4803:9: note: in expansion of macro 'raw_cmpxchg_release'
4803 | raw_cmpxchg_release(__ai_ptr, __VA_ARGS__); \
| ^~~~~~~~~~~~~~~~~~~
fs/crypto/hooks.c:420:13: note: in expansion of macro 'cmpxchg_release'
420 | cmpxchg_release(&inode->i_link, NULL, pstr.name) != NULL)
| ^~~~~~~~~~~~~~~
vim +46 arch/arc/include/asm/cmpxchg.h
41
42 #define arch_cmpxchg_relaxed(ptr, old, new) \
43 ({ \
44 __typeof__(ptr) _p_ = (ptr); \
45 unsigned long _old_ = (unsigned long)(0 ? *(_p_) : (old)); \
> 46 unsigned long _new_ = (unsigned long)(0 ? *(_p_) : (new)); \
47 __typeof__(*(ptr)) _prev_; \
48 \
49 switch (sizeof(*(_p_))) { \
50 case 1: \
51 _prev_ = (__typeof__(*(ptr)))cmpxchg_emu_u8((volatile u8 *__force)_p_, _old_, _new_); \
52 break; \
53 case 2: \
54 _prev_ = (__typeof__(*(ptr)))cmpxchg_emu_u16((volatile u16 *__force)_p_, _old_, _new_); \
55 break; \
56 case 4: \
57 _prev_ = (__typeof__(*(ptr)))__cmpxchg(_p_, _old_, _new_); \
58 break; \
59 default: \
60 BUILD_BUG(); \
61 } \
62 _prev_; \
63 })
64
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [paulmckrcu:cmpxchg2.2026.09.22a 25/28] arch/arc/include/asm/cmpxchg.h:46:58: error: pointer type mismatch in conditional expression
2026-09-24 7:51 ` kernel test robot
@ 2026-09-24 20:52 ` Vineet Gupta
-1 siblings, 0 replies; 18+ messages in thread
From: Vineet Gupta @ 2026-09-24 20:52 UTC (permalink / raw)
To: kernel test robot, Bradley Morgan
Cc: oe-kbuild-all, linux-snps-arc, Paul E. McKenney
On 9/24/26 00:51, kernel test robot wrote:
> tree: https://github.com/paulmckrcu/linux cmpxchg2.2026.09.22a
> head: 54c282c15475ebfae4712fe3ab637c9d19c723d6
> commit: b6d4f6af38f85e7948fd64f9bf09cbb858b4dade [25/28] ARC: Emulate two-byte cmpxchg
> config: arc-allyesconfig (https://download.01.org/0day-ci/archive/20260924/202609241517.SSV1Goz3-lkp@intel.com/config)
> compiler: arc-linux-gcc (GCC) 16.1.0
> reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260924/202609241517.SSV1Goz3-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@intel.com>
> | Closes: https://lore.kernel.org/oe-kbuild-all/202609241517.SSV1Goz3-lkp@intel.com/
>
> All errors (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 include/asm-generic/div64.h:55,
> from ./arch/arc/include/generated/asm/div64.h:1,
> from include/linux/math.h:6,
> from include/linux/math64.h:6,
> from include/linux/time.h:6,
> from include/linux/stat.h:19,
> from include/linux/fs_dirent.h:5,
> from include/linux/fs/super_types.h:5,
> from include/linux/fs/super.h:5,
> from include/linux/fs.h:5,
> from include/linux/fscrypt.h:16,
> from fs/crypto/fscrypt_private.h:15,
> from fs/crypto/hooks.c:10:
> fs/crypto/hooks.c: In function 'fscrypt_get_symlink':
>>> arch/arc/include/asm/cmpxchg.h:46:58: error: pointer type mismatch in conditional expression [-Wincompatible-pointer-types]
> 46 | unsigned long _new_ = (unsigned long)(0 ? *(_p_) : (new)); \
Issue is in fs/crypto/hooks.c doing cmpxchg_release(&inode->i_link,
NULL, pstr.name)
where i_link is char * and pstr.name is unsigned char *),
The problem is when pointer types are incompatible and that's exactly
the W toggle above.
So Bradley's patch needs this fixup
diff --git a/arch/arc/include/asm/cmpxchg.h b/arch/arc/include/asm/cmpxchg.h
index 4596edfefa95..9053098bb152 100644
--- a/arch/arc/include/asm/cmpxchg.h
+++ b/arch/arc/include/asm/cmpxchg.h
@@ -42,8 +42,10 @@
#define arch_cmpxchg_relaxed(ptr, old, new) \
({ \
__typeof__(ptr) _p_ = (ptr); \
- unsigned long _old_ = (unsigned long)(0 ? *(_p_) : (old));
\
- unsigned long _new_ = (unsigned long)(0 ? *(_p_) : (new));
\
+ __typeof__(*(ptr)) _o_ = (old); \
+ __typeof__(*(ptr)) _n_ = (new); \
+ unsigned long _old_ = (unsigned long)_o_; \
+ unsigned long _new_ = (unsigned long)_n_; \
P.S: For arch changes shouldn't the submitter be required to at least
test the building, specially when this involves the macro maze. Its
really easy with crosstool hosting all the cross-compilers [1] - just
download and untar.
[1]
https://mirrors.edge.kernel.org/pub/tools/crosstool/files/bin/x86_64/16.2.0/
Thx,
-Vineet
> | ^
> include/linux/atomic.h:68:9: note: in expansion of macro 'arch_cmpxchg_relaxed'
> 68 | op##_relaxed(args); \
> | ^~
> include/linux/atomic/atomic-arch-fallback.h:80:9: note: in expansion of macro '__atomic_op_release'
> 80 | __atomic_op_release(arch_cmpxchg, __VA_ARGS__)
> | ^~~~~~~~~~~~~~~~~~~
> include/linux/atomic/atomic-instrumented.h:4803:9: note: in expansion of macro 'raw_cmpxchg_release'
> 4803 | raw_cmpxchg_release(__ai_ptr, __VA_ARGS__); \
> | ^~~~~~~~~~~~~~~~~~~
> fs/crypto/hooks.c:420:13: note: in expansion of macro 'cmpxchg_release'
> 420 | cmpxchg_release(&inode->i_link, NULL, pstr.name) != NULL)
> | ^~~~~~~~~~~~~~~
> arch/arc/include/asm/cmpxchg.h:46:51: note: first expression has type 'char *'
> 46 | unsigned long _new_ = (unsigned long)(0 ? *(_p_) : (new)); \
> | ^~~~~~
> include/linux/atomic.h:68:9: note: in expansion of macro 'arch_cmpxchg_relaxed'
> 68 | op##_relaxed(args); \
> | ^~
> include/linux/atomic/atomic-arch-fallback.h:80:9: note: in expansion of macro '__atomic_op_release'
> 80 | __atomic_op_release(arch_cmpxchg, __VA_ARGS__)
> | ^~~~~~~~~~~~~~~~~~~
> include/linux/atomic/atomic-instrumented.h:4803:9: note: in expansion of macro 'raw_cmpxchg_release'
> 4803 | raw_cmpxchg_release(__ai_ptr, __VA_ARGS__); \
> | ^~~~~~~~~~~~~~~~~~~
> fs/crypto/hooks.c:420:13: note: in expansion of macro 'cmpxchg_release'
> 420 | cmpxchg_release(&inode->i_link, NULL, pstr.name) != NULL)
> | ^~~~~~~~~~~~~~~
> arch/arc/include/asm/cmpxchg.h:46:60: note: second expression has type 'unsigned char *'
> 46 | unsigned long _new_ = (unsigned long)(0 ? *(_p_) : (new)); \
> | ^~~~~
> include/linux/atomic.h:68:9: note: in expansion of macro 'arch_cmpxchg_relaxed'
> 68 | op##_relaxed(args); \
> | ^~
> include/linux/atomic/atomic-arch-fallback.h:80:9: note: in expansion of macro '__atomic_op_release'
> 80 | __atomic_op_release(arch_cmpxchg, __VA_ARGS__)
> | ^~~~~~~~~~~~~~~~~~~
> include/linux/atomic/atomic-instrumented.h:4803:9: note: in expansion of macro 'raw_cmpxchg_release'
> 4803 | raw_cmpxchg_release(__ai_ptr, __VA_ARGS__); \
> | ^~~~~~~~~~~~~~~~~~~
> fs/crypto/hooks.c:420:13: note: in expansion of macro 'cmpxchg_release'
> 420 | cmpxchg_release(&inode->i_link, NULL, pstr.name) != NULL)
> | ^~~~~~~~~~~~~~~
>
>
> vim +46 arch/arc/include/asm/cmpxchg.h
>
> 41
> 42 #define arch_cmpxchg_relaxed(ptr, old, new) \
> 43 ({ \
> 44 __typeof__(ptr) _p_ = (ptr); \
> 45 unsigned long _old_ = (unsigned long)(0 ? *(_p_) : (old)); \
> > 46 unsigned long _new_ = (unsigned long)(0 ? *(_p_) : (new)); \
> 47 __typeof__(*(ptr)) _prev_; \
> 48 \
> 49 switch (sizeof(*(_p_))) { \
> 50 case 1: \
> 51 _prev_ = (__typeof__(*(ptr)))cmpxchg_emu_u8((volatile u8 *__force)_p_, _old_, _new_); \
> 52 break; \
> 53 case 2: \
> 54 _prev_ = (__typeof__(*(ptr)))cmpxchg_emu_u16((volatile u16 *__force)_p_, _old_, _new_); \
> 55 break; \
> 56 case 4: \
> 57 _prev_ = (__typeof__(*(ptr)))__cmpxchg(_p_, _old_, _new_); \
> 58 break; \
> 59 default: \
> 60 BUILD_BUG(); \
> 61 } \
> 62 _prev_; \
> 63 })
> 64
>
> --
> 0-DAY CI Kernel Test Service
> https://github.com/intel/lkp-tests/wiki
>
> _______________________________________________
> linux-snps-arc mailing list
> linux-snps-arc@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-snps-arc
^ permalink raw reply related [flat|nested] 18+ messages in thread
* Re: [paulmckrcu:cmpxchg2.2026.09.22a 25/28] arch/arc/include/asm/cmpxchg.h:46:58: error: pointer type mismatch in conditional expression
@ 2026-09-24 20:52 ` Vineet Gupta
0 siblings, 0 replies; 18+ messages in thread
From: Vineet Gupta @ 2026-09-24 20:52 UTC (permalink / raw)
To: kernel test robot, Bradley Morgan
Cc: oe-kbuild-all, linux-snps-arc, Paul E. McKenney
On 9/24/26 00:51, kernel test robot wrote:
> tree: https://github.com/paulmckrcu/linux cmpxchg2.2026.09.22a
> head: 54c282c15475ebfae4712fe3ab637c9d19c723d6
> commit: b6d4f6af38f85e7948fd64f9bf09cbb858b4dade [25/28] ARC: Emulate two-byte cmpxchg
> config: arc-allyesconfig (https://download.01.org/0day-ci/archive/20260924/202609241517.SSV1Goz3-lkp@intel.com/config)
> compiler: arc-linux-gcc (GCC) 16.1.0
> reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260924/202609241517.SSV1Goz3-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@intel.com>
> | Closes: https://lore.kernel.org/oe-kbuild-all/202609241517.SSV1Goz3-lkp@intel.com/
>
> All errors (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 include/asm-generic/div64.h:55,
> from ./arch/arc/include/generated/asm/div64.h:1,
> from include/linux/math.h:6,
> from include/linux/math64.h:6,
> from include/linux/time.h:6,
> from include/linux/stat.h:19,
> from include/linux/fs_dirent.h:5,
> from include/linux/fs/super_types.h:5,
> from include/linux/fs/super.h:5,
> from include/linux/fs.h:5,
> from include/linux/fscrypt.h:16,
> from fs/crypto/fscrypt_private.h:15,
> from fs/crypto/hooks.c:10:
> fs/crypto/hooks.c: In function 'fscrypt_get_symlink':
>>> arch/arc/include/asm/cmpxchg.h:46:58: error: pointer type mismatch in conditional expression [-Wincompatible-pointer-types]
> 46 | unsigned long _new_ = (unsigned long)(0 ? *(_p_) : (new)); \
Issue is in fs/crypto/hooks.c doing cmpxchg_release(&inode->i_link,
NULL, pstr.name)
where i_link is char * and pstr.name is unsigned char *),
The problem is when pointer types are incompatible and that's exactly
the W toggle above.
So Bradley's patch needs this fixup
diff --git a/arch/arc/include/asm/cmpxchg.h b/arch/arc/include/asm/cmpxchg.h
index 4596edfefa95..9053098bb152 100644
--- a/arch/arc/include/asm/cmpxchg.h
+++ b/arch/arc/include/asm/cmpxchg.h
@@ -42,8 +42,10 @@
#define arch_cmpxchg_relaxed(ptr, old, new) \
({ \
__typeof__(ptr) _p_ = (ptr); \
- unsigned long _old_ = (unsigned long)(0 ? *(_p_) : (old));
\
- unsigned long _new_ = (unsigned long)(0 ? *(_p_) : (new));
\
+ __typeof__(*(ptr)) _o_ = (old); \
+ __typeof__(*(ptr)) _n_ = (new); \
+ unsigned long _old_ = (unsigned long)_o_; \
+ unsigned long _new_ = (unsigned long)_n_; \
P.S: For arch changes shouldn't the submitter be required to at least
test the building, specially when this involves the macro maze. Its
really easy with crosstool hosting all the cross-compilers [1] - just
download and untar.
[1]
https://mirrors.edge.kernel.org/pub/tools/crosstool/files/bin/x86_64/16.2.0/
Thx,
-Vineet
> | ^
> include/linux/atomic.h:68:9: note: in expansion of macro 'arch_cmpxchg_relaxed'
> 68 | op##_relaxed(args); \
> | ^~
> include/linux/atomic/atomic-arch-fallback.h:80:9: note: in expansion of macro '__atomic_op_release'
> 80 | __atomic_op_release(arch_cmpxchg, __VA_ARGS__)
> | ^~~~~~~~~~~~~~~~~~~
> include/linux/atomic/atomic-instrumented.h:4803:9: note: in expansion of macro 'raw_cmpxchg_release'
> 4803 | raw_cmpxchg_release(__ai_ptr, __VA_ARGS__); \
> | ^~~~~~~~~~~~~~~~~~~
> fs/crypto/hooks.c:420:13: note: in expansion of macro 'cmpxchg_release'
> 420 | cmpxchg_release(&inode->i_link, NULL, pstr.name) != NULL)
> | ^~~~~~~~~~~~~~~
> arch/arc/include/asm/cmpxchg.h:46:51: note: first expression has type 'char *'
> 46 | unsigned long _new_ = (unsigned long)(0 ? *(_p_) : (new)); \
> | ^~~~~~
> include/linux/atomic.h:68:9: note: in expansion of macro 'arch_cmpxchg_relaxed'
> 68 | op##_relaxed(args); \
> | ^~
> include/linux/atomic/atomic-arch-fallback.h:80:9: note: in expansion of macro '__atomic_op_release'
> 80 | __atomic_op_release(arch_cmpxchg, __VA_ARGS__)
> | ^~~~~~~~~~~~~~~~~~~
> include/linux/atomic/atomic-instrumented.h:4803:9: note: in expansion of macro 'raw_cmpxchg_release'
> 4803 | raw_cmpxchg_release(__ai_ptr, __VA_ARGS__); \
> | ^~~~~~~~~~~~~~~~~~~
> fs/crypto/hooks.c:420:13: note: in expansion of macro 'cmpxchg_release'
> 420 | cmpxchg_release(&inode->i_link, NULL, pstr.name) != NULL)
> | ^~~~~~~~~~~~~~~
> arch/arc/include/asm/cmpxchg.h:46:60: note: second expression has type 'unsigned char *'
> 46 | unsigned long _new_ = (unsigned long)(0 ? *(_p_) : (new)); \
> | ^~~~~
> include/linux/atomic.h:68:9: note: in expansion of macro 'arch_cmpxchg_relaxed'
> 68 | op##_relaxed(args); \
> | ^~
> include/linux/atomic/atomic-arch-fallback.h:80:9: note: in expansion of macro '__atomic_op_release'
> 80 | __atomic_op_release(arch_cmpxchg, __VA_ARGS__)
> | ^~~~~~~~~~~~~~~~~~~
> include/linux/atomic/atomic-instrumented.h:4803:9: note: in expansion of macro 'raw_cmpxchg_release'
> 4803 | raw_cmpxchg_release(__ai_ptr, __VA_ARGS__); \
> | ^~~~~~~~~~~~~~~~~~~
> fs/crypto/hooks.c:420:13: note: in expansion of macro 'cmpxchg_release'
> 420 | cmpxchg_release(&inode->i_link, NULL, pstr.name) != NULL)
> | ^~~~~~~~~~~~~~~
>
>
> vim +46 arch/arc/include/asm/cmpxchg.h
>
> 41
> 42 #define arch_cmpxchg_relaxed(ptr, old, new) \
> 43 ({ \
> 44 __typeof__(ptr) _p_ = (ptr); \
> 45 unsigned long _old_ = (unsigned long)(0 ? *(_p_) : (old)); \
> > 46 unsigned long _new_ = (unsigned long)(0 ? *(_p_) : (new)); \
> 47 __typeof__(*(ptr)) _prev_; \
> 48 \
> 49 switch (sizeof(*(_p_))) { \
> 50 case 1: \
> 51 _prev_ = (__typeof__(*(ptr)))cmpxchg_emu_u8((volatile u8 *__force)_p_, _old_, _new_); \
> 52 break; \
> 53 case 2: \
> 54 _prev_ = (__typeof__(*(ptr)))cmpxchg_emu_u16((volatile u16 *__force)_p_, _old_, _new_); \
> 55 break; \
> 56 case 4: \
> 57 _prev_ = (__typeof__(*(ptr)))__cmpxchg(_p_, _old_, _new_); \
> 58 break; \
> 59 default: \
> 60 BUILD_BUG(); \
> 61 } \
> 62 _prev_; \
> 63 })
> 64
>
> --
> 0-DAY CI Kernel Test Service
> https://github.com/intel/lkp-tests/wiki
>
> _______________________________________________
> linux-snps-arc mailing list
> linux-snps-arc@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-snps-arc
_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc
^ permalink raw reply related [flat|nested] 18+ messages in thread
* Re: [paulmckrcu:cmpxchg2.2026.09.22a 25/28] arch/arc/include/asm/cmpxchg.h:46:58: error: pointer type mismatch in conditional expression
2026-09-24 20:52 ` Vineet Gupta
@ 2026-09-24 20:58 ` Bradley Morgan
-1 siblings, 0 replies; 18+ messages in thread
From: Bradley Morgan @ 2026-09-24 20:58 UTC (permalink / raw)
To: Vineet Gupta, kernel test robot
Cc: oe-kbuild-all, linux-snps-arc, Paul E. McKenney
On 24 September 2026 21:52:55 BST, Vineet Gupta <vgupta@kernel.org> wrote:
>On 9/24/26 00:51, kernel test robot wrote:
>> tree: https://github.com/paulmckrcu/linux cmpxchg2.2026.09.22a
>> head: 54c282c15475ebfae4712fe3ab637c9d19c723d6
>> commit: b6d4f6af38f85e7948fd64f9bf09cbb858b4dade [25/28] ARC: Emulate
>two-byte cmpxchg
>> config: arc-allyesconfig
>(https://download.01.org/0day-ci/archive/20260924/202609241517.SSV1Goz3-lkp@intel.com/config)
>> compiler: arc-linux-gcc (GCC) 16.1.0
>> reproduce (this is a W=1 build):
>(https://download.01.org/0day-ci/archive/20260924/202609241517.SSV1Goz3-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@intel.com>
>> | Closes:
>https://lore.kernel.org/oe-kbuild-all/202609241517.SSV1Goz3-lkp@intel.com/
>>
>> All errors (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 include/asm-generic/div64.h:55,
>> from ./arch/arc/include/generated/asm/div64.h:1,
>> from include/linux/math.h:6,
>> from include/linux/math64.h:6,
>> from include/linux/time.h:6,
>> from include/linux/stat.h:19,
>> from include/linux/fs_dirent.h:5,
>> from include/linux/fs/super_types.h:5,
>> from include/linux/fs/super.h:5,
>> from include/linux/fs.h:5,
>> from include/linux/fscrypt.h:16,
>> from fs/crypto/fscrypt_private.h:15,
>> from fs/crypto/hooks.c:10:
>> fs/crypto/hooks.c: In function 'fscrypt_get_symlink':
>>>> arch/arc/include/asm/cmpxchg.h:46:58: error: pointer type mismatch in
>conditional expression [-Wincompatible-pointer-types]
>> 46 | unsigned long _new_ = (unsigned long)(0 ? *(_p_) :
>(new)); \
>
>Issue is in fs/crypto/hooks.c doing cmpxchg_release(&inode->i_link, NULL,
>pstr.name)
>where i_link is char * and pstr.name is unsigned char *),
>
>The problem is when pointer types are incompatible and that's exactly the
>W toggle above.
>
>So Bradley's patch needs this fixup
>
>diff --git a/arch/arc/include/asm/cmpxchg.h b/arch/arc/include/asm/cmpxchg.h
>index 4596edfefa95..9053098bb152 100644
>--- a/arch/arc/include/asm/cmpxchg.h
>+++ b/arch/arc/include/asm/cmpxchg.h
>@@ -42,8 +42,10 @@
> #define arch_cmpxchg_relaxed(ptr, old, new) \
> ({ \
> __typeof__(ptr) _p_ = (ptr); \
>- unsigned long _old_ = (unsigned long)(0 ? *(_p_) : (old)); \
>- unsigned long _new_ = (unsigned long)(0 ? *(_p_) : (new)); \
>+ __typeof__(*(ptr)) _o_ = (old); \
>+ __typeof__(*(ptr)) _n_ = (new); \
>+ unsigned long _old_ = (unsigned long)_o_; \
>+ unsigned long _new_ = (unsigned long)_n_; \
>
>P.S: For arch changes shouldn't the submitter be required to at least test
>the building, specially when this involves the macro maze. Its really easy
>with crosstool hosting all the cross-compilers [1] - just download and
>untar.
>
>[1]
>https://mirrors.edge.kernel.org/pub/tools/crosstool/files/bin/x86_64/16.2.0/
Well thanks but I didn't have a proper server till yesterday.
I'll post all arch patches when Paul tells me how he wants it
Like if he wants u16 in first then arch changes sent.
>
>Thx,
>-Vineet
>
>> | ^
>> include/linux/atomic.h:68:9: note: in expansion of macro
>'arch_cmpxchg_relaxed'
>> 68 | op##_relaxed(args);
> \
>> | ^~
>> include/linux/atomic/atomic-arch-fallback.h:80:9: note: in expansion
>of macro '__atomic_op_release'
>> 80 | __atomic_op_release(arch_cmpxchg, __VA_ARGS__)
>> | ^~~~~~~~~~~~~~~~~~~
>> include/linux/atomic/atomic-instrumented.h:4803:9: note: in
>expansion of macro 'raw_cmpxchg_release'
>> 4803 | raw_cmpxchg_release(__ai_ptr, __VA_ARGS__); \
>> | ^~~~~~~~~~~~~~~~~~~
>> fs/crypto/hooks.c:420:13: note: in expansion of macro
>'cmpxchg_release'
>> 420 | cmpxchg_release(&inode->i_link, NULL, pstr.name)
>!= NULL)
>> | ^~~~~~~~~~~~~~~
>> arch/arc/include/asm/cmpxchg.h:46:51: note: first expression has
>type 'char *'
>> 46 | unsigned long _new_ = (unsigned long)(0 ? *(_p_) :
>(new)); \
>> | ^~~~~~
>> include/linux/atomic.h:68:9: note: in expansion of macro
>'arch_cmpxchg_relaxed'
>> 68 | op##_relaxed(args);
> \
>> | ^~
>> include/linux/atomic/atomic-arch-fallback.h:80:9: note: in expansion
>of macro '__atomic_op_release'
>> 80 | __atomic_op_release(arch_cmpxchg, __VA_ARGS__)
>> | ^~~~~~~~~~~~~~~~~~~
>> include/linux/atomic/atomic-instrumented.h:4803:9: note: in
>expansion of macro 'raw_cmpxchg_release'
>> 4803 | raw_cmpxchg_release(__ai_ptr, __VA_ARGS__); \
>> | ^~~~~~~~~~~~~~~~~~~
>> fs/crypto/hooks.c:420:13: note: in expansion of macro
>'cmpxchg_release'
>> 420 | cmpxchg_release(&inode->i_link, NULL, pstr.name)
>!= NULL)
>> | ^~~~~~~~~~~~~~~
>> arch/arc/include/asm/cmpxchg.h:46:60: note: second expression has
>type 'unsigned char *'
>> 46 | unsigned long _new_ = (unsigned long)(0 ? *(_p_) :
>(new)); \
>> |
>^~~~~
>> include/linux/atomic.h:68:9: note: in expansion of macro
>'arch_cmpxchg_relaxed'
>> 68 | op##_relaxed(args);
> \
>> | ^~
>> include/linux/atomic/atomic-arch-fallback.h:80:9: note: in expansion
>of macro '__atomic_op_release'
>> 80 | __atomic_op_release(arch_cmpxchg, __VA_ARGS__)
>> | ^~~~~~~~~~~~~~~~~~~
>> include/linux/atomic/atomic-instrumented.h:4803:9: note: in
>expansion of macro 'raw_cmpxchg_release'
>> 4803 | raw_cmpxchg_release(__ai_ptr, __VA_ARGS__); \
>> | ^~~~~~~~~~~~~~~~~~~
>> fs/crypto/hooks.c:420:13: note: in expansion of macro
>'cmpxchg_release'
>> 420 | cmpxchg_release(&inode->i_link, NULL, pstr.name)
>!= NULL)
>> | ^~~~~~~~~~~~~~~
>>
>>
>> vim +46 arch/arc/include/asm/cmpxchg.h
>>
>> 41
>> 42 #define arch_cmpxchg_relaxed(ptr, old, new) \
>> 43 ({ \
>> 44 __typeof__(ptr) _p_ = (ptr); \
>> 45 unsigned long _old_ = (unsigned long)(0 ? *(_p_) : (old)); \
>> > 46 unsigned long _new_ = (unsigned long)(0 ? *(_p_) : (new)); \
>> 47 __typeof__(*(ptr)) _prev_; \
>> 48 \
>> 49 switch (sizeof(*(_p_))) { \
>> 50 case 1: \
>> 51 _prev_ = (__typeof__(*(ptr)))cmpxchg_emu_u8((volatile u8 *__force)_p_, _old_, _new_); \
>> 52 break; \
>> 53 case 2: \
>> 54 _prev_ = (__typeof__(*(ptr)))cmpxchg_emu_u16((volatile u16 *__force)_p_, _old_, _new_); \
>> 55 break; \
>> 56 case 4: \
>> 57 _prev_ = (__typeof__(*(ptr)))__cmpxchg(_p_, _old_, _new_); \
>> 58 break; \
>> 59 default: \
>> 60 BUILD_BUG(); \
>> 61 } \
>> 62 _prev_; \
>> 63 })
>> 64
>>
>> --
>> 0-DAY CI Kernel Test Service
>> https://github.com/intel/lkp-tests/wiki
>>
>> _______________________________________________
>> linux-snps-arc mailing list
>> linux-snps-arc@lists.infradead.org
>> http://lists.infradead.org/mailman/listinfo/linux-snps-arc
>
--- Thanks!
"I'm not a very positive person" - Linus torvalds
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [paulmckrcu:cmpxchg2.2026.09.22a 25/28] arch/arc/include/asm/cmpxchg.h:46:58: error: pointer type mismatch in conditional expression
@ 2026-09-24 20:58 ` Bradley Morgan
0 siblings, 0 replies; 18+ messages in thread
From: Bradley Morgan @ 2026-09-24 20:58 UTC (permalink / raw)
To: Vineet Gupta, kernel test robot
Cc: oe-kbuild-all, linux-snps-arc, Paul E. McKenney
On 24 September 2026 21:52:55 BST, Vineet Gupta <vgupta@kernel.org> wrote:
>On 9/24/26 00:51, kernel test robot wrote:
>> tree: https://github.com/paulmckrcu/linux cmpxchg2.2026.09.22a
>> head: 54c282c15475ebfae4712fe3ab637c9d19c723d6
>> commit: b6d4f6af38f85e7948fd64f9bf09cbb858b4dade [25/28] ARC: Emulate
>two-byte cmpxchg
>> config: arc-allyesconfig
>(https://download.01.org/0day-ci/archive/20260924/202609241517.SSV1Goz3-lkp@intel.com/config)
>> compiler: arc-linux-gcc (GCC) 16.1.0
>> reproduce (this is a W=1 build):
>(https://download.01.org/0day-ci/archive/20260924/202609241517.SSV1Goz3-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@intel.com>
>> | Closes:
>https://lore.kernel.org/oe-kbuild-all/202609241517.SSV1Goz3-lkp@intel.com/
>>
>> All errors (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 include/asm-generic/div64.h:55,
>> from ./arch/arc/include/generated/asm/div64.h:1,
>> from include/linux/math.h:6,
>> from include/linux/math64.h:6,
>> from include/linux/time.h:6,
>> from include/linux/stat.h:19,
>> from include/linux/fs_dirent.h:5,
>> from include/linux/fs/super_types.h:5,
>> from include/linux/fs/super.h:5,
>> from include/linux/fs.h:5,
>> from include/linux/fscrypt.h:16,
>> from fs/crypto/fscrypt_private.h:15,
>> from fs/crypto/hooks.c:10:
>> fs/crypto/hooks.c: In function 'fscrypt_get_symlink':
>>>> arch/arc/include/asm/cmpxchg.h:46:58: error: pointer type mismatch in
>conditional expression [-Wincompatible-pointer-types]
>> 46 | unsigned long _new_ = (unsigned long)(0 ? *(_p_) :
>(new)); \
>
>Issue is in fs/crypto/hooks.c doing cmpxchg_release(&inode->i_link, NULL,
>pstr.name)
>where i_link is char * and pstr.name is unsigned char *),
>
>The problem is when pointer types are incompatible and that's exactly the
>W toggle above.
>
>So Bradley's patch needs this fixup
>
>diff --git a/arch/arc/include/asm/cmpxchg.h b/arch/arc/include/asm/cmpxchg.h
>index 4596edfefa95..9053098bb152 100644
>--- a/arch/arc/include/asm/cmpxchg.h
>+++ b/arch/arc/include/asm/cmpxchg.h
>@@ -42,8 +42,10 @@
> #define arch_cmpxchg_relaxed(ptr, old, new) \
> ({ \
> __typeof__(ptr) _p_ = (ptr); \
>- unsigned long _old_ = (unsigned long)(0 ? *(_p_) : (old)); \
>- unsigned long _new_ = (unsigned long)(0 ? *(_p_) : (new)); \
>+ __typeof__(*(ptr)) _o_ = (old); \
>+ __typeof__(*(ptr)) _n_ = (new); \
>+ unsigned long _old_ = (unsigned long)_o_; \
>+ unsigned long _new_ = (unsigned long)_n_; \
>
>P.S: For arch changes shouldn't the submitter be required to at least test
>the building, specially when this involves the macro maze. Its really easy
>with crosstool hosting all the cross-compilers [1] - just download and
>untar.
>
>[1]
>https://mirrors.edge.kernel.org/pub/tools/crosstool/files/bin/x86_64/16.2.0/
Well thanks but I didn't have a proper server till yesterday.
I'll post all arch patches when Paul tells me how he wants it
Like if he wants u16 in first then arch changes sent.
>
>Thx,
>-Vineet
>
>> | ^
>> include/linux/atomic.h:68:9: note: in expansion of macro
>'arch_cmpxchg_relaxed'
>> 68 | op##_relaxed(args);
> \
>> | ^~
>> include/linux/atomic/atomic-arch-fallback.h:80:9: note: in expansion
>of macro '__atomic_op_release'
>> 80 | __atomic_op_release(arch_cmpxchg, __VA_ARGS__)
>> | ^~~~~~~~~~~~~~~~~~~
>> include/linux/atomic/atomic-instrumented.h:4803:9: note: in
>expansion of macro 'raw_cmpxchg_release'
>> 4803 | raw_cmpxchg_release(__ai_ptr, __VA_ARGS__); \
>> | ^~~~~~~~~~~~~~~~~~~
>> fs/crypto/hooks.c:420:13: note: in expansion of macro
>'cmpxchg_release'
>> 420 | cmpxchg_release(&inode->i_link, NULL, pstr.name)
>!= NULL)
>> | ^~~~~~~~~~~~~~~
>> arch/arc/include/asm/cmpxchg.h:46:51: note: first expression has
>type 'char *'
>> 46 | unsigned long _new_ = (unsigned long)(0 ? *(_p_) :
>(new)); \
>> | ^~~~~~
>> include/linux/atomic.h:68:9: note: in expansion of macro
>'arch_cmpxchg_relaxed'
>> 68 | op##_relaxed(args);
> \
>> | ^~
>> include/linux/atomic/atomic-arch-fallback.h:80:9: note: in expansion
>of macro '__atomic_op_release'
>> 80 | __atomic_op_release(arch_cmpxchg, __VA_ARGS__)
>> | ^~~~~~~~~~~~~~~~~~~
>> include/linux/atomic/atomic-instrumented.h:4803:9: note: in
>expansion of macro 'raw_cmpxchg_release'
>> 4803 | raw_cmpxchg_release(__ai_ptr, __VA_ARGS__); \
>> | ^~~~~~~~~~~~~~~~~~~
>> fs/crypto/hooks.c:420:13: note: in expansion of macro
>'cmpxchg_release'
>> 420 | cmpxchg_release(&inode->i_link, NULL, pstr.name)
>!= NULL)
>> | ^~~~~~~~~~~~~~~
>> arch/arc/include/asm/cmpxchg.h:46:60: note: second expression has
>type 'unsigned char *'
>> 46 | unsigned long _new_ = (unsigned long)(0 ? *(_p_) :
>(new)); \
>> |
>^~~~~
>> include/linux/atomic.h:68:9: note: in expansion of macro
>'arch_cmpxchg_relaxed'
>> 68 | op##_relaxed(args);
> \
>> | ^~
>> include/linux/atomic/atomic-arch-fallback.h:80:9: note: in expansion
>of macro '__atomic_op_release'
>> 80 | __atomic_op_release(arch_cmpxchg, __VA_ARGS__)
>> | ^~~~~~~~~~~~~~~~~~~
>> include/linux/atomic/atomic-instrumented.h:4803:9: note: in
>expansion of macro 'raw_cmpxchg_release'
>> 4803 | raw_cmpxchg_release(__ai_ptr, __VA_ARGS__); \
>> | ^~~~~~~~~~~~~~~~~~~
>> fs/crypto/hooks.c:420:13: note: in expansion of macro
>'cmpxchg_release'
>> 420 | cmpxchg_release(&inode->i_link, NULL, pstr.name)
>!= NULL)
>> | ^~~~~~~~~~~~~~~
>>
>>
>> vim +46 arch/arc/include/asm/cmpxchg.h
>>
>> 41
>> 42 #define arch_cmpxchg_relaxed(ptr, old, new) \
>> 43 ({ \
>> 44 __typeof__(ptr) _p_ = (ptr); \
>> 45 unsigned long _old_ = (unsigned long)(0 ? *(_p_) : (old)); \
>> > 46 unsigned long _new_ = (unsigned long)(0 ? *(_p_) : (new)); \
>> 47 __typeof__(*(ptr)) _prev_; \
>> 48 \
>> 49 switch (sizeof(*(_p_))) { \
>> 50 case 1: \
>> 51 _prev_ = (__typeof__(*(ptr)))cmpxchg_emu_u8((volatile u8 *__force)_p_, _old_, _new_); \
>> 52 break; \
>> 53 case 2: \
>> 54 _prev_ = (__typeof__(*(ptr)))cmpxchg_emu_u16((volatile u16 *__force)_p_, _old_, _new_); \
>> 55 break; \
>> 56 case 4: \
>> 57 _prev_ = (__typeof__(*(ptr)))__cmpxchg(_p_, _old_, _new_); \
>> 58 break; \
>> 59 default: \
>> 60 BUILD_BUG(); \
>> 61 } \
>> 62 _prev_; \
>> 63 })
>> 64
>>
>> --
>> 0-DAY CI Kernel Test Service
>> https://github.com/intel/lkp-tests/wiki
>>
>> _______________________________________________
>> linux-snps-arc mailing list
>> linux-snps-arc@lists.infradead.org
>> http://lists.infradead.org/mailman/listinfo/linux-snps-arc
>
--- Thanks!
"I'm not a very positive person" - Linus torvalds
_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [paulmckrcu:cmpxchg2.2026.09.22a 25/28] arch/arc/include/asm/cmpxchg.h:46:58: error: pointer type mismatch in conditional expression
2026-09-24 20:58 ` Bradley Morgan
@ 2026-09-24 21:27 ` Vineet Gupta
-1 siblings, 0 replies; 18+ messages in thread
From: Vineet Gupta @ 2026-09-24 21:27 UTC (permalink / raw)
To: Bradley Morgan, Vineet Gupta, kernel test robot
Cc: oe-kbuild-all, linux-snps-arc, Paul E. McKenney
On 9/24/26 13:58, Bradley Morgan wrote:
> On 24 September 2026 21:52:55 BST, Vineet Gupta <vgupta@kernel.org> wrote:
>> On 9/24/26 00:51, kernel test robot wrote:
>>> tree: https://github.com/paulmckrcu/linux cmpxchg2.2026.09.22a
>>> head: 54c282c15475ebfae4712fe3ab637c9d19c723d6
>>> commit: b6d4f6af38f85e7948fd64f9bf09cbb858b4dade [25/28] ARC: Emulate
>> two-byte cmpxchg
>>> config: arc-allyesconfig
>> (https://download.01.org/0day-ci/archive/20260924/202609241517.SSV1Goz3-lkp@intel.com/config)
>>> compiler: arc-linux-gcc (GCC) 16.1.0
>>> reproduce (this is a W=1 build):
>> (https://download.01.org/0day-ci/archive/20260924/202609241517.SSV1Goz3-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@intel.com>
>>> | Closes:
>> https://lore.kernel.org/oe-kbuild-all/202609241517.SSV1Goz3-lkp@intel.com/
>>> All errors (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 include/asm-generic/div64.h:55,
>>> from ./arch/arc/include/generated/asm/div64.h:1,
>>> from include/linux/math.h:6,
>>> from include/linux/math64.h:6,
>>> from include/linux/time.h:6,
>>> from include/linux/stat.h:19,
>>> from include/linux/fs_dirent.h:5,
>>> from include/linux/fs/super_types.h:5,
>>> from include/linux/fs/super.h:5,
>>> from include/linux/fs.h:5,
>>> from include/linux/fscrypt.h:16,
>>> from fs/crypto/fscrypt_private.h:15,
>>> from fs/crypto/hooks.c:10:
>>> fs/crypto/hooks.c: In function 'fscrypt_get_symlink':
>>>>> arch/arc/include/asm/cmpxchg.h:46:58: error: pointer type mismatch in
>> conditional expression [-Wincompatible-pointer-types]
>>> 46 | unsigned long _new_ = (unsigned long)(0 ? *(_p_) :
>> (new)); \
>>
>> Issue is in fs/crypto/hooks.c doing cmpxchg_release(&inode->i_link, NULL,
>> pstr.name)
>> where i_link is char * and pstr.name is unsigned char *),
>>
>> The problem is when pointer types are incompatible and that's exactly the
>> W toggle above.
>>
>> So Bradley's patch needs this fixup
>>
>> diff --git a/arch/arc/include/asm/cmpxchg.h b/arch/arc/include/asm/cmpxchg.h
>> index 4596edfefa95..9053098bb152 100644
>> --- a/arch/arc/include/asm/cmpxchg.h
>> +++ b/arch/arc/include/asm/cmpxchg.h
>> @@ -42,8 +42,10 @@
>> #define arch_cmpxchg_relaxed(ptr, old, new) \
>> ({ \
>> __typeof__(ptr) _p_ = (ptr); \
>> - unsigned long _old_ = (unsigned long)(0 ? *(_p_) : (old)); \
>> - unsigned long _new_ = (unsigned long)(0 ? *(_p_) : (new)); \
>> + __typeof__(*(ptr)) _o_ = (old); \
>> + __typeof__(*(ptr)) _n_ = (new); \
>> + unsigned long _old_ = (unsigned long)_o_; \
>> + unsigned long _new_ = (unsigned long)_n_; \
>>
>> P.S: For arch changes shouldn't the submitter be required to at least test
>> the building, specially when this involves the macro maze. Its really easy
>> with crosstool hosting all the cross-compilers [1] - just download and
>> untar.
>>
>> [1]
>> https://mirrors.edge.kernel.org/pub/tools/crosstool/files/bin/x86_64/16.2.0/
> Well thanks but I didn't have a proper server till yesterday.
A relatively decent laptop works for me.
> I'll post all arch patches when Paul tells me how he wants it
Please do a minimal compile build - it will save you the re-spins.
> Like if he wants u16 in first then arch changes sent.
Sure !
Cheers,
-Vineet
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [paulmckrcu:cmpxchg2.2026.09.22a 25/28] arch/arc/include/asm/cmpxchg.h:46:58: error: pointer type mismatch in conditional expression
@ 2026-09-24 21:27 ` Vineet Gupta
0 siblings, 0 replies; 18+ messages in thread
From: Vineet Gupta @ 2026-09-24 21:27 UTC (permalink / raw)
To: Bradley Morgan, Vineet Gupta, kernel test robot
Cc: oe-kbuild-all, linux-snps-arc, Paul E. McKenney
On 9/24/26 13:58, Bradley Morgan wrote:
> On 24 September 2026 21:52:55 BST, Vineet Gupta <vgupta@kernel.org> wrote:
>> On 9/24/26 00:51, kernel test robot wrote:
>>> tree: https://github.com/paulmckrcu/linux cmpxchg2.2026.09.22a
>>> head: 54c282c15475ebfae4712fe3ab637c9d19c723d6
>>> commit: b6d4f6af38f85e7948fd64f9bf09cbb858b4dade [25/28] ARC: Emulate
>> two-byte cmpxchg
>>> config: arc-allyesconfig
>> (https://download.01.org/0day-ci/archive/20260924/202609241517.SSV1Goz3-lkp@intel.com/config)
>>> compiler: arc-linux-gcc (GCC) 16.1.0
>>> reproduce (this is a W=1 build):
>> (https://download.01.org/0day-ci/archive/20260924/202609241517.SSV1Goz3-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@intel.com>
>>> | Closes:
>> https://lore.kernel.org/oe-kbuild-all/202609241517.SSV1Goz3-lkp@intel.com/
>>> All errors (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 include/asm-generic/div64.h:55,
>>> from ./arch/arc/include/generated/asm/div64.h:1,
>>> from include/linux/math.h:6,
>>> from include/linux/math64.h:6,
>>> from include/linux/time.h:6,
>>> from include/linux/stat.h:19,
>>> from include/linux/fs_dirent.h:5,
>>> from include/linux/fs/super_types.h:5,
>>> from include/linux/fs/super.h:5,
>>> from include/linux/fs.h:5,
>>> from include/linux/fscrypt.h:16,
>>> from fs/crypto/fscrypt_private.h:15,
>>> from fs/crypto/hooks.c:10:
>>> fs/crypto/hooks.c: In function 'fscrypt_get_symlink':
>>>>> arch/arc/include/asm/cmpxchg.h:46:58: error: pointer type mismatch in
>> conditional expression [-Wincompatible-pointer-types]
>>> 46 | unsigned long _new_ = (unsigned long)(0 ? *(_p_) :
>> (new)); \
>>
>> Issue is in fs/crypto/hooks.c doing cmpxchg_release(&inode->i_link, NULL,
>> pstr.name)
>> where i_link is char * and pstr.name is unsigned char *),
>>
>> The problem is when pointer types are incompatible and that's exactly the
>> W toggle above.
>>
>> So Bradley's patch needs this fixup
>>
>> diff --git a/arch/arc/include/asm/cmpxchg.h b/arch/arc/include/asm/cmpxchg.h
>> index 4596edfefa95..9053098bb152 100644
>> --- a/arch/arc/include/asm/cmpxchg.h
>> +++ b/arch/arc/include/asm/cmpxchg.h
>> @@ -42,8 +42,10 @@
>> #define arch_cmpxchg_relaxed(ptr, old, new) \
>> ({ \
>> __typeof__(ptr) _p_ = (ptr); \
>> - unsigned long _old_ = (unsigned long)(0 ? *(_p_) : (old)); \
>> - unsigned long _new_ = (unsigned long)(0 ? *(_p_) : (new)); \
>> + __typeof__(*(ptr)) _o_ = (old); \
>> + __typeof__(*(ptr)) _n_ = (new); \
>> + unsigned long _old_ = (unsigned long)_o_; \
>> + unsigned long _new_ = (unsigned long)_n_; \
>>
>> P.S: For arch changes shouldn't the submitter be required to at least test
>> the building, specially when this involves the macro maze. Its really easy
>> with crosstool hosting all the cross-compilers [1] - just download and
>> untar.
>>
>> [1]
>> https://mirrors.edge.kernel.org/pub/tools/crosstool/files/bin/x86_64/16.2.0/
> Well thanks but I didn't have a proper server till yesterday.
A relatively decent laptop works for me.
> I'll post all arch patches when Paul tells me how he wants it
Please do a minimal compile build - it will save you the re-spins.
> Like if he wants u16 in first then arch changes sent.
Sure !
Cheers,
-Vineet
_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [paulmckrcu:cmpxchg2.2026.09.22a 25/28] arch/arc/include/asm/cmpxchg.h:46:58: error: pointer type mismatch in conditional expression
2026-09-24 21:27 ` Vineet Gupta
@ 2026-09-29 20:47 ` Paul E. McKenney
-1 siblings, 0 replies; 18+ messages in thread
From: Paul E. McKenney @ 2026-09-29 20:47 UTC (permalink / raw)
To: Vineet Gupta
Cc: Bradley Morgan, Vineet Gupta, kernel test robot, oe-kbuild-all,
linux-snps-arc
On Thu, Sep 24, 2026 at 02:27:11PM -0700, Vineet Gupta wrote:
> On 9/24/26 13:58, Bradley Morgan wrote:
> > On 24 September 2026 21:52:55 BST, Vineet Gupta <vgupta@kernel.org> wrote:
> > > On 9/24/26 00:51, kernel test robot wrote:
> > > > tree: https://github.com/paulmckrcu/linux cmpxchg2.2026.09.22a
> > > > head: 54c282c15475ebfae4712fe3ab637c9d19c723d6
> > > > commit: b6d4f6af38f85e7948fd64f9bf09cbb858b4dade [25/28] ARC: Emulate
> > > two-byte cmpxchg
> > > > config: arc-allyesconfig
> > > (https://download.01.org/0day-ci/archive/20260924/202609241517.SSV1Goz3-lkp@intel.com/config)
> > > > compiler: arc-linux-gcc (GCC) 16.1.0
> > > > reproduce (this is a W=1 build):
> > > (https://download.01.org/0day-ci/archive/20260924/202609241517.SSV1Goz3-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@intel.com>
> > > > | Closes:
> > > https://lore.kernel.org/oe-kbuild-all/202609241517.SSV1Goz3-lkp@intel.com/
> > > > All errors (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 include/asm-generic/div64.h:55,
> > > > from ./arch/arc/include/generated/asm/div64.h:1,
> > > > from include/linux/math.h:6,
> > > > from include/linux/math64.h:6,
> > > > from include/linux/time.h:6,
> > > > from include/linux/stat.h:19,
> > > > from include/linux/fs_dirent.h:5,
> > > > from include/linux/fs/super_types.h:5,
> > > > from include/linux/fs/super.h:5,
> > > > from include/linux/fs.h:5,
> > > > from include/linux/fscrypt.h:16,
> > > > from fs/crypto/fscrypt_private.h:15,
> > > > from fs/crypto/hooks.c:10:
> > > > fs/crypto/hooks.c: In function 'fscrypt_get_symlink':
> > > > > > arch/arc/include/asm/cmpxchg.h:46:58: error: pointer type mismatch in
> > > conditional expression [-Wincompatible-pointer-types]
> > > > 46 | unsigned long _new_ = (unsigned long)(0 ? *(_p_) :
> > > (new)); \
> > >
> > > Issue is in fs/crypto/hooks.c doing cmpxchg_release(&inode->i_link, NULL,
> > > pstr.name)
> > > where i_link is char * and pstr.name is unsigned char *),
> > >
> > > The problem is when pointer types are incompatible and that's exactly the
> > > W toggle above.
> > >
> > > So Bradley's patch needs this fixup
> > >
> > > diff --git a/arch/arc/include/asm/cmpxchg.h b/arch/arc/include/asm/cmpxchg.h
> > > index 4596edfefa95..9053098bb152 100644
> > > --- a/arch/arc/include/asm/cmpxchg.h
> > > +++ b/arch/arc/include/asm/cmpxchg.h
> > > @@ -42,8 +42,10 @@
> > > #define arch_cmpxchg_relaxed(ptr, old, new) \
> > > ({ \
> > > __typeof__(ptr) _p_ = (ptr); \
> > > - unsigned long _old_ = (unsigned long)(0 ? *(_p_) : (old)); \
> > > - unsigned long _new_ = (unsigned long)(0 ? *(_p_) : (new)); \
> > > + __typeof__(*(ptr)) _o_ = (old); \
> > > + __typeof__(*(ptr)) _n_ = (new); \
> > > + unsigned long _old_ = (unsigned long)_o_; \
> > > + unsigned long _new_ = (unsigned long)_n_; \
> > >
> > > P.S: For arch changes shouldn't the submitter be required to at least test
> > > the building, specially when this involves the macro maze. Its really easy
> > > with crosstool hosting all the cross-compilers [1] - just download and
> > > untar.
> > >
> > > [1]
> > > https://mirrors.edge.kernel.org/pub/tools/crosstool/files/bin/x86_64/16.2.0/
> > Well thanks but I didn't have a proper server till yesterday.
>
> A relatively decent laptop works for me.
And you will get *way* faster response time than waiting on kernel
test robot. ;-)
> > I'll post all arch patches when Paul tells me how he wants it
>
> Please do a minimal compile build - it will save you the re-spins.
>
> > Like if he wants u16 in first then arch changes sent.
First, I queued Vineet's cmpxchg patch from his pull request to Linus.
I have marked it "EXP" so that I don't accidentally ship it off somewhere
myself.
Given the surprises from the u8/u16 changes, I suggest the following:
1. One patch to add cmpxchg_emu_u16(), but without the u8/u16
changes. And without the CONFIG_ARCH_NEED_CMPXCHG_1_2_EMU
change.
At Bradley's option, cmpxchg_emu_u8() could remain as is, with
cmpxchg_emu_u16() being born as u16. The upside is less churn
later. The downside is that more up-front testing is needed,
and thus greater interaction with busy architecture maintainers.
If it was me, I would start with cmpxchg_emu_u16() being as
close to cmpxchg_emu_u8() as possible in order to "get the
camel's nose into the tent" as quickly and easily as possible.
But this is Bradley's patch series, so his choice.
2. One patch each to add use of cmpxchg_emu_u16() to each
affected architecture.
3. Given #1, each patch for #2 can go in independently. The patches
for #2 of course need acks from their respective maintainers.
4. A patch to rename CONFIG_ARCH_NEED_CMPXCHG_1_EMU to
CONFIG_ARCH_NEED_CMPXCHG_1_2_EMU. This will cross lib and
architectures, which should be OK because it is just a name
change. We collect acks as before.
5. Convert cmpxchg_emu_u8() away from uintptr_t, and, if needed,
cmpxchg_emu_u16() as well.
This could take a merge window or three to get in, but that is not all
that bad for cross-architecture patch serieses such as this one.
Bradley, Vineet, thoughts?
Thanx, Paul
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [paulmckrcu:cmpxchg2.2026.09.22a 25/28] arch/arc/include/asm/cmpxchg.h:46:58: error: pointer type mismatch in conditional expression
@ 2026-09-29 20:47 ` Paul E. McKenney
0 siblings, 0 replies; 18+ messages in thread
From: Paul E. McKenney @ 2026-09-29 20:47 UTC (permalink / raw)
To: Vineet Gupta
Cc: Bradley Morgan, Vineet Gupta, kernel test robot, oe-kbuild-all,
linux-snps-arc
On Thu, Sep 24, 2026 at 02:27:11PM -0700, Vineet Gupta wrote:
> On 9/24/26 13:58, Bradley Morgan wrote:
> > On 24 September 2026 21:52:55 BST, Vineet Gupta <vgupta@kernel.org> wrote:
> > > On 9/24/26 00:51, kernel test robot wrote:
> > > > tree: https://github.com/paulmckrcu/linux cmpxchg2.2026.09.22a
> > > > head: 54c282c15475ebfae4712fe3ab637c9d19c723d6
> > > > commit: b6d4f6af38f85e7948fd64f9bf09cbb858b4dade [25/28] ARC: Emulate
> > > two-byte cmpxchg
> > > > config: arc-allyesconfig
> > > (https://download.01.org/0day-ci/archive/20260924/202609241517.SSV1Goz3-lkp@intel.com/config)
> > > > compiler: arc-linux-gcc (GCC) 16.1.0
> > > > reproduce (this is a W=1 build):
> > > (https://download.01.org/0day-ci/archive/20260924/202609241517.SSV1Goz3-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@intel.com>
> > > > | Closes:
> > > https://lore.kernel.org/oe-kbuild-all/202609241517.SSV1Goz3-lkp@intel.com/
> > > > All errors (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 include/asm-generic/div64.h:55,
> > > > from ./arch/arc/include/generated/asm/div64.h:1,
> > > > from include/linux/math.h:6,
> > > > from include/linux/math64.h:6,
> > > > from include/linux/time.h:6,
> > > > from include/linux/stat.h:19,
> > > > from include/linux/fs_dirent.h:5,
> > > > from include/linux/fs/super_types.h:5,
> > > > from include/linux/fs/super.h:5,
> > > > from include/linux/fs.h:5,
> > > > from include/linux/fscrypt.h:16,
> > > > from fs/crypto/fscrypt_private.h:15,
> > > > from fs/crypto/hooks.c:10:
> > > > fs/crypto/hooks.c: In function 'fscrypt_get_symlink':
> > > > > > arch/arc/include/asm/cmpxchg.h:46:58: error: pointer type mismatch in
> > > conditional expression [-Wincompatible-pointer-types]
> > > > 46 | unsigned long _new_ = (unsigned long)(0 ? *(_p_) :
> > > (new)); \
> > >
> > > Issue is in fs/crypto/hooks.c doing cmpxchg_release(&inode->i_link, NULL,
> > > pstr.name)
> > > where i_link is char * and pstr.name is unsigned char *),
> > >
> > > The problem is when pointer types are incompatible and that's exactly the
> > > W toggle above.
> > >
> > > So Bradley's patch needs this fixup
> > >
> > > diff --git a/arch/arc/include/asm/cmpxchg.h b/arch/arc/include/asm/cmpxchg.h
> > > index 4596edfefa95..9053098bb152 100644
> > > --- a/arch/arc/include/asm/cmpxchg.h
> > > +++ b/arch/arc/include/asm/cmpxchg.h
> > > @@ -42,8 +42,10 @@
> > > #define arch_cmpxchg_relaxed(ptr, old, new) \
> > > ({ \
> > > __typeof__(ptr) _p_ = (ptr); \
> > > - unsigned long _old_ = (unsigned long)(0 ? *(_p_) : (old)); \
> > > - unsigned long _new_ = (unsigned long)(0 ? *(_p_) : (new)); \
> > > + __typeof__(*(ptr)) _o_ = (old); \
> > > + __typeof__(*(ptr)) _n_ = (new); \
> > > + unsigned long _old_ = (unsigned long)_o_; \
> > > + unsigned long _new_ = (unsigned long)_n_; \
> > >
> > > P.S: For arch changes shouldn't the submitter be required to at least test
> > > the building, specially when this involves the macro maze. Its really easy
> > > with crosstool hosting all the cross-compilers [1] - just download and
> > > untar.
> > >
> > > [1]
> > > https://mirrors.edge.kernel.org/pub/tools/crosstool/files/bin/x86_64/16.2.0/
> > Well thanks but I didn't have a proper server till yesterday.
>
> A relatively decent laptop works for me.
And you will get *way* faster response time than waiting on kernel
test robot. ;-)
> > I'll post all arch patches when Paul tells me how he wants it
>
> Please do a minimal compile build - it will save you the re-spins.
>
> > Like if he wants u16 in first then arch changes sent.
First, I queued Vineet's cmpxchg patch from his pull request to Linus.
I have marked it "EXP" so that I don't accidentally ship it off somewhere
myself.
Given the surprises from the u8/u16 changes, I suggest the following:
1. One patch to add cmpxchg_emu_u16(), but without the u8/u16
changes. And without the CONFIG_ARCH_NEED_CMPXCHG_1_2_EMU
change.
At Bradley's option, cmpxchg_emu_u8() could remain as is, with
cmpxchg_emu_u16() being born as u16. The upside is less churn
later. The downside is that more up-front testing is needed,
and thus greater interaction with busy architecture maintainers.
If it was me, I would start with cmpxchg_emu_u16() being as
close to cmpxchg_emu_u8() as possible in order to "get the
camel's nose into the tent" as quickly and easily as possible.
But this is Bradley's patch series, so his choice.
2. One patch each to add use of cmpxchg_emu_u16() to each
affected architecture.
3. Given #1, each patch for #2 can go in independently. The patches
for #2 of course need acks from their respective maintainers.
4. A patch to rename CONFIG_ARCH_NEED_CMPXCHG_1_EMU to
CONFIG_ARCH_NEED_CMPXCHG_1_2_EMU. This will cross lib and
architectures, which should be OK because it is just a name
change. We collect acks as before.
5. Convert cmpxchg_emu_u8() away from uintptr_t, and, if needed,
cmpxchg_emu_u16() as well.
This could take a merge window or three to get in, but that is not all
that bad for cross-architecture patch serieses such as this one.
Bradley, Vineet, thoughts?
Thanx, Paul
_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [paulmckrcu:cmpxchg2.2026.09.22a 25/28] arch/arc/include/asm/cmpxchg.h:46:58: error: pointer type mismatch in conditional expression
2026-09-29 20:47 ` Paul E. McKenney
@ 2026-09-29 22:10 ` Vineet Gupta
-1 siblings, 0 replies; 18+ messages in thread
From: Vineet Gupta @ 2026-09-29 22:10 UTC (permalink / raw)
To: paulmck
Cc: Bradley Morgan, Vineet Gupta, kernel test robot, oe-kbuild-all,
linux-snps-arc
On 9/29/26 13:47, Paul E. McKenney wrote:
> On Thu, Sep 24, 2026 at 02:27:11PM -0700, Vineet Gupta wrote:
>> On 9/24/26 13:58, Bradley Morgan wrote:
>>> On 24 September 2026 21:52:55 BST, Vineet Gupta <vgupta@kernel.org> wrote:
>>>> On 9/24/26 00:51, kernel test robot wrote:
>>>>> tree: https://github.com/paulmckrcu/linux cmpxchg2.2026.09.22a
>>>>> head: 54c282c15475ebfae4712fe3ab637c9d19c723d6
>>>>> commit: b6d4f6af38f85e7948fd64f9bf09cbb858b4dade [25/28] ARC: Emulate
>>>> two-byte cmpxchg
>>>>> config: arc-allyesconfig
>>>> (https://download.01.org/0day-ci/archive/20260924/202609241517.SSV1Goz3-lkp@intel.com/config)
>>>>> compiler: arc-linux-gcc (GCC) 16.1.0
>>>>> reproduce (this is a W=1 build):
>>>> (https://download.01.org/0day-ci/archive/20260924/202609241517.SSV1Goz3-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@intel.com>
>>>>> | Closes:
>>>> https://lore.kernel.org/oe-kbuild-all/202609241517.SSV1Goz3-lkp@intel.com/
>>>>> All errors (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 include/asm-generic/div64.h:55,
>>>>> from ./arch/arc/include/generated/asm/div64.h:1,
>>>>> from include/linux/math.h:6,
>>>>> from include/linux/math64.h:6,
>>>>> from include/linux/time.h:6,
>>>>> from include/linux/stat.h:19,
>>>>> from include/linux/fs_dirent.h:5,
>>>>> from include/linux/fs/super_types.h:5,
>>>>> from include/linux/fs/super.h:5,
>>>>> from include/linux/fs.h:5,
>>>>> from include/linux/fscrypt.h:16,
>>>>> from fs/crypto/fscrypt_private.h:15,
>>>>> from fs/crypto/hooks.c:10:
>>>>> fs/crypto/hooks.c: In function 'fscrypt_get_symlink':
>>>>>>> arch/arc/include/asm/cmpxchg.h:46:58: error: pointer type mismatch in
>>>> conditional expression [-Wincompatible-pointer-types]
>>>>> 46 | unsigned long _new_ = (unsigned long)(0 ? *(_p_) :
>>>> (new)); \
>>>>
>>>> Issue is in fs/crypto/hooks.c doing cmpxchg_release(&inode->i_link, NULL,
>>>> pstr.name)
>>>> where i_link is char * and pstr.name is unsigned char *),
>>>>
>>>> The problem is when pointer types are incompatible and that's exactly the
>>>> W toggle above.
>>>>
>>>> So Bradley's patch needs this fixup
>>>>
>>>> diff --git a/arch/arc/include/asm/cmpxchg.h b/arch/arc/include/asm/cmpxchg.h
>>>> index 4596edfefa95..9053098bb152 100644
>>>> --- a/arch/arc/include/asm/cmpxchg.h
>>>> +++ b/arch/arc/include/asm/cmpxchg.h
>>>> @@ -42,8 +42,10 @@
>>>> #define arch_cmpxchg_relaxed(ptr, old, new) \
>>>> ({ \
>>>> __typeof__(ptr) _p_ = (ptr); \
>>>> - unsigned long _old_ = (unsigned long)(0 ? *(_p_) : (old)); \
>>>> - unsigned long _new_ = (unsigned long)(0 ? *(_p_) : (new)); \
>>>> + __typeof__(*(ptr)) _o_ = (old); \
>>>> + __typeof__(*(ptr)) _n_ = (new); \
>>>> + unsigned long _old_ = (unsigned long)_o_; \
>>>> + unsigned long _new_ = (unsigned long)_n_; \
>>>>
>>>> P.S: For arch changes shouldn't the submitter be required to at least test
>>>> the building, specially when this involves the macro maze. Its really easy
>>>> with crosstool hosting all the cross-compilers [1] - just download and
>>>> untar.
>>>>
>>>> [1]
>>>> https://mirrors.edge.kernel.org/pub/tools/crosstool/files/bin/x86_64/16.2.0/
>>> Well thanks but I didn't have a proper server till yesterday.
>> A relatively decent laptop works for me.
> And you will get *way* faster response time than waiting on kernel
> test robot. ;-)
>
>>> I'll post all arch patches when Paul tells me how he wants it
>> Please do a minimal compile build - it will save you the re-spins.
>>
>>> Like if he wants u16 in first then arch changes sent.
> First, I queued Vineet's cmpxchg patch from his pull request to Linus.
> I have marked it "EXP" so that I don't accidentally ship it off somewhere
> myself.
>
> Given the surprises from the u8/u16 changes, I suggest the following:
>
> 1. One patch to add cmpxchg_emu_u16(), but without the u8/u16
> changes. And without the CONFIG_ARCH_NEED_CMPXCHG_1_2_EMU
> change.
>
> At Bradley's option, cmpxchg_emu_u8() could remain as is, with
> cmpxchg_emu_u16() being born as u16. The upside is less churn
> later. The downside is that more up-front testing is needed,
> and thus greater interaction with busy architecture maintainers.
> If it was me, I would start with cmpxchg_emu_u16() being as
> close to cmpxchg_emu_u8() as possible in order to "get the
> camel's nose into the tent" as quickly and easily as possible.
> But this is Bradley's patch series, so his choice.
>
> 2. One patch each to add use of cmpxchg_emu_u16() to each
> affected architecture.
>
> 3. Given #1, each patch for #2 can go in independently. The patches
> for #2 of course need acks from their respective maintainers.
>
> 4. A patch to rename CONFIG_ARCH_NEED_CMPXCHG_1_EMU to
> CONFIG_ARCH_NEED_CMPXCHG_1_2_EMU. This will cross lib and
> architectures, which should be OK because it is just a name
> change. We collect acks as before.
>
> 5. Convert cmpxchg_emu_u8() away from uintptr_t, and, if needed,
> cmpxchg_emu_u16() as well.
>
> This could take a merge window or three to get in, but that is not all
> that bad for cross-architecture patch serieses such as this one.
>
> Bradley, Vineet, thoughts?
Sound like a plan, buy hey its Bradley doing all the work here ;-)
I would only add something I mentioned before: download the cross
toolchains and do some build testing locally before posting. This is not
because arch maintainers are busy or lazy (although they can be both) -
that saves potential respins induced by new code or even broken existing
code exposed.
And on that topic I just found a gcc 16 ICE when building an
allyesconfig for ARC. I will only be able to post the gcc fix after LPC,
but just FYI in case someone runs into it.
Thx,
-Vineet
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [paulmckrcu:cmpxchg2.2026.09.22a 25/28] arch/arc/include/asm/cmpxchg.h:46:58: error: pointer type mismatch in conditional expression
@ 2026-09-29 22:10 ` Vineet Gupta
0 siblings, 0 replies; 18+ messages in thread
From: Vineet Gupta @ 2026-09-29 22:10 UTC (permalink / raw)
To: paulmck
Cc: Bradley Morgan, Vineet Gupta, kernel test robot, oe-kbuild-all,
linux-snps-arc
On 9/29/26 13:47, Paul E. McKenney wrote:
> On Thu, Sep 24, 2026 at 02:27:11PM -0700, Vineet Gupta wrote:
>> On 9/24/26 13:58, Bradley Morgan wrote:
>>> On 24 September 2026 21:52:55 BST, Vineet Gupta <vgupta@kernel.org> wrote:
>>>> On 9/24/26 00:51, kernel test robot wrote:
>>>>> tree: https://github.com/paulmckrcu/linux cmpxchg2.2026.09.22a
>>>>> head: 54c282c15475ebfae4712fe3ab637c9d19c723d6
>>>>> commit: b6d4f6af38f85e7948fd64f9bf09cbb858b4dade [25/28] ARC: Emulate
>>>> two-byte cmpxchg
>>>>> config: arc-allyesconfig
>>>> (https://download.01.org/0day-ci/archive/20260924/202609241517.SSV1Goz3-lkp@intel.com/config)
>>>>> compiler: arc-linux-gcc (GCC) 16.1.0
>>>>> reproduce (this is a W=1 build):
>>>> (https://download.01.org/0day-ci/archive/20260924/202609241517.SSV1Goz3-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@intel.com>
>>>>> | Closes:
>>>> https://lore.kernel.org/oe-kbuild-all/202609241517.SSV1Goz3-lkp@intel.com/
>>>>> All errors (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 include/asm-generic/div64.h:55,
>>>>> from ./arch/arc/include/generated/asm/div64.h:1,
>>>>> from include/linux/math.h:6,
>>>>> from include/linux/math64.h:6,
>>>>> from include/linux/time.h:6,
>>>>> from include/linux/stat.h:19,
>>>>> from include/linux/fs_dirent.h:5,
>>>>> from include/linux/fs/super_types.h:5,
>>>>> from include/linux/fs/super.h:5,
>>>>> from include/linux/fs.h:5,
>>>>> from include/linux/fscrypt.h:16,
>>>>> from fs/crypto/fscrypt_private.h:15,
>>>>> from fs/crypto/hooks.c:10:
>>>>> fs/crypto/hooks.c: In function 'fscrypt_get_symlink':
>>>>>>> arch/arc/include/asm/cmpxchg.h:46:58: error: pointer type mismatch in
>>>> conditional expression [-Wincompatible-pointer-types]
>>>>> 46 | unsigned long _new_ = (unsigned long)(0 ? *(_p_) :
>>>> (new)); \
>>>>
>>>> Issue is in fs/crypto/hooks.c doing cmpxchg_release(&inode->i_link, NULL,
>>>> pstr.name)
>>>> where i_link is char * and pstr.name is unsigned char *),
>>>>
>>>> The problem is when pointer types are incompatible and that's exactly the
>>>> W toggle above.
>>>>
>>>> So Bradley's patch needs this fixup
>>>>
>>>> diff --git a/arch/arc/include/asm/cmpxchg.h b/arch/arc/include/asm/cmpxchg.h
>>>> index 4596edfefa95..9053098bb152 100644
>>>> --- a/arch/arc/include/asm/cmpxchg.h
>>>> +++ b/arch/arc/include/asm/cmpxchg.h
>>>> @@ -42,8 +42,10 @@
>>>> #define arch_cmpxchg_relaxed(ptr, old, new) \
>>>> ({ \
>>>> __typeof__(ptr) _p_ = (ptr); \
>>>> - unsigned long _old_ = (unsigned long)(0 ? *(_p_) : (old)); \
>>>> - unsigned long _new_ = (unsigned long)(0 ? *(_p_) : (new)); \
>>>> + __typeof__(*(ptr)) _o_ = (old); \
>>>> + __typeof__(*(ptr)) _n_ = (new); \
>>>> + unsigned long _old_ = (unsigned long)_o_; \
>>>> + unsigned long _new_ = (unsigned long)_n_; \
>>>>
>>>> P.S: For arch changes shouldn't the submitter be required to at least test
>>>> the building, specially when this involves the macro maze. Its really easy
>>>> with crosstool hosting all the cross-compilers [1] - just download and
>>>> untar.
>>>>
>>>> [1]
>>>> https://mirrors.edge.kernel.org/pub/tools/crosstool/files/bin/x86_64/16.2.0/
>>> Well thanks but I didn't have a proper server till yesterday.
>> A relatively decent laptop works for me.
> And you will get *way* faster response time than waiting on kernel
> test robot. ;-)
>
>>> I'll post all arch patches when Paul tells me how he wants it
>> Please do a minimal compile build - it will save you the re-spins.
>>
>>> Like if he wants u16 in first then arch changes sent.
> First, I queued Vineet's cmpxchg patch from his pull request to Linus.
> I have marked it "EXP" so that I don't accidentally ship it off somewhere
> myself.
>
> Given the surprises from the u8/u16 changes, I suggest the following:
>
> 1. One patch to add cmpxchg_emu_u16(), but without the u8/u16
> changes. And without the CONFIG_ARCH_NEED_CMPXCHG_1_2_EMU
> change.
>
> At Bradley's option, cmpxchg_emu_u8() could remain as is, with
> cmpxchg_emu_u16() being born as u16. The upside is less churn
> later. The downside is that more up-front testing is needed,
> and thus greater interaction with busy architecture maintainers.
> If it was me, I would start with cmpxchg_emu_u16() being as
> close to cmpxchg_emu_u8() as possible in order to "get the
> camel's nose into the tent" as quickly and easily as possible.
> But this is Bradley's patch series, so his choice.
>
> 2. One patch each to add use of cmpxchg_emu_u16() to each
> affected architecture.
>
> 3. Given #1, each patch for #2 can go in independently. The patches
> for #2 of course need acks from their respective maintainers.
>
> 4. A patch to rename CONFIG_ARCH_NEED_CMPXCHG_1_EMU to
> CONFIG_ARCH_NEED_CMPXCHG_1_2_EMU. This will cross lib and
> architectures, which should be OK because it is just a name
> change. We collect acks as before.
>
> 5. Convert cmpxchg_emu_u8() away from uintptr_t, and, if needed,
> cmpxchg_emu_u16() as well.
>
> This could take a merge window or three to get in, but that is not all
> that bad for cross-architecture patch serieses such as this one.
>
> Bradley, Vineet, thoughts?
Sound like a plan, buy hey its Bradley doing all the work here ;-)
I would only add something I mentioned before: download the cross
toolchains and do some build testing locally before posting. This is not
because arch maintainers are busy or lazy (although they can be both) -
that saves potential respins induced by new code or even broken existing
code exposed.
And on that topic I just found a gcc 16 ICE when building an
allyesconfig for ARC. I will only be able to post the gcc fix after LPC,
but just FYI in case someone runs into it.
Thx,
-Vineet
_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [paulmckrcu:cmpxchg2.2026.09.22a 25/28] arch/arc/include/asm/cmpxchg.h:46:58: error: pointer type mismatch in conditional expression
2026-09-29 22:10 ` Vineet Gupta
@ 2026-09-30 6:39 ` Bradley Morgan
-1 siblings, 0 replies; 18+ messages in thread
From: Bradley Morgan @ 2026-09-30 6:39 UTC (permalink / raw)
To: Vineet Gupta, paulmck; +Cc: kernel test robot, oe-kbuild-all, linux-snps-arc
On 29 September 2026 23:10:01 BST, Vineet Gupta <vgupta@kernel.org> wrote:
>
>
>On 9/29/26 13:47, Paul E. McKenney wrote:
>> On Thu, Sep 24, 2026 at 02:27:11PM -0700, Vineet Gupta wrote:
>>> On 9/24/26 13:58, Bradley Morgan wrote:
>>>> On 24 September 2026 21:52:55 BST, Vineet Gupta <vgupta@kernel.org>
>wrote:
>>>>> On 9/24/26 00:51, kernel test robot wrote:
>>>>>> tree: https://github.com/paulmckrcu/linux cmpxchg2.2026.09.22a
>>>>>> head: 54c282c15475ebfae4712fe3ab637c9d19c723d6
>>>>>> commit: b6d4f6af38f85e7948fd64f9bf09cbb858b4dade [25/28] ARC:
>Emulate
>>>>> two-byte cmpxchg
>>>>>> config: arc-allyesconfig
>>>>>
>(https://download.01.org/0day-ci/archive/20260924/202609241517.SSV1Goz3-lkp@intel.com/config)
>>>>>> compiler: arc-linux-gcc (GCC) 16.1.0
>>>>>> reproduce (this is a W=1 build):
>>>>>
>(https://download.01.org/0day-ci/archive/20260924/202609241517.SSV1Goz3-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@intel.com>
>>>>>> | Closes:
>>>>>
>https://lore.kernel.org/oe-kbuild-all/202609241517.SSV1Goz3-lkp@intel.com/
>>>>>> All errors (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 include/asm-generic/div64.h:55,
>>>>>> from
>./arch/arc/include/generated/asm/div64.h:1,
>>>>>> from include/linux/math.h:6,
>>>>>> from include/linux/math64.h:6,
>>>>>> from include/linux/time.h:6,
>>>>>> from include/linux/stat.h:19,
>>>>>> from include/linux/fs_dirent.h:5,
>>>>>> from include/linux/fs/super_types.h:5,
>>>>>> from include/linux/fs/super.h:5,
>>>>>> from include/linux/fs.h:5,
>>>>>> from include/linux/fscrypt.h:16,
>>>>>> from fs/crypto/fscrypt_private.h:15,
>>>>>> from fs/crypto/hooks.c:10:
>>>>>> fs/crypto/hooks.c: In function 'fscrypt_get_symlink':
>>>>>>>> arch/arc/include/asm/cmpxchg.h:46:58: error: pointer type mismatch
>in
>>>>> conditional expression [-Wincompatible-pointer-types]
>>>>>> 46 | unsigned long _new_ = (unsigned long)(0 ?
>*(_p_) :
>>>>> (new)); \
>>>>>
>>>>> Issue is in fs/crypto/hooks.c doing cmpxchg_release(&inode->i_link,
>NULL,
>>>>> pstr.name)
>>>>> where i_link is char * and pstr.name is unsigned char *),
>>>>>
>>>>> The problem is when pointer types are incompatible and that's exactly
>the
>>>>> W toggle above.
>>>>>
>>>>> So Bradley's patch needs this fixup
>>>>>
>>>>> diff --git a/arch/arc/include/asm/cmpxchg.h
>b/arch/arc/include/asm/cmpxchg.h
>>>>> index 4596edfefa95..9053098bb152 100644
>>>>> --- a/arch/arc/include/asm/cmpxchg.h
>>>>> +++ b/arch/arc/include/asm/cmpxchg.h
>>>>> @@ -42,8 +42,10 @@
>>>>> #define arch_cmpxchg_relaxed(ptr, old, new) \
>>>>> ({ \
>>>>> __typeof__(ptr) _p_ = (ptr); \
>>>>> - unsigned long _old_ = (unsigned long)(0 ? *(_p_) : (old));
> \
>>>>> - unsigned long _new_ = (unsigned long)(0 ? *(_p_) : (new));
> \
>>>>> + __typeof__(*(ptr)) _o_ = (old); \
>>>>> + __typeof__(*(ptr)) _n_ = (new); \
>>>>> + unsigned long _old_ = (unsigned long)_o_; \
>>>>> + unsigned long _new_ = (unsigned long)_n_; \
>>>>>
>>>>> P.S: For arch changes shouldn't the submitter be required to at least
>test
>>>>> the building, specially when this involves the macro maze. Its really
>easy
>>>>> with crosstool hosting all the cross-compilers [1] - just download
>and
>>>>> untar.
>>>>>
>>>>> [1]
>>>>>
>https://mirrors.edge.kernel.org/pub/tools/crosstool/files/bin/x86_64/16.2.0/
>>>> Well thanks but I didn't have a proper server till yesterday.
>>> A relatively decent laptop works for me.
>> And you will get *way* faster response time than waiting on kernel
>> test robot. ;-)
>>
>>>> I'll post all arch patches when Paul tells me how he wants it
>>> Please do a minimal compile build - it will save you the re-spins.
>>>
>>>> Like if he wants u16 in first then arch changes sent.
>> First, I queued Vineet's cmpxchg patch from his pull request to Linus.
>> I have marked it "EXP" so that I don't accidentally ship it off
>somewhere
>> myself.
>>
>> Given the surprises from the u8/u16 changes, I suggest the following:
>>
>> 1. One patch to add cmpxchg_emu_u16(), but without the u8/u16
>> changes. And without the CONFIG_ARCH_NEED_CMPXCHG_1_2_EMU
>> change.
>>
>> At Bradley's option, cmpxchg_emu_u8() could remain as is, with
>> cmpxchg_emu_u16() being born as u16. The upside is less churn
>> later. The downside is that more up-front testing is needed,
>> and thus greater interaction with busy architecture maintainers.
>> If it was me, I would start with cmpxchg_emu_u16() being as
>> close to cmpxchg_emu_u8() as possible in order to "get the
>> camel's nose into the tent" as quickly and easily as possible.
>> But this is Bradley's patch series, so his choice.
>>
>> 2. One patch each to add use of cmpxchg_emu_u16() to each
>> affected architecture.
>>
>> 3. Given #1, each patch for #2 can go in independently. The patches
>> for #2 of course need acks from their respective maintainers.
>>
>> 4. A patch to rename CONFIG_ARCH_NEED_CMPXCHG_1_EMU to
>> CONFIG_ARCH_NEED_CMPXCHG_1_2_EMU. This will cross lib and
>> architectures, which should be OK because it is just a name
>> change. We collect acks as before.
>>
>> 5. Convert cmpxchg_emu_u8() away from uintptr_t, and, if needed,
>> cmpxchg_emu_u16() as well.
>>
>> This could take a merge window or three to get in, but that is not all
>> that bad for cross-architecture patch serieses such as this one.
>>
>> Bradley, Vineet, thoughts?
>
>Sound like a plan, buy hey its Bradley doing all the work here ;-)
Hmm, I'd prefer to leave u16 as is, I'll send the rename patch in the
coming hours/days, I have school
>I would only add something I mentioned before: download the cross
>toolchains and do some build testing locally before posting. This is not
>because arch maintainers are busy or lazy (although they can be both) -
>that saves potential respins induced by new code or even broken existing
>code exposed.
>
>And on that topic I just found a gcc 16 ICE when building an allyesconfig
>for ARC. I will only be able to post the gcc fix after LPC, but just FYI
>in case someone runs into it.
>
>Thx,
>-Vineet
>
--- Thanks!
"I'm not a very positive person" - Linus torvalds
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [paulmckrcu:cmpxchg2.2026.09.22a 25/28] arch/arc/include/asm/cmpxchg.h:46:58: error: pointer type mismatch in conditional expression
@ 2026-09-30 6:39 ` Bradley Morgan
0 siblings, 0 replies; 18+ messages in thread
From: Bradley Morgan @ 2026-09-30 6:39 UTC (permalink / raw)
To: Vineet Gupta, paulmck; +Cc: kernel test robot, oe-kbuild-all, linux-snps-arc
On 29 September 2026 23:10:01 BST, Vineet Gupta <vgupta@kernel.org> wrote:
>
>
>On 9/29/26 13:47, Paul E. McKenney wrote:
>> On Thu, Sep 24, 2026 at 02:27:11PM -0700, Vineet Gupta wrote:
>>> On 9/24/26 13:58, Bradley Morgan wrote:
>>>> On 24 September 2026 21:52:55 BST, Vineet Gupta <vgupta@kernel.org>
>wrote:
>>>>> On 9/24/26 00:51, kernel test robot wrote:
>>>>>> tree: https://github.com/paulmckrcu/linux cmpxchg2.2026.09.22a
>>>>>> head: 54c282c15475ebfae4712fe3ab637c9d19c723d6
>>>>>> commit: b6d4f6af38f85e7948fd64f9bf09cbb858b4dade [25/28] ARC:
>Emulate
>>>>> two-byte cmpxchg
>>>>>> config: arc-allyesconfig
>>>>>
>(https://download.01.org/0day-ci/archive/20260924/202609241517.SSV1Goz3-lkp@intel.com/config)
>>>>>> compiler: arc-linux-gcc (GCC) 16.1.0
>>>>>> reproduce (this is a W=1 build):
>>>>>
>(https://download.01.org/0day-ci/archive/20260924/202609241517.SSV1Goz3-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@intel.com>
>>>>>> | Closes:
>>>>>
>https://lore.kernel.org/oe-kbuild-all/202609241517.SSV1Goz3-lkp@intel.com/
>>>>>> All errors (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 include/asm-generic/div64.h:55,
>>>>>> from
>./arch/arc/include/generated/asm/div64.h:1,
>>>>>> from include/linux/math.h:6,
>>>>>> from include/linux/math64.h:6,
>>>>>> from include/linux/time.h:6,
>>>>>> from include/linux/stat.h:19,
>>>>>> from include/linux/fs_dirent.h:5,
>>>>>> from include/linux/fs/super_types.h:5,
>>>>>> from include/linux/fs/super.h:5,
>>>>>> from include/linux/fs.h:5,
>>>>>> from include/linux/fscrypt.h:16,
>>>>>> from fs/crypto/fscrypt_private.h:15,
>>>>>> from fs/crypto/hooks.c:10:
>>>>>> fs/crypto/hooks.c: In function 'fscrypt_get_symlink':
>>>>>>>> arch/arc/include/asm/cmpxchg.h:46:58: error: pointer type mismatch
>in
>>>>> conditional expression [-Wincompatible-pointer-types]
>>>>>> 46 | unsigned long _new_ = (unsigned long)(0 ?
>*(_p_) :
>>>>> (new)); \
>>>>>
>>>>> Issue is in fs/crypto/hooks.c doing cmpxchg_release(&inode->i_link,
>NULL,
>>>>> pstr.name)
>>>>> where i_link is char * and pstr.name is unsigned char *),
>>>>>
>>>>> The problem is when pointer types are incompatible and that's exactly
>the
>>>>> W toggle above.
>>>>>
>>>>> So Bradley's patch needs this fixup
>>>>>
>>>>> diff --git a/arch/arc/include/asm/cmpxchg.h
>b/arch/arc/include/asm/cmpxchg.h
>>>>> index 4596edfefa95..9053098bb152 100644
>>>>> --- a/arch/arc/include/asm/cmpxchg.h
>>>>> +++ b/arch/arc/include/asm/cmpxchg.h
>>>>> @@ -42,8 +42,10 @@
>>>>> #define arch_cmpxchg_relaxed(ptr, old, new) \
>>>>> ({ \
>>>>> __typeof__(ptr) _p_ = (ptr); \
>>>>> - unsigned long _old_ = (unsigned long)(0 ? *(_p_) : (old));
> \
>>>>> - unsigned long _new_ = (unsigned long)(0 ? *(_p_) : (new));
> \
>>>>> + __typeof__(*(ptr)) _o_ = (old); \
>>>>> + __typeof__(*(ptr)) _n_ = (new); \
>>>>> + unsigned long _old_ = (unsigned long)_o_; \
>>>>> + unsigned long _new_ = (unsigned long)_n_; \
>>>>>
>>>>> P.S: For arch changes shouldn't the submitter be required to at least
>test
>>>>> the building, specially when this involves the macro maze. Its really
>easy
>>>>> with crosstool hosting all the cross-compilers [1] - just download
>and
>>>>> untar.
>>>>>
>>>>> [1]
>>>>>
>https://mirrors.edge.kernel.org/pub/tools/crosstool/files/bin/x86_64/16.2.0/
>>>> Well thanks but I didn't have a proper server till yesterday.
>>> A relatively decent laptop works for me.
>> And you will get *way* faster response time than waiting on kernel
>> test robot. ;-)
>>
>>>> I'll post all arch patches when Paul tells me how he wants it
>>> Please do a minimal compile build - it will save you the re-spins.
>>>
>>>> Like if he wants u16 in first then arch changes sent.
>> First, I queued Vineet's cmpxchg patch from his pull request to Linus.
>> I have marked it "EXP" so that I don't accidentally ship it off
>somewhere
>> myself.
>>
>> Given the surprises from the u8/u16 changes, I suggest the following:
>>
>> 1. One patch to add cmpxchg_emu_u16(), but without the u8/u16
>> changes. And without the CONFIG_ARCH_NEED_CMPXCHG_1_2_EMU
>> change.
>>
>> At Bradley's option, cmpxchg_emu_u8() could remain as is, with
>> cmpxchg_emu_u16() being born as u16. The upside is less churn
>> later. The downside is that more up-front testing is needed,
>> and thus greater interaction with busy architecture maintainers.
>> If it was me, I would start with cmpxchg_emu_u16() being as
>> close to cmpxchg_emu_u8() as possible in order to "get the
>> camel's nose into the tent" as quickly and easily as possible.
>> But this is Bradley's patch series, so his choice.
>>
>> 2. One patch each to add use of cmpxchg_emu_u16() to each
>> affected architecture.
>>
>> 3. Given #1, each patch for #2 can go in independently. The patches
>> for #2 of course need acks from their respective maintainers.
>>
>> 4. A patch to rename CONFIG_ARCH_NEED_CMPXCHG_1_EMU to
>> CONFIG_ARCH_NEED_CMPXCHG_1_2_EMU. This will cross lib and
>> architectures, which should be OK because it is just a name
>> change. We collect acks as before.
>>
>> 5. Convert cmpxchg_emu_u8() away from uintptr_t, and, if needed,
>> cmpxchg_emu_u16() as well.
>>
>> This could take a merge window or three to get in, but that is not all
>> that bad for cross-architecture patch serieses such as this one.
>>
>> Bradley, Vineet, thoughts?
>
>Sound like a plan, buy hey its Bradley doing all the work here ;-)
Hmm, I'd prefer to leave u16 as is, I'll send the rename patch in the
coming hours/days, I have school
>I would only add something I mentioned before: download the cross
>toolchains and do some build testing locally before posting. This is not
>because arch maintainers are busy or lazy (although they can be both) -
>that saves potential respins induced by new code or even broken existing
>code exposed.
>
>And on that topic I just found a gcc 16 ICE when building an allyesconfig
>for ARC. I will only be able to post the gcc fix after LPC, but just FYI
>in case someone runs into it.
>
>Thx,
>-Vineet
>
--- Thanks!
"I'm not a very positive person" - Linus torvalds
_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [paulmckrcu:cmpxchg2.2026.09.22a 25/28] arch/arc/include/asm/cmpxchg.h:46:58: error: pointer type mismatch in conditional expression
2026-09-29 22:10 ` Vineet Gupta
@ 2026-09-30 17:55 ` Paul E. McKenney
-1 siblings, 0 replies; 18+ messages in thread
From: Paul E. McKenney @ 2026-09-30 17:55 UTC (permalink / raw)
To: Vineet Gupta
Cc: Bradley Morgan, kernel test robot, oe-kbuild-all, linux-snps-arc
On Tue, Sep 29, 2026 at 03:10:01PM -0700, Vineet Gupta wrote:
>
>
> On 9/29/26 13:47, Paul E. McKenney wrote:
> > On Thu, Sep 24, 2026 at 02:27:11PM -0700, Vineet Gupta wrote:
> > > On 9/24/26 13:58, Bradley Morgan wrote:
> > > > On 24 September 2026 21:52:55 BST, Vineet Gupta <vgupta@kernel.org> wrote:
> > > > > On 9/24/26 00:51, kernel test robot wrote:
> > > > > > tree: https://github.com/paulmckrcu/linux cmpxchg2.2026.09.22a
> > > > > > head: 54c282c15475ebfae4712fe3ab637c9d19c723d6
> > > > > > commit: b6d4f6af38f85e7948fd64f9bf09cbb858b4dade [25/28] ARC: Emulate
> > > > > two-byte cmpxchg
> > > > > > config: arc-allyesconfig
> > > > > (https://download.01.org/0day-ci/archive/20260924/202609241517.SSV1Goz3-lkp@intel.com/config)
> > > > > > compiler: arc-linux-gcc (GCC) 16.1.0
> > > > > > reproduce (this is a W=1 build):
> > > > > (https://download.01.org/0day-ci/archive/20260924/202609241517.SSV1Goz3-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@intel.com>
> > > > > > | Closes:
> > > > > https://lore.kernel.org/oe-kbuild-all/202609241517.SSV1Goz3-lkp@intel.com/
> > > > > > All errors (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 include/asm-generic/div64.h:55,
> > > > > > from ./arch/arc/include/generated/asm/div64.h:1,
> > > > > > from include/linux/math.h:6,
> > > > > > from include/linux/math64.h:6,
> > > > > > from include/linux/time.h:6,
> > > > > > from include/linux/stat.h:19,
> > > > > > from include/linux/fs_dirent.h:5,
> > > > > > from include/linux/fs/super_types.h:5,
> > > > > > from include/linux/fs/super.h:5,
> > > > > > from include/linux/fs.h:5,
> > > > > > from include/linux/fscrypt.h:16,
> > > > > > from fs/crypto/fscrypt_private.h:15,
> > > > > > from fs/crypto/hooks.c:10:
> > > > > > fs/crypto/hooks.c: In function 'fscrypt_get_symlink':
> > > > > > > > arch/arc/include/asm/cmpxchg.h:46:58: error: pointer type mismatch in
> > > > > conditional expression [-Wincompatible-pointer-types]
> > > > > > 46 | unsigned long _new_ = (unsigned long)(0 ? *(_p_) :
> > > > > (new)); \
> > > > >
> > > > > Issue is in fs/crypto/hooks.c doing cmpxchg_release(&inode->i_link, NULL,
> > > > > pstr.name)
> > > > > where i_link is char * and pstr.name is unsigned char *),
> > > > >
> > > > > The problem is when pointer types are incompatible and that's exactly the
> > > > > W toggle above.
> > > > >
> > > > > So Bradley's patch needs this fixup
> > > > >
> > > > > diff --git a/arch/arc/include/asm/cmpxchg.h b/arch/arc/include/asm/cmpxchg.h
> > > > > index 4596edfefa95..9053098bb152 100644
> > > > > --- a/arch/arc/include/asm/cmpxchg.h
> > > > > +++ b/arch/arc/include/asm/cmpxchg.h
> > > > > @@ -42,8 +42,10 @@
> > > > > #define arch_cmpxchg_relaxed(ptr, old, new) \
> > > > > ({ \
> > > > > __typeof__(ptr) _p_ = (ptr); \
> > > > > - unsigned long _old_ = (unsigned long)(0 ? *(_p_) : (old)); \
> > > > > - unsigned long _new_ = (unsigned long)(0 ? *(_p_) : (new)); \
> > > > > + __typeof__(*(ptr)) _o_ = (old); \
> > > > > + __typeof__(*(ptr)) _n_ = (new); \
> > > > > + unsigned long _old_ = (unsigned long)_o_; \
> > > > > + unsigned long _new_ = (unsigned long)_n_; \
> > > > >
> > > > > P.S: For arch changes shouldn't the submitter be required to at least test
> > > > > the building, specially when this involves the macro maze. Its really easy
> > > > > with crosstool hosting all the cross-compilers [1] - just download and
> > > > > untar.
> > > > >
> > > > > [1]
> > > > > https://mirrors.edge.kernel.org/pub/tools/crosstool/files/bin/x86_64/16.2.0/
> > > > Well thanks but I didn't have a proper server till yesterday.
> > > A relatively decent laptop works for me.
> > And you will get *way* faster response time than waiting on kernel
> > test robot. ;-)
> >
> > > > I'll post all arch patches when Paul tells me how he wants it
> > > Please do a minimal compile build - it will save you the re-spins.
> > >
> > > > Like if he wants u16 in first then arch changes sent.
> > First, I queued Vineet's cmpxchg patch from his pull request to Linus.
> > I have marked it "EXP" so that I don't accidentally ship it off somewhere
> > myself.
> >
> > Given the surprises from the u8/u16 changes, I suggest the following:
> >
> > 1. One patch to add cmpxchg_emu_u16(), but without the u8/u16
> > changes. And without the CONFIG_ARCH_NEED_CMPXCHG_1_2_EMU
> > change.
> >
> > At Bradley's option, cmpxchg_emu_u8() could remain as is, with
> > cmpxchg_emu_u16() being born as u16. The upside is less churn
> > later. The downside is that more up-front testing is needed,
> > and thus greater interaction with busy architecture maintainers.
> > If it was me, I would start with cmpxchg_emu_u16() being as
> > close to cmpxchg_emu_u8() as possible in order to "get the
> > camel's nose into the tent" as quickly and easily as possible.
> > But this is Bradley's patch series, so his choice.
> >
> > 2. One patch each to add use of cmpxchg_emu_u16() to each
> > affected architecture.
> >
> > 3. Given #1, each patch for #2 can go in independently. The patches
> > for #2 of course need acks from their respective maintainers.
> >
> > 4. A patch to rename CONFIG_ARCH_NEED_CMPXCHG_1_EMU to
> > CONFIG_ARCH_NEED_CMPXCHG_1_2_EMU. This will cross lib and
> > architectures, which should be OK because it is just a name
> > change. We collect acks as before.
> >
> > 5. Convert cmpxchg_emu_u8() away from uintptr_t, and, if needed,
> > cmpxchg_emu_u16() as well.
> >
> > This could take a merge window or three to get in, but that is not all
> > that bad for cross-architecture patch serieses such as this one.
> >
> > Bradley, Vineet, thoughts?
>
> Sound like a plan, buy hey its Bradley doing all the work here ;-)
I figured that I should give him the chance, but yes, if he declines I
will of course do any needed additional work.
> I would only add something I mentioned before: download the cross toolchains
> and do some build testing locally before posting. This is not because arch
> maintainers are busy or lazy (although they can be both) - that saves
> potential respins induced by new code or even broken existing code exposed.
Agreed!!!
> And on that topic I just found a gcc 16 ICE when building an allyesconfig
> for ARC. I will only be able to post the gcc fix after LPC, but just FYI in
> case someone runs into it.
Thanks for the heads up.
Thanx, Paul
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [paulmckrcu:cmpxchg2.2026.09.22a 25/28] arch/arc/include/asm/cmpxchg.h:46:58: error: pointer type mismatch in conditional expression
@ 2026-09-30 17:55 ` Paul E. McKenney
0 siblings, 0 replies; 18+ messages in thread
From: Paul E. McKenney @ 2026-09-30 17:55 UTC (permalink / raw)
To: Vineet Gupta
Cc: Bradley Morgan, kernel test robot, oe-kbuild-all, linux-snps-arc
On Tue, Sep 29, 2026 at 03:10:01PM -0700, Vineet Gupta wrote:
>
>
> On 9/29/26 13:47, Paul E. McKenney wrote:
> > On Thu, Sep 24, 2026 at 02:27:11PM -0700, Vineet Gupta wrote:
> > > On 9/24/26 13:58, Bradley Morgan wrote:
> > > > On 24 September 2026 21:52:55 BST, Vineet Gupta <vgupta@kernel.org> wrote:
> > > > > On 9/24/26 00:51, kernel test robot wrote:
> > > > > > tree: https://github.com/paulmckrcu/linux cmpxchg2.2026.09.22a
> > > > > > head: 54c282c15475ebfae4712fe3ab637c9d19c723d6
> > > > > > commit: b6d4f6af38f85e7948fd64f9bf09cbb858b4dade [25/28] ARC: Emulate
> > > > > two-byte cmpxchg
> > > > > > config: arc-allyesconfig
> > > > > (https://download.01.org/0day-ci/archive/20260924/202609241517.SSV1Goz3-lkp@intel.com/config)
> > > > > > compiler: arc-linux-gcc (GCC) 16.1.0
> > > > > > reproduce (this is a W=1 build):
> > > > > (https://download.01.org/0day-ci/archive/20260924/202609241517.SSV1Goz3-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@intel.com>
> > > > > > | Closes:
> > > > > https://lore.kernel.org/oe-kbuild-all/202609241517.SSV1Goz3-lkp@intel.com/
> > > > > > All errors (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 include/asm-generic/div64.h:55,
> > > > > > from ./arch/arc/include/generated/asm/div64.h:1,
> > > > > > from include/linux/math.h:6,
> > > > > > from include/linux/math64.h:6,
> > > > > > from include/linux/time.h:6,
> > > > > > from include/linux/stat.h:19,
> > > > > > from include/linux/fs_dirent.h:5,
> > > > > > from include/linux/fs/super_types.h:5,
> > > > > > from include/linux/fs/super.h:5,
> > > > > > from include/linux/fs.h:5,
> > > > > > from include/linux/fscrypt.h:16,
> > > > > > from fs/crypto/fscrypt_private.h:15,
> > > > > > from fs/crypto/hooks.c:10:
> > > > > > fs/crypto/hooks.c: In function 'fscrypt_get_symlink':
> > > > > > > > arch/arc/include/asm/cmpxchg.h:46:58: error: pointer type mismatch in
> > > > > conditional expression [-Wincompatible-pointer-types]
> > > > > > 46 | unsigned long _new_ = (unsigned long)(0 ? *(_p_) :
> > > > > (new)); \
> > > > >
> > > > > Issue is in fs/crypto/hooks.c doing cmpxchg_release(&inode->i_link, NULL,
> > > > > pstr.name)
> > > > > where i_link is char * and pstr.name is unsigned char *),
> > > > >
> > > > > The problem is when pointer types are incompatible and that's exactly the
> > > > > W toggle above.
> > > > >
> > > > > So Bradley's patch needs this fixup
> > > > >
> > > > > diff --git a/arch/arc/include/asm/cmpxchg.h b/arch/arc/include/asm/cmpxchg.h
> > > > > index 4596edfefa95..9053098bb152 100644
> > > > > --- a/arch/arc/include/asm/cmpxchg.h
> > > > > +++ b/arch/arc/include/asm/cmpxchg.h
> > > > > @@ -42,8 +42,10 @@
> > > > > #define arch_cmpxchg_relaxed(ptr, old, new) \
> > > > > ({ \
> > > > > __typeof__(ptr) _p_ = (ptr); \
> > > > > - unsigned long _old_ = (unsigned long)(0 ? *(_p_) : (old)); \
> > > > > - unsigned long _new_ = (unsigned long)(0 ? *(_p_) : (new)); \
> > > > > + __typeof__(*(ptr)) _o_ = (old); \
> > > > > + __typeof__(*(ptr)) _n_ = (new); \
> > > > > + unsigned long _old_ = (unsigned long)_o_; \
> > > > > + unsigned long _new_ = (unsigned long)_n_; \
> > > > >
> > > > > P.S: For arch changes shouldn't the submitter be required to at least test
> > > > > the building, specially when this involves the macro maze. Its really easy
> > > > > with crosstool hosting all the cross-compilers [1] - just download and
> > > > > untar.
> > > > >
> > > > > [1]
> > > > > https://mirrors.edge.kernel.org/pub/tools/crosstool/files/bin/x86_64/16.2.0/
> > > > Well thanks but I didn't have a proper server till yesterday.
> > > A relatively decent laptop works for me.
> > And you will get *way* faster response time than waiting on kernel
> > test robot. ;-)
> >
> > > > I'll post all arch patches when Paul tells me how he wants it
> > > Please do a minimal compile build - it will save you the re-spins.
> > >
> > > > Like if he wants u16 in first then arch changes sent.
> > First, I queued Vineet's cmpxchg patch from his pull request to Linus.
> > I have marked it "EXP" so that I don't accidentally ship it off somewhere
> > myself.
> >
> > Given the surprises from the u8/u16 changes, I suggest the following:
> >
> > 1. One patch to add cmpxchg_emu_u16(), but without the u8/u16
> > changes. And without the CONFIG_ARCH_NEED_CMPXCHG_1_2_EMU
> > change.
> >
> > At Bradley's option, cmpxchg_emu_u8() could remain as is, with
> > cmpxchg_emu_u16() being born as u16. The upside is less churn
> > later. The downside is that more up-front testing is needed,
> > and thus greater interaction with busy architecture maintainers.
> > If it was me, I would start with cmpxchg_emu_u16() being as
> > close to cmpxchg_emu_u8() as possible in order to "get the
> > camel's nose into the tent" as quickly and easily as possible.
> > But this is Bradley's patch series, so his choice.
> >
> > 2. One patch each to add use of cmpxchg_emu_u16() to each
> > affected architecture.
> >
> > 3. Given #1, each patch for #2 can go in independently. The patches
> > for #2 of course need acks from their respective maintainers.
> >
> > 4. A patch to rename CONFIG_ARCH_NEED_CMPXCHG_1_EMU to
> > CONFIG_ARCH_NEED_CMPXCHG_1_2_EMU. This will cross lib and
> > architectures, which should be OK because it is just a name
> > change. We collect acks as before.
> >
> > 5. Convert cmpxchg_emu_u8() away from uintptr_t, and, if needed,
> > cmpxchg_emu_u16() as well.
> >
> > This could take a merge window or three to get in, but that is not all
> > that bad for cross-architecture patch serieses such as this one.
> >
> > Bradley, Vineet, thoughts?
>
> Sound like a plan, buy hey its Bradley doing all the work here ;-)
I figured that I should give him the chance, but yes, if he declines I
will of course do any needed additional work.
> I would only add something I mentioned before: download the cross toolchains
> and do some build testing locally before posting. This is not because arch
> maintainers are busy or lazy (although they can be both) - that saves
> potential respins induced by new code or even broken existing code exposed.
Agreed!!!
> And on that topic I just found a gcc 16 ICE when building an allyesconfig
> for ARC. I will only be able to post the gcc fix after LPC, but just FYI in
> case someone runs into it.
Thanks for the heads up.
Thanx, Paul
_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [paulmckrcu:cmpxchg2.2026.09.22a 25/28] arch/arc/include/asm/cmpxchg.h:46:58: error: pointer type mismatch in conditional expression
2026-09-30 6:39 ` Bradley Morgan
@ 2026-09-30 17:57 ` Paul E. McKenney
-1 siblings, 0 replies; 18+ messages in thread
From: Paul E. McKenney @ 2026-09-30 17:57 UTC (permalink / raw)
To: Bradley Morgan
Cc: Vineet Gupta, kernel test robot, oe-kbuild-all, linux-snps-arc
On Wed, Sep 30, 2026 at 07:39:02AM +0100, Bradley Morgan wrote:
> On 29 September 2026 23:10:01 BST, Vineet Gupta <vgupta@kernel.org> wrote:
> >
> >
> >On 9/29/26 13:47, Paul E. McKenney wrote:
> >> On Thu, Sep 24, 2026 at 02:27:11PM -0700, Vineet Gupta wrote:
> >>> On 9/24/26 13:58, Bradley Morgan wrote:
> >>>> On 24 September 2026 21:52:55 BST, Vineet Gupta <vgupta@kernel.org>
> >wrote:
> >>>>> On 9/24/26 00:51, kernel test robot wrote:
> >>>>>> tree: https://github.com/paulmckrcu/linux cmpxchg2.2026.09.22a
> >>>>>> head: 54c282c15475ebfae4712fe3ab637c9d19c723d6
> >>>>>> commit: b6d4f6af38f85e7948fd64f9bf09cbb858b4dade [25/28] ARC:
> >Emulate
> >>>>> two-byte cmpxchg
> >>>>>> config: arc-allyesconfig
> >>>>>
> >(https://download.01.org/0day-ci/archive/20260924/202609241517.SSV1Goz3-lkp@intel.com/config)
> >>>>>> compiler: arc-linux-gcc (GCC) 16.1.0
> >>>>>> reproduce (this is a W=1 build):
> >>>>>
> >(https://download.01.org/0day-ci/archive/20260924/202609241517.SSV1Goz3-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@intel.com>
> >>>>>> | Closes:
> >>>>>
> >https://lore.kernel.org/oe-kbuild-all/202609241517.SSV1Goz3-lkp@intel.com/
> >>>>>> All errors (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 include/asm-generic/div64.h:55,
> >>>>>> from
> >./arch/arc/include/generated/asm/div64.h:1,
> >>>>>> from include/linux/math.h:6,
> >>>>>> from include/linux/math64.h:6,
> >>>>>> from include/linux/time.h:6,
> >>>>>> from include/linux/stat.h:19,
> >>>>>> from include/linux/fs_dirent.h:5,
> >>>>>> from include/linux/fs/super_types.h:5,
> >>>>>> from include/linux/fs/super.h:5,
> >>>>>> from include/linux/fs.h:5,
> >>>>>> from include/linux/fscrypt.h:16,
> >>>>>> from fs/crypto/fscrypt_private.h:15,
> >>>>>> from fs/crypto/hooks.c:10:
> >>>>>> fs/crypto/hooks.c: In function 'fscrypt_get_symlink':
> >>>>>>>> arch/arc/include/asm/cmpxchg.h:46:58: error: pointer type mismatch
> >in
> >>>>> conditional expression [-Wincompatible-pointer-types]
> >>>>>> 46 | unsigned long _new_ = (unsigned long)(0 ?
> >*(_p_) :
> >>>>> (new)); \
> >>>>>
> >>>>> Issue is in fs/crypto/hooks.c doing cmpxchg_release(&inode->i_link,
> >NULL,
> >>>>> pstr.name)
> >>>>> where i_link is char * and pstr.name is unsigned char *),
> >>>>>
> >>>>> The problem is when pointer types are incompatible and that's exactly
> >the
> >>>>> W toggle above.
> >>>>>
> >>>>> So Bradley's patch needs this fixup
> >>>>>
> >>>>> diff --git a/arch/arc/include/asm/cmpxchg.h
> >b/arch/arc/include/asm/cmpxchg.h
> >>>>> index 4596edfefa95..9053098bb152 100644
> >>>>> --- a/arch/arc/include/asm/cmpxchg.h
> >>>>> +++ b/arch/arc/include/asm/cmpxchg.h
> >>>>> @@ -42,8 +42,10 @@
> >>>>> #define arch_cmpxchg_relaxed(ptr, old, new) \
> >>>>> ({ \
> >>>>> __typeof__(ptr) _p_ = (ptr); \
> >>>>> - unsigned long _old_ = (unsigned long)(0 ? *(_p_) : (old));
> > \
> >>>>> - unsigned long _new_ = (unsigned long)(0 ? *(_p_) : (new));
> > \
> >>>>> + __typeof__(*(ptr)) _o_ = (old); \
> >>>>> + __typeof__(*(ptr)) _n_ = (new); \
> >>>>> + unsigned long _old_ = (unsigned long)_o_; \
> >>>>> + unsigned long _new_ = (unsigned long)_n_; \
> >>>>>
> >>>>> P.S: For arch changes shouldn't the submitter be required to at least
> >test
> >>>>> the building, specially when this involves the macro maze. Its really
> >easy
> >>>>> with crosstool hosting all the cross-compilers [1] - just download
> >and
> >>>>> untar.
> >>>>>
> >>>>> [1]
> >>>>>
> >https://mirrors.edge.kernel.org/pub/tools/crosstool/files/bin/x86_64/16.2.0/
> >>>> Well thanks but I didn't have a proper server till yesterday.
> >>> A relatively decent laptop works for me.
> >> And you will get *way* faster response time than waiting on kernel
> >> test robot. ;-)
> >>
> >>>> I'll post all arch patches when Paul tells me how he wants it
> >>> Please do a minimal compile build - it will save you the re-spins.
> >>>
> >>>> Like if he wants u16 in first then arch changes sent.
> >> First, I queued Vineet's cmpxchg patch from his pull request to Linus.
> >> I have marked it "EXP" so that I don't accidentally ship it off
> >somewhere
> >> myself.
> >>
> >> Given the surprises from the u8/u16 changes, I suggest the following:
> >>
> >> 1. One patch to add cmpxchg_emu_u16(), but without the u8/u16
> >> changes. And without the CONFIG_ARCH_NEED_CMPXCHG_1_2_EMU
> >> change.
> >>
> >> At Bradley's option, cmpxchg_emu_u8() could remain as is, with
> >> cmpxchg_emu_u16() being born as u16. The upside is less churn
> >> later. The downside is that more up-front testing is needed,
> >> and thus greater interaction with busy architecture maintainers.
> >> If it was me, I would start with cmpxchg_emu_u16() being as
> >> close to cmpxchg_emu_u8() as possible in order to "get the
> >> camel's nose into the tent" as quickly and easily as possible.
> >> But this is Bradley's patch series, so his choice.
> >>
> >> 2. One patch each to add use of cmpxchg_emu_u16() to each
> >> affected architecture.
> >>
> >> 3. Given #1, each patch for #2 can go in independently. The patches
> >> for #2 of course need acks from their respective maintainers.
> >>
> >> 4. A patch to rename CONFIG_ARCH_NEED_CMPXCHG_1_EMU to
> >> CONFIG_ARCH_NEED_CMPXCHG_1_2_EMU. This will cross lib and
> >> architectures, which should be OK because it is just a name
> >> change. We collect acks as before.
> >>
> >> 5. Convert cmpxchg_emu_u8() away from uintptr_t, and, if needed,
> >> cmpxchg_emu_u16() as well.
> >>
> >> This could take a merge window or three to get in, but that is not all
> >> that bad for cross-architecture patch serieses such as this one.
> >>
> >> Bradley, Vineet, thoughts?
> >
> >Sound like a plan, buy hey its Bradley doing all the work here ;-)
>
> Hmm, I'd prefer to leave u16 as is, I'll send the rename patch in the
> coming hours/days, I have school
Fair enough, your choice!
> >I would only add something I mentioned before: download the cross
> >toolchains and do some build testing locally before posting. This is not
> >because arch maintainers are busy or lazy (although they can be both) -
> >that saves potential respins induced by new code or even broken existing
> >code exposed.
Of course, this choice increases the urgency of Vineet's cross-toolchain
suggestion due to the larger difference in code from cmpxchg_emu_u8().
The more the differences, the greater the chance of something going
wrong and the greater the value of timely cross-toolchain build checks.
Thanx, Paul
> >And on that topic I just found a gcc 16 ICE when building an allyesconfig
> >for ARC. I will only be able to post the gcc fix after LPC, but just FYI
> >in case someone runs into it.
> >
> >Thx,
> >-Vineet
> >
>
> --- Thanks!
> "I'm not a very positive person" - Linus torvalds
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [paulmckrcu:cmpxchg2.2026.09.22a 25/28] arch/arc/include/asm/cmpxchg.h:46:58: error: pointer type mismatch in conditional expression
@ 2026-09-30 17:57 ` Paul E. McKenney
0 siblings, 0 replies; 18+ messages in thread
From: Paul E. McKenney @ 2026-09-30 17:57 UTC (permalink / raw)
To: Bradley Morgan
Cc: Vineet Gupta, kernel test robot, oe-kbuild-all, linux-snps-arc
On Wed, Sep 30, 2026 at 07:39:02AM +0100, Bradley Morgan wrote:
> On 29 September 2026 23:10:01 BST, Vineet Gupta <vgupta@kernel.org> wrote:
> >
> >
> >On 9/29/26 13:47, Paul E. McKenney wrote:
> >> On Thu, Sep 24, 2026 at 02:27:11PM -0700, Vineet Gupta wrote:
> >>> On 9/24/26 13:58, Bradley Morgan wrote:
> >>>> On 24 September 2026 21:52:55 BST, Vineet Gupta <vgupta@kernel.org>
> >wrote:
> >>>>> On 9/24/26 00:51, kernel test robot wrote:
> >>>>>> tree: https://github.com/paulmckrcu/linux cmpxchg2.2026.09.22a
> >>>>>> head: 54c282c15475ebfae4712fe3ab637c9d19c723d6
> >>>>>> commit: b6d4f6af38f85e7948fd64f9bf09cbb858b4dade [25/28] ARC:
> >Emulate
> >>>>> two-byte cmpxchg
> >>>>>> config: arc-allyesconfig
> >>>>>
> >(https://download.01.org/0day-ci/archive/20260924/202609241517.SSV1Goz3-lkp@intel.com/config)
> >>>>>> compiler: arc-linux-gcc (GCC) 16.1.0
> >>>>>> reproduce (this is a W=1 build):
> >>>>>
> >(https://download.01.org/0day-ci/archive/20260924/202609241517.SSV1Goz3-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@intel.com>
> >>>>>> | Closes:
> >>>>>
> >https://lore.kernel.org/oe-kbuild-all/202609241517.SSV1Goz3-lkp@intel.com/
> >>>>>> All errors (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 include/asm-generic/div64.h:55,
> >>>>>> from
> >./arch/arc/include/generated/asm/div64.h:1,
> >>>>>> from include/linux/math.h:6,
> >>>>>> from include/linux/math64.h:6,
> >>>>>> from include/linux/time.h:6,
> >>>>>> from include/linux/stat.h:19,
> >>>>>> from include/linux/fs_dirent.h:5,
> >>>>>> from include/linux/fs/super_types.h:5,
> >>>>>> from include/linux/fs/super.h:5,
> >>>>>> from include/linux/fs.h:5,
> >>>>>> from include/linux/fscrypt.h:16,
> >>>>>> from fs/crypto/fscrypt_private.h:15,
> >>>>>> from fs/crypto/hooks.c:10:
> >>>>>> fs/crypto/hooks.c: In function 'fscrypt_get_symlink':
> >>>>>>>> arch/arc/include/asm/cmpxchg.h:46:58: error: pointer type mismatch
> >in
> >>>>> conditional expression [-Wincompatible-pointer-types]
> >>>>>> 46 | unsigned long _new_ = (unsigned long)(0 ?
> >*(_p_) :
> >>>>> (new)); \
> >>>>>
> >>>>> Issue is in fs/crypto/hooks.c doing cmpxchg_release(&inode->i_link,
> >NULL,
> >>>>> pstr.name)
> >>>>> where i_link is char * and pstr.name is unsigned char *),
> >>>>>
> >>>>> The problem is when pointer types are incompatible and that's exactly
> >the
> >>>>> W toggle above.
> >>>>>
> >>>>> So Bradley's patch needs this fixup
> >>>>>
> >>>>> diff --git a/arch/arc/include/asm/cmpxchg.h
> >b/arch/arc/include/asm/cmpxchg.h
> >>>>> index 4596edfefa95..9053098bb152 100644
> >>>>> --- a/arch/arc/include/asm/cmpxchg.h
> >>>>> +++ b/arch/arc/include/asm/cmpxchg.h
> >>>>> @@ -42,8 +42,10 @@
> >>>>> #define arch_cmpxchg_relaxed(ptr, old, new) \
> >>>>> ({ \
> >>>>> __typeof__(ptr) _p_ = (ptr); \
> >>>>> - unsigned long _old_ = (unsigned long)(0 ? *(_p_) : (old));
> > \
> >>>>> - unsigned long _new_ = (unsigned long)(0 ? *(_p_) : (new));
> > \
> >>>>> + __typeof__(*(ptr)) _o_ = (old); \
> >>>>> + __typeof__(*(ptr)) _n_ = (new); \
> >>>>> + unsigned long _old_ = (unsigned long)_o_; \
> >>>>> + unsigned long _new_ = (unsigned long)_n_; \
> >>>>>
> >>>>> P.S: For arch changes shouldn't the submitter be required to at least
> >test
> >>>>> the building, specially when this involves the macro maze. Its really
> >easy
> >>>>> with crosstool hosting all the cross-compilers [1] - just download
> >and
> >>>>> untar.
> >>>>>
> >>>>> [1]
> >>>>>
> >https://mirrors.edge.kernel.org/pub/tools/crosstool/files/bin/x86_64/16.2.0/
> >>>> Well thanks but I didn't have a proper server till yesterday.
> >>> A relatively decent laptop works for me.
> >> And you will get *way* faster response time than waiting on kernel
> >> test robot. ;-)
> >>
> >>>> I'll post all arch patches when Paul tells me how he wants it
> >>> Please do a minimal compile build - it will save you the re-spins.
> >>>
> >>>> Like if he wants u16 in first then arch changes sent.
> >> First, I queued Vineet's cmpxchg patch from his pull request to Linus.
> >> I have marked it "EXP" so that I don't accidentally ship it off
> >somewhere
> >> myself.
> >>
> >> Given the surprises from the u8/u16 changes, I suggest the following:
> >>
> >> 1. One patch to add cmpxchg_emu_u16(), but without the u8/u16
> >> changes. And without the CONFIG_ARCH_NEED_CMPXCHG_1_2_EMU
> >> change.
> >>
> >> At Bradley's option, cmpxchg_emu_u8() could remain as is, with
> >> cmpxchg_emu_u16() being born as u16. The upside is less churn
> >> later. The downside is that more up-front testing is needed,
> >> and thus greater interaction with busy architecture maintainers.
> >> If it was me, I would start with cmpxchg_emu_u16() being as
> >> close to cmpxchg_emu_u8() as possible in order to "get the
> >> camel's nose into the tent" as quickly and easily as possible.
> >> But this is Bradley's patch series, so his choice.
> >>
> >> 2. One patch each to add use of cmpxchg_emu_u16() to each
> >> affected architecture.
> >>
> >> 3. Given #1, each patch for #2 can go in independently. The patches
> >> for #2 of course need acks from their respective maintainers.
> >>
> >> 4. A patch to rename CONFIG_ARCH_NEED_CMPXCHG_1_EMU to
> >> CONFIG_ARCH_NEED_CMPXCHG_1_2_EMU. This will cross lib and
> >> architectures, which should be OK because it is just a name
> >> change. We collect acks as before.
> >>
> >> 5. Convert cmpxchg_emu_u8() away from uintptr_t, and, if needed,
> >> cmpxchg_emu_u16() as well.
> >>
> >> This could take a merge window or three to get in, but that is not all
> >> that bad for cross-architecture patch serieses such as this one.
> >>
> >> Bradley, Vineet, thoughts?
> >
> >Sound like a plan, buy hey its Bradley doing all the work here ;-)
>
> Hmm, I'd prefer to leave u16 as is, I'll send the rename patch in the
> coming hours/days, I have school
Fair enough, your choice!
> >I would only add something I mentioned before: download the cross
> >toolchains and do some build testing locally before posting. This is not
> >because arch maintainers are busy or lazy (although they can be both) -
> >that saves potential respins induced by new code or even broken existing
> >code exposed.
Of course, this choice increases the urgency of Vineet's cross-toolchain
suggestion due to the larger difference in code from cmpxchg_emu_u8().
The more the differences, the greater the chance of something going
wrong and the greater the value of timely cross-toolchain build checks.
Thanx, Paul
> >And on that topic I just found a gcc 16 ICE when building an allyesconfig
> >for ARC. I will only be able to post the gcc fix after LPC, but just FYI
> >in case someone runs into it.
> >
> >Thx,
> >-Vineet
> >
>
> --- Thanks!
> "I'm not a very positive person" - Linus torvalds
_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc
^ permalink raw reply [flat|nested] 18+ messages in thread
end of thread, other threads:[~2026-09-30 17:58 UTC | newest]
Thread overview: 18+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-09-24 7:51 [paulmckrcu:cmpxchg2.2026.09.22a 25/28] arch/arc/include/asm/cmpxchg.h:46:58: error: pointer type mismatch in conditional expression kernel test robot
2026-09-24 7:51 ` kernel test robot
2026-09-24 20:52 ` Vineet Gupta
2026-09-24 20:52 ` Vineet Gupta
2026-09-24 20:58 ` Bradley Morgan
2026-09-24 20:58 ` Bradley Morgan
2026-09-24 21:27 ` Vineet Gupta
2026-09-24 21:27 ` Vineet Gupta
2026-09-29 20:47 ` Paul E. McKenney
2026-09-29 20:47 ` Paul E. McKenney
2026-09-29 22:10 ` Vineet Gupta
2026-09-29 22:10 ` Vineet Gupta
2026-09-30 6:39 ` Bradley Morgan
2026-09-30 6:39 ` Bradley Morgan
2026-09-30 17:57 ` Paul E. McKenney
2026-09-30 17:57 ` Paul E. McKenney
2026-09-30 17:55 ` Paul E. McKenney
2026-09-30 17:55 ` Paul E. McKenney
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.