From: "Paul E. McKenney" <paulmck@kernel.org>
To: Yujie Liu <yujie.liu@intel.com>
Cc: kernel test robot <lkp@intel.com>,
oe-kbuild-all@lists.linux.dev,
Linux Memory Management List <linux-mm@kvack.org>
Subject: Re: [linux-next:master 2559/3220] arch/riscv/include/asm/cmpxchg.h:329:23: warning: assignment to 'struct tty_struct *' from 'uintptr_t' {aka 'long unsigned int'} makes pointer from integer without a cast
Date: Wed, 3 Apr 2024 15:21:02 -0700 [thread overview]
Message-ID: <e9b05cbe-7e1d-426c-8d4a-805561342015@paulmck-laptop> (raw)
In-Reply-To: <Zgz98szFLLjTIZSO@yujie-X299>
On Wed, Apr 03, 2024 at 02:57:54PM +0800, Yujie Liu wrote:
> Hi Paul,
>
> On Tue, Apr 02, 2024 at 10:20:59AM -0700, Paul E. McKenney wrote:
> > On Tue, Apr 02, 2024 at 03:08:07PM +0800, kernel test robot wrote:
> > > tree: https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master
> > > head: c0b832517f627ead3388c6f0c74e8ac10ad5774b
> > > commit: df35ee400e06b23ecd44fdb66451a5343932f834 [2559/3220] riscv: Emulate one-byte and two-byte cmpxchg
> > > config: riscv-randconfig-r061-20240402 (https://download.01.org/0day-ci/archive/20240402/202404021504.YTP51bL3-lkp@intel.com/config)
> > > compiler: riscv64-linux-gcc (GCC) 13.2.0
> > > reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240402/202404021504.YTP51bL3-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/202404021504.YTP51bL3-lkp@intel.com/
> >
> > One fix leads to another. ;-)
> >
> > Does the patch at the end of this email clear things up?
>
> Please kindly see the inline comments.
Good points, thank you, and alleged fix in progress. ;-)
Thanx, Paul
> > > All warnings (new ones prefixed by >>):
> > >
> > > In file included from arch/riscv/include/asm/atomic.h:19,
> > > from include/linux/atomic.h:7,
> > > from include/linux/cpumask.h:14,
> > > from include/linux/smp.h:13,
> > > from include/linux/lockdep.h:14,
> > > from include/linux/spinlock.h:63,
> > > from include/linux/mmzone.h:8,
> > > from include/linux/gfp.h:7,
> > > from include/linux/slab.h:16,
> > > from drivers/accessibility/speakup/selection.c:2:
> > > drivers/accessibility/speakup/selection.c: In function 'speakup_set_selection':
> > > arch/riscv/include/asm/cmpxchg.h:329:62: warning: passing argument 2 of 'cmpxchg_emu_u8' makes integer from pointer without a cast [-Wint-conversion]
> > > 329 | __ret = cmpxchg_emu_u8((volatile u8 *)__ptr, __old, __new); \
> > > | ^~~~~
> > > | |
> > > | struct tty_struct *
>
> This warning is fixed after adding uintptr_t cast for __old and __new.
>
> > > arch/riscv/include/asm/cmpxchg.h:368:30: note: in expansion of macro '__cmpxchg'
> > > 368 | (__typeof__(*(ptr))) __cmpxchg((ptr), \
> > > | ^~~~~~~~~
> > > include/linux/atomic/atomic-arch-fallback.h:55:21: note: in expansion of macro 'arch_cmpxchg'
> > > 55 | #define raw_cmpxchg arch_cmpxchg
> > > | ^~~~~~~~~~~~
> > > include/linux/atomic/atomic-instrumented.h:4788:9: note: in expansion of macro 'raw_cmpxchg'
> > > 4788 | raw_cmpxchg(__ai_ptr, __VA_ARGS__); \
> > > | ^~~~~~~~~~~
> > > drivers/accessibility/speakup/selection.c:71:13: note: in expansion of macro 'cmpxchg'
> > > 71 | if (cmpxchg(&speakup_sel_work.tty, NULL, tty)) {
> > > | ^~~~~~~
> > > In file included from arch/riscv/include/asm/cmpxchg.h:12:
> > > include/linux/cmpxchg-emu.h:13:52: note: expected 'uintptr_t' {aka 'long unsigned int'} but argument is of type 'struct tty_struct *'
> > > 13 | uintptr_t cmpxchg_emu_u8(volatile u8 *p, uintptr_t old, uintptr_t new);
> > > | ~~~~~~~~~~^~~
> > > arch/riscv/include/asm/cmpxchg.h:329:69: warning: passing argument 3 of 'cmpxchg_emu_u8' makes integer from pointer without a cast [-Wint-conversion]
> > > 329 | __ret = cmpxchg_emu_u8((volatile u8 *)__ptr, __old, __new); \
> > > | ^~~~~
> > > | |
> > > | struct tty_struct *
>
> So is this one.
>
> > > arch/riscv/include/asm/cmpxchg.h:368:30: note: in expansion of macro '__cmpxchg'
> > > 368 | (__typeof__(*(ptr))) __cmpxchg((ptr), \
> > > | ^~~~~~~~~
> > > include/linux/atomic/atomic-arch-fallback.h:55:21: note: in expansion of macro 'arch_cmpxchg'
> > > 55 | #define raw_cmpxchg arch_cmpxchg
> > > | ^~~~~~~~~~~~
> > > include/linux/atomic/atomic-instrumented.h:4788:9: note: in expansion of macro 'raw_cmpxchg'
> > > 4788 | raw_cmpxchg(__ai_ptr, __VA_ARGS__); \
> > > | ^~~~~~~~~~~
> > > drivers/accessibility/speakup/selection.c:71:13: note: in expansion of macro 'cmpxchg'
> > > 71 | if (cmpxchg(&speakup_sel_work.tty, NULL, tty)) {
> > > | ^~~~~~~
> > > include/linux/cmpxchg-emu.h:13:67: note: expected 'uintptr_t' {aka 'long unsigned int'} but argument is of type 'struct tty_struct *'
> > > 13 | uintptr_t cmpxchg_emu_u8(volatile u8 *p, uintptr_t old, uintptr_t new);
> > > | ~~~~~~~~~~^~~
> > > >> arch/riscv/include/asm/cmpxchg.h:329:23: warning: assignment to 'struct tty_struct *' from 'uintptr_t' {aka 'long unsigned int'} makes pointer from integer without a cast [-Wint-conversion]
> > > 329 | __ret = cmpxchg_emu_u8((volatile u8 *)__ptr, __old, __new); \
> > > | ^
>
> This warning still exists.
>
> Seems it needs another cast like below to fix this warning:
>
> __ret = (__typeof__(*(ptr)))cmpxchg_emu_u8((volatile u8 *)__ptr, (uintptr_t)__old, (uintptr_t)__new);
>
> > > arch/riscv/include/asm/cmpxchg.h:368:30: note: in expansion of macro '__cmpxchg'
> > > 368 | (__typeof__(*(ptr))) __cmpxchg((ptr), \
> > > | ^~~~~~~~~
> > > include/linux/atomic/atomic-arch-fallback.h:55:21: note: in expansion of macro 'arch_cmpxchg'
> > > 55 | #define raw_cmpxchg arch_cmpxchg
> > > | ^~~~~~~~~~~~
> > > include/linux/atomic/atomic-instrumented.h:4788:9: note: in expansion of macro 'raw_cmpxchg'
> > > 4788 | raw_cmpxchg(__ai_ptr, __VA_ARGS__); \
> > > | ^~~~~~~~~~~
> > > drivers/accessibility/speakup/selection.c:71:13: note: in expansion of macro 'cmpxchg'
> > > 71 | if (cmpxchg(&speakup_sel_work.tty, NULL, tty)) {
> > > | ^~~~~~~
> > > arch/riscv/include/asm/cmpxchg.h:333:64: warning: passing argument 2 of 'cmpxchg_emu_u16' makes integer from pointer without a cast [-Wint-conversion]
> > > 333 | __ret = cmpxchg_emu_u16((volatile u16 *)__ptr, __old, __new); \
> > > | ^~~~~
> > > | |
> > > | struct tty_struct *
> > > arch/riscv/include/asm/cmpxchg.h:368:30: note: in expansion of macro '__cmpxchg'
> > > 368 | (__typeof__(*(ptr))) __cmpxchg((ptr), \
> > > | ^~~~~~~~~
> > > include/linux/atomic/atomic-arch-fallback.h:55:21: note: in expansion of macro 'arch_cmpxchg'
> > > 55 | #define raw_cmpxchg arch_cmpxchg
> > > | ^~~~~~~~~~~~
> > > include/linux/atomic/atomic-instrumented.h:4788:9: note: in expansion of macro 'raw_cmpxchg'
> > > 4788 | raw_cmpxchg(__ai_ptr, __VA_ARGS__); \
> > > | ^~~~~~~~~~~
> > > drivers/accessibility/speakup/selection.c:71:13: note: in expansion of macro 'cmpxchg'
> > > 71 | if (cmpxchg(&speakup_sel_work.tty, NULL, tty)) {
> > > | ^~~~~~~
> > > include/linux/cmpxchg-emu.h:14:54: note: expected 'uintptr_t' {aka 'long unsigned int'} but argument is of type 'struct tty_struct *'
> > > 14 | uintptr_t cmpxchg_emu_u16(volatile u16 *p, uintptr_t old, uintptr_t new);
> > > | ~~~~~~~~~~^~~
> > > arch/riscv/include/asm/cmpxchg.h:333:71: warning: passing argument 3 of 'cmpxchg_emu_u16' makes integer from pointer without a cast [-Wint-conversion]
> > > 333 | __ret = cmpxchg_emu_u16((volatile u16 *)__ptr, __old, __new); \
> > > | ^~~~~
> > > | |
> > > | struct tty_struct *
> > > arch/riscv/include/asm/cmpxchg.h:368:30: note: in expansion of macro '__cmpxchg'
> > > 368 | (__typeof__(*(ptr))) __cmpxchg((ptr), \
> > > | ^~~~~~~~~
> > > include/linux/atomic/atomic-arch-fallback.h:55:21: note: in expansion of macro 'arch_cmpxchg'
> > > 55 | #define raw_cmpxchg arch_cmpxchg
> > > | ^~~~~~~~~~~~
> > > include/linux/atomic/atomic-instrumented.h:4788:9: note: in expansion of macro 'raw_cmpxchg'
> > > 4788 | raw_cmpxchg(__ai_ptr, __VA_ARGS__); \
> > > | ^~~~~~~~~~~
> > > drivers/accessibility/speakup/selection.c:71:13: note: in expansion of macro 'cmpxchg'
> > > 71 | if (cmpxchg(&speakup_sel_work.tty, NULL, tty)) {
> > > | ^~~~~~~
> > > include/linux/cmpxchg-emu.h:14:69: note: expected 'uintptr_t' {aka 'long unsigned int'} but argument is of type 'struct tty_struct *'
> > > 14 | uintptr_t cmpxchg_emu_u16(volatile u16 *p, uintptr_t old, uintptr_t new);
> > > | ~~~~~~~~~~^~~
> > > arch/riscv/include/asm/cmpxchg.h:333:23: warning: assignment to 'struct tty_struct *' from 'uintptr_t' {aka 'long unsigned int'} makes pointer from integer without a cast [-Wint-conversion]
> > > 333 | __ret = cmpxchg_emu_u16((volatile u16 *)__ptr, __old, __new); \
> > > | ^
> > > arch/riscv/include/asm/cmpxchg.h:368:30: note: in expansion of macro '__cmpxchg'
> > > 368 | (__typeof__(*(ptr))) __cmpxchg((ptr), \
> > > | ^~~~~~~~~
> > > include/linux/atomic/atomic-arch-fallback.h:55:21: note: in expansion of macro 'arch_cmpxchg'
> > > 55 | #define raw_cmpxchg arch_cmpxchg
> > > | ^~~~~~~~~~~~
> > > include/linux/atomic/atomic-instrumented.h:4788:9: note: in expansion of macro 'raw_cmpxchg'
> > > 4788 | raw_cmpxchg(__ai_ptr, __VA_ARGS__); \
> > > | ^~~~~~~~~~~
> > > drivers/accessibility/speakup/selection.c:71:13: note: in expansion of macro 'cmpxchg'
> > > 71 | if (cmpxchg(&speakup_sel_work.tty, NULL, tty)) {
> > > | ^~~~~~~
> > > drivers/accessibility/speakup/selection.c: In function 'speakup_paste_selection':
> > > arch/riscv/include/asm/cmpxchg.h:329:62: warning: passing argument 2 of 'cmpxchg_emu_u8' makes integer from pointer without a cast [-Wint-conversion]
> > > 329 | __ret = cmpxchg_emu_u8((volatile u8 *)__ptr, __old, __new); \
> > > | ^~~~~
> > > | |
> > > | struct tty_struct *
> > > arch/riscv/include/asm/cmpxchg.h:368:30: note: in expansion of macro '__cmpxchg'
> > > 368 | (__typeof__(*(ptr))) __cmpxchg((ptr), \
> > > | ^~~~~~~~~
> > > include/linux/atomic/atomic-arch-fallback.h:55:21: note: in expansion of macro 'arch_cmpxchg'
> > > 55 | #define raw_cmpxchg arch_cmpxchg
> > > | ^~~~~~~~~~~~
> > > include/linux/atomic/atomic-instrumented.h:4788:9: note: in expansion of macro 'raw_cmpxchg'
> > > 4788 | raw_cmpxchg(__ai_ptr, __VA_ARGS__); \
> > > | ^~~~~~~~~~~
> > > drivers/accessibility/speakup/selection.c:124:13: note: in expansion of macro 'cmpxchg'
> > > 124 | if (cmpxchg(&speakup_paste_work.tty, NULL, tty)) {
> > > | ^~~~~~~
> > > include/linux/cmpxchg-emu.h:13:52: note: expected 'uintptr_t' {aka 'long unsigned int'} but argument is of type 'struct tty_struct *'
> > > 13 | uintptr_t cmpxchg_emu_u8(volatile u8 *p, uintptr_t old, uintptr_t new);
> > > | ~~~~~~~~~~^~~
> > > arch/riscv/include/asm/cmpxchg.h:329:69: warning: passing argument 3 of 'cmpxchg_emu_u8' makes integer from pointer without a cast [-Wint-conversion]
> > > 329 | __ret = cmpxchg_emu_u8((volatile u8 *)__ptr, __old, __new); \
> > > | ^~~~~
> > > | |
> > > | struct tty_struct *
> > > arch/riscv/include/asm/cmpxchg.h:368:30: note: in expansion of macro '__cmpxchg'
> > > 368 | (__typeof__(*(ptr))) __cmpxchg((ptr), \
> > > | ^~~~~~~~~
> > > include/linux/atomic/atomic-arch-fallback.h:55:21: note: in expansion of macro 'arch_cmpxchg'
> > > 55 | #define raw_cmpxchg arch_cmpxchg
> > > | ^~~~~~~~~~~~
> > > include/linux/atomic/atomic-instrumented.h:4788:9: note: in expansion of macro 'raw_cmpxchg'
> > > 4788 | raw_cmpxchg(__ai_ptr, __VA_ARGS__); \
> > > | ^~~~~~~~~~~
> > > drivers/accessibility/speakup/selection.c:124:13: note: in expansion of macro 'cmpxchg'
> > > 124 | if (cmpxchg(&speakup_paste_work.tty, NULL, tty)) {
> > > | ^~~~~~~
> > > include/linux/cmpxchg-emu.h:13:67: note: expected 'uintptr_t' {aka 'long unsigned int'} but argument is of type 'struct tty_struct *'
> > > 13 | uintptr_t cmpxchg_emu_u8(volatile u8 *p, uintptr_t old, uintptr_t new);
> > > | ~~~~~~~~~~^~~
> > > >> arch/riscv/include/asm/cmpxchg.h:329:23: warning: assignment to 'struct tty_struct *' from 'uintptr_t' {aka 'long unsigned int'} makes pointer from integer without a cast [-Wint-conversion]
> > > 329 | __ret = cmpxchg_emu_u8((volatile u8 *)__ptr, __old, __new); \
> > > | ^
> > > arch/riscv/include/asm/cmpxchg.h:368:30: note: in expansion of macro '__cmpxchg'
> > > 368 | (__typeof__(*(ptr))) __cmpxchg((ptr), \
> > > | ^~~~~~~~~
> > > include/linux/atomic/atomic-arch-fallback.h:55:21: note: in expansion of macro 'arch_cmpxchg'
> > > 55 | #define raw_cmpxchg arch_cmpxchg
> > > | ^~~~~~~~~~~~
> > > include/linux/atomic/atomic-instrumented.h:4788:9: note: in expansion of macro 'raw_cmpxchg'
> > > 4788 | raw_cmpxchg(__ai_ptr, __VA_ARGS__); \
> > > | ^~~~~~~~~~~
> > > drivers/accessibility/speakup/selection.c:124:13: note: in expansion of macro 'cmpxchg'
> > > 124 | if (cmpxchg(&speakup_paste_work.tty, NULL, tty)) {
> > > | ^~~~~~~
> > > arch/riscv/include/asm/cmpxchg.h:333:64: warning: passing argument 2 of 'cmpxchg_emu_u16' makes integer from pointer without a cast [-Wint-conversion]
> > > 333 | __ret = cmpxchg_emu_u16((volatile u16 *)__ptr, __old, __new); \
> > > | ^~~~~
> > > | |
> > > | struct tty_struct *
> > > arch/riscv/include/asm/cmpxchg.h:368:30: note: in expansion of macro '__cmpxchg'
> > > 368 | (__typeof__(*(ptr))) __cmpxchg((ptr), \
> > > | ^~~~~~~~~
> > > include/linux/atomic/atomic-arch-fallback.h:55:21: note: in expansion of macro 'arch_cmpxchg'
> > > 55 | #define raw_cmpxchg arch_cmpxchg
> > > | ^~~~~~~~~~~~
> > > include/linux/atomic/atomic-instrumented.h:4788:9: note: in expansion of macro 'raw_cmpxchg'
> > > 4788 | raw_cmpxchg(__ai_ptr, __VA_ARGS__); \
> > > | ^~~~~~~~~~~
> > > drivers/accessibility/speakup/selection.c:124:13: note: in expansion of macro 'cmpxchg'
> > > 124 | if (cmpxchg(&speakup_paste_work.tty, NULL, tty)) {
> > > | ^~~~~~~
> > > include/linux/cmpxchg-emu.h:14:54: note: expected 'uintptr_t' {aka 'long unsigned int'} but argument is of type 'struct tty_struct *'
> > > 14 | uintptr_t cmpxchg_emu_u16(volatile u16 *p, uintptr_t old, uintptr_t new);
> > > | ~~~~~~~~~~^~~
> > > arch/riscv/include/asm/cmpxchg.h:333:71: warning: passing argument 3 of 'cmpxchg_emu_u16' makes integer from pointer without a cast [-Wint-conversion]
> > > 333 | __ret = cmpxchg_emu_u16((volatile u16 *)__ptr, __old, __new); \
> > > | ^~~~~
> > > | |
> > > | struct tty_struct *
> > > arch/riscv/include/asm/cmpxchg.h:368:30: note: in expansion of macro '__cmpxchg'
> > > 368 | (__typeof__(*(ptr))) __cmpxchg((ptr), \
> > > | ^~~~~~~~~
> > > include/linux/atomic/atomic-arch-fallback.h:55:21: note: in expansion of macro 'arch_cmpxchg'
> > > 55 | #define raw_cmpxchg arch_cmpxchg
> > > | ^~~~~~~~~~~~
> > > include/linux/atomic/atomic-instrumented.h:4788:9: note: in expansion of macro 'raw_cmpxchg'
> > > 4788 | raw_cmpxchg(__ai_ptr, __VA_ARGS__); \
> > > | ^~~~~~~~~~~
> > > drivers/accessibility/speakup/selection.c:124:13: note: in expansion of macro 'cmpxchg'
> > > 124 | if (cmpxchg(&speakup_paste_work.tty, NULL, tty)) {
> > > | ^~~~~~~
> > > include/linux/cmpxchg-emu.h:14:69: note: expected 'uintptr_t' {aka 'long unsigned int'} but argument is of type 'struct tty_struct *'
> > > 14 | uintptr_t cmpxchg_emu_u16(volatile u16 *p, uintptr_t old, uintptr_t new);
> > > | ~~~~~~~~~~^~~
> > > arch/riscv/include/asm/cmpxchg.h:333:23: warning: assignment to 'struct tty_struct *' from 'uintptr_t' {aka 'long unsigned int'} makes pointer from integer without a cast [-Wint-conversion]
> > > 333 | __ret = cmpxchg_emu_u16((volatile u16 *)__ptr, __old, __new); \
> > > | ^
> > > arch/riscv/include/asm/cmpxchg.h:368:30: note: in expansion of macro '__cmpxchg'
> > > 368 | (__typeof__(*(ptr))) __cmpxchg((ptr), \
> > > | ^~~~~~~~~
> > > include/linux/atomic/atomic-arch-fallback.h:55:21: note: in expansion of macro 'arch_cmpxchg'
> > > 55 | #define raw_cmpxchg arch_cmpxchg
> > > | ^~~~~~~~~~~~
> > > include/linux/atomic/atomic-instrumented.h:4788:9: note: in expansion of macro 'raw_cmpxchg'
> > > 4788 | raw_cmpxchg(__ai_ptr, __VA_ARGS__); \
> > > | ^~~~~~~~~~~
> > > drivers/accessibility/speakup/selection.c:124:13: note: in expansion of macro 'cmpxchg'
> > > 124 | if (cmpxchg(&speakup_paste_work.tty, NULL, tty)) {
> > > | ^~~~~~~
> > > drivers/accessibility/speakup/selection.c: In function 'speakup_set_selection':
> > > arch/riscv/include/asm/cmpxchg.h:333:23: warning: this statement may fall through [-Wimplicit-fallthrough=]
> > > 333 | __ret = cmpxchg_emu_u16((volatile u16 *)__ptr, __old, __new); \
> > > | ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>
> Here is a fallthrough warning. Looks like a copy-paste typo. The "break"
> line and the "__ret = ..." line need to be swapped.
>
> > > arch/riscv/include/asm/cmpxchg.h:368:30: note: in expansion of macro '__cmpxchg'
> > > 368 | (__typeof__(*(ptr))) __cmpxchg((ptr), \
> > > | ^~~~~~~~~
> > > include/linux/atomic/atomic-arch-fallback.h:55:21: note: in expansion of macro 'arch_cmpxchg'
> > > 55 | #define raw_cmpxchg arch_cmpxchg
> > > | ^~~~~~~~~~~~
> > > include/linux/atomic/atomic-instrumented.h:4788:9: note: in expansion of macro 'raw_cmpxchg'
> > > 4788 | raw_cmpxchg(__ai_ptr, __VA_ARGS__); \
> > > | ^~~~~~~~~~~
> > > drivers/accessibility/speakup/selection.c:71:13: note: in expansion of macro 'cmpxchg'
> > > 71 | if (cmpxchg(&speakup_sel_work.tty, NULL, tty)) {
> > > | ^~~~~~~
> > > arch/riscv/include/asm/cmpxchg.h:334:9: note: here
> > > 334 | case 4: \
> > > | ^~~~
> > > arch/riscv/include/asm/cmpxchg.h:368:30: note: in expansion of macro '__cmpxchg'
> > > 368 | (__typeof__(*(ptr))) __cmpxchg((ptr), \
> > > | ^~~~~~~~~
> > > include/linux/atomic/atomic-arch-fallback.h:55:21: note: in expansion of macro 'arch_cmpxchg'
> > > 55 | #define raw_cmpxchg arch_cmpxchg
> > > | ^~~~~~~~~~~~
> > > include/linux/atomic/atomic-instrumented.h:4788:9: note: in expansion of macro 'raw_cmpxchg'
> > > 4788 | raw_cmpxchg(__ai_ptr, __VA_ARGS__); \
> > > | ^~~~~~~~~~~
> > > drivers/accessibility/speakup/selection.c:71:13: note: in expansion of macro 'cmpxchg'
> > > 71 | if (cmpxchg(&speakup_sel_work.tty, NULL, tty)) {
> > > | ^~~~~~~
> > >
> > >
> > > vim +329 arch/riscv/include/asm/cmpxchg.h
> > >
> > > 319
> > > 320 #define __cmpxchg(ptr, old, new, size) \
> > > 321 ({ \
> > > 322 __typeof__(ptr) __ptr = (ptr); \
> > > 323 __typeof__(*(ptr)) __old = (old); \
> > > 324 __typeof__(*(ptr)) __new = (new); \
> > > 325 __typeof__(*(ptr)) __ret; \
> > > 326 register unsigned int __rc; \
> > > 327 switch (size) { \
> > > 328 case 1: \
> > > > 329 __ret = cmpxchg_emu_u8((volatile u8 *)__ptr, __old, __new); \
> > > 330 break; \
> > > 331 case 2: \
> > > 332 break; \
> > > 333 __ret = cmpxchg_emu_u16((volatile u16 *)__ptr, __old, __new); \
>
> Seems "break" is supposed to come after the assignment of __ret.
>
> > > 334 case 4: \
> > > 335 __asm__ __volatile__ ( \
> > > 336 "0: lr.w %0, %2\n" \
> > > 337 " bne %0, %z3, 1f\n" \
> > > 338 " sc.w.rl %1, %z4, %2\n" \
> > > 339 " bnez %1, 0b\n" \
> > > 340 RISCV_FULL_BARRIER \
> > > 341 "1:\n" \
> > > 342 : "=&r" (__ret), "=&r" (__rc), "+A" (*__ptr) \
> > > 343 : "rJ" ((long)__old), "rJ" (__new) \
> > > 344 : "memory"); \
> > > 345 break; \
> > > 346 case 8: \
> > > 347 __asm__ __volatile__ ( \
> > > 348 "0: lr.d %0, %2\n" \
> > > 349 " bne %0, %z3, 1f\n" \
> > > 350 " sc.d.rl %1, %z4, %2\n" \
> > > 351 " bnez %1, 0b\n" \
> > > 352 RISCV_FULL_BARRIER \
> > > 353 "1:\n" \
> > > 354 : "=&r" (__ret), "=&r" (__rc), "+A" (*__ptr) \
> > > 355 : "rJ" (__old), "rJ" (__new) \
> > > 356 : "memory"); \
> > > 357 break; \
> > > 358 default: \
> > > 359 BUILD_BUG(); \
> > > 360 } \
> > > 361 __ret; \
> > > 362 })
> > > 363
> > >
> > > --
> > > 0-DAY CI Kernel Test Service
> > > https://github.com/intel/lkp-tests/wiki
> >
> > ------------------------------------------------------------------------
> >
> > diff --git a/arch/riscv/include/asm/cmpxchg.h b/arch/riscv/include/asm/cmpxchg.h
> > index a5b377481785c..fb1ac86ac2bf6 100644
> > --- a/arch/riscv/include/asm/cmpxchg.h
> > +++ b/arch/riscv/include/asm/cmpxchg.h
> > @@ -172,11 +172,11 @@
> > register unsigned int __rc; \
> > switch (size) { \
> > case 1: \
> > - __ret = cmpxchg_emu_u8((volatile u8 *)__ptr, __old, __new); \
> > + __ret = cmpxchg_emu_u8((volatile u8 *)__ptr, (uintptr_t)__old, (uintptr_t)__new); \
> > break; \
> > case 2: \
> > break; \
> > - __ret = cmpxchg_emu_u16((volatile u16 *)__ptr, __old, __new); \
> > + __ret = cmpxchg_emu_u16((volatile u16 *)__ptr, (uintptr_t)__old, (uintptr_t)__new); \
> > case 4: \
> > __asm__ __volatile__ ( \
> > "0: lr.w %0, %2\n" \
>
> I drafted an extended fix patch as below. Could you help review? Not
> sure if similar fixes should also be applied to the patches for other
> architectures in the series?
>
> Thanks,
> Yujie
>
> -------------------------------------------------------------------------
>
> diff --git a/arch/riscv/include/asm/cmpxchg.h b/arch/riscv/include/asm/cmpxchg.h
> index a5b377481785c..4d5c281b1aced 100644
> --- a/arch/riscv/include/asm/cmpxchg.h
> +++ b/arch/riscv/include/asm/cmpxchg.h
> @@ -172,11 +172,11 @@
> register unsigned int __rc; \
> switch (size) { \
> case 1: \
> - __ret = cmpxchg_emu_u8((volatile u8 *)__ptr, __old, __new); \
> + __ret = (__typeof__(*(ptr)))cmpxchg_emu_u8((volatile u8 *)__ptr, (uintptr_t)__old, (uintptr_t)__new); \
> break; \
> case 2: \
> + __ret = (__typeof__(*(ptr)))cmpxchg_emu_u16((volatile u16 *)__ptr, (uintptr_t)__old, (uintptr_t)__new); \
> break; \
> - __ret = cmpxchg_emu_u16((volatile u16 *)__ptr, __old, __new); \
> case 4: \
> __asm__ __volatile__ ( \
> "0: lr.w %0, %2\n" \
> @@ -222,11 +222,11 @@
> register unsigned int __rc; \
> switch (size) { \
> case 1: \
> - __ret = cmpxchg_emu_u8((volatile u8 *)__ptr, __old, __new); \
> + __ret = (__typeof__(*(ptr)))cmpxchg_emu_u8((volatile u8 *)__ptr, (uintptr_t)__old, (uintptr_t)__new); \
> break; \
> case 2: \
> + __ret = (__typeof__(*(ptr)))cmpxchg_emu_u16((volatile u16 *)__ptr, (uintptr_t)__old, (uintptr_t)__new); \
> break; \
> - __ret = cmpxchg_emu_u16((volatile u16 *)__ptr, __old, __new); \
> case 4: \
> __asm__ __volatile__ ( \
> "0: lr.w %0, %2\n" \
> @@ -274,11 +274,11 @@
> register unsigned int __rc; \
> switch (size) { \
> case 1: \
> - __ret = cmpxchg_emu_u8((volatile u8 *)__ptr, __old, __new); \
> + __ret = (__typeof__(*(ptr)))cmpxchg_emu_u8((volatile u8 *)__ptr, (uintptr_t)__old, (uintptr_t)__new); \
> break; \
> case 2: \
> + __ret = (__typeof__(*(ptr)))cmpxchg_emu_u16((volatile u16 *)__ptr, (uintptr_t)__old, (uintptr_t)__new); \
> break; \
> - __ret = cmpxchg_emu_u16((volatile u16 *)__ptr, __old, __new); \
> case 4: \
> __asm__ __volatile__ ( \
> RISCV_RELEASE_BARRIER \
> @@ -326,11 +326,11 @@
> register unsigned int __rc; \
> switch (size) { \
> case 1: \
> - __ret = cmpxchg_emu_u8((volatile u8 *)__ptr, __old, __new); \
> + __ret = (__typeof__(*(ptr)))cmpxchg_emu_u8((volatile u8 *)__ptr, (uintptr_t)__old, (uintptr_t)__new); \
> break; \
> case 2: \
> + __ret = (__typeof__(*(ptr)))cmpxchg_emu_u16((volatile u16 *)__ptr, (uintptr_t)__old, (uintptr_t)__new); \
> break; \
> - __ret = cmpxchg_emu_u16((volatile u16 *)__ptr, __old, __new); \
> case 4: \
> __asm__ __volatile__ ( \
> "0: lr.w %0, %2\n" \
>
prev parent reply other threads:[~2024-04-03 22:21 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-04-02 7:08 kernel test robot
2024-04-02 17:20 ` Paul E. McKenney
2024-04-03 6:57 ` Yujie Liu
2024-04-03 22:21 ` Paul E. McKenney [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=e9b05cbe-7e1d-426c-8d4a-805561342015@paulmck-laptop \
--to=paulmck@kernel.org \
--cc=linux-mm@kvack.org \
--cc=lkp@intel.com \
--cc=oe-kbuild-all@lists.linux.dev \
--cc=yujie.liu@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox