Hi Wen, Thank you for the patch! Yet something to improve: [auto build test ERROR on linus/master] [also build test ERROR on v6.1-rc2 next-20221026] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Wen-Yao/riscv-Rewrite-percpu-operations-and-support-cmpxchg-local-feature/20221026-184310 patch link: https://lore.kernel.org/r/20221026104015.565468-2-haiwenyao%40uniontech.com patch subject: [PATCH 1/2] riscv: percpu:Add riscv percpu operations config: riscv-rv32_defconfig compiler: clang version 16.0.0 (https://github.com/llvm/llvm-project 791a7ae1ba3efd6bca96338e10ffde557ba83920) reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # install riscv cross compiling tool for clang build # apt-get install binutils-riscv-linux-gnu # https://github.com/intel-lab-lkp/linux/commit/bb33e199935b65336d45c367d7581682dff63cdb git remote add linux-review https://github.com/intel-lab-lkp/linux git fetch --no-tags linux-review Wen-Yao/riscv-Rewrite-percpu-operations-and-support-cmpxchg-local-feature/20221026-184310 git checkout bb33e199935b65336d45c367d7581682dff63cdb # save the config file mkdir build_dir && cp config build_dir/.config COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=riscv SHELL=/bin/bash If you fix the issue, kindly add following tag where applicable | Reported-by: kernel test robot All errors (new ones prefixed by >>): In file included from fs/nfs/file.c:20: In file included from include/linux/module.h:13: In file included from include/linux/stat.h:19: In file included from include/linux/time.h:6: In file included from include/linux/math64.h:6: In file included from include/linux/math.h:6: In file included from ./arch/riscv/include/generated/asm/div64.h:1: In file included from include/asm-generic/div64.h:55: In file included from include/linux/log2.h:12: In file included from include/linux/bitops.h:68: In file included from arch/riscv/include/asm/bitops.h:14: In file included from include/linux/irqflags.h:17: >> arch/riscv/include/asm/percpu.h:38:1: error: instruction requires the following: RV64I Base Instruction Set PERCPU_OP(add, add, +) ^ arch/riscv/include/asm/percpu.h:25:5: note: expanded from macro 'PERCPU_OP' "amo" #asm_op ".d" \ ^ :1:2: note: instantiated into assembly here amoadd.d a1, s3, 0(a0) ^ In file included from fs/nfs/file.c:20: In file included from include/linux/module.h:13: In file included from include/linux/stat.h:19: In file included from include/linux/time.h:6: In file included from include/linux/math64.h:6: In file included from include/linux/math.h:6: In file included from ./arch/riscv/include/generated/asm/div64.h:1: In file included from include/asm-generic/div64.h:55: In file included from include/linux/log2.h:12: In file included from include/linux/bitops.h:68: In file included from arch/riscv/include/asm/bitops.h:14: In file included from include/linux/irqflags.h:17: >> arch/riscv/include/asm/percpu.h:38:1: error: instruction requires the following: RV64I Base Instruction Set PERCPU_OP(add, add, +) ^ arch/riscv/include/asm/percpu.h:25:5: note: expanded from macro 'PERCPU_OP' "amo" #asm_op ".d" \ ^ :1:2: note: instantiated into assembly here amoadd.d a1, s4, 0(a0) ^ 2 errors generated. -- In file included from fs/nfs/direct.c:43: In file included from include/linux/sched.h:14: In file included from include/linux/pid.h:5: In file included from include/linux/rculist.h:11: In file included from include/linux/rcupdate.h:26: In file included from include/linux/irqflags.h:17: >> arch/riscv/include/asm/percpu.h:38:1: error: instruction requires the following: RV64I Base Instruction Set PERCPU_OP(add, add, +) ^ arch/riscv/include/asm/percpu.h:25:5: note: expanded from macro 'PERCPU_OP' "amo" #asm_op ".d" \ ^ :1:2: note: instantiated into assembly here amoadd.d a1, s1, 0(a0) ^ In file included from fs/nfs/direct.c:43: In file included from include/linux/sched.h:14: In file included from include/linux/pid.h:5: In file included from include/linux/rculist.h:11: In file included from include/linux/rcupdate.h:26: In file included from include/linux/irqflags.h:17: >> arch/riscv/include/asm/percpu.h:38:1: error: instruction requires the following: RV64I Base Instruction Set PERCPU_OP(add, add, +) ^ arch/riscv/include/asm/percpu.h:25:5: note: expanded from macro 'PERCPU_OP' "amo" #asm_op ".d" \ ^ :1:2: note: instantiated into assembly here amoadd.d a1, s4, 0(a0) ^ 2 errors generated. -- In file included from fs/nfs/read.c:11: In file included from include/linux/time.h:6: In file included from include/linux/math64.h:6: In file included from include/linux/math.h:6: In file included from ./arch/riscv/include/generated/asm/div64.h:1: In file included from include/asm-generic/div64.h:55: In file included from include/linux/log2.h:12: In file included from include/linux/bitops.h:68: In file included from arch/riscv/include/asm/bitops.h:14: In file included from include/linux/irqflags.h:17: >> arch/riscv/include/asm/percpu.h:38:1: error: instruction requires the following: RV64I Base Instruction Set PERCPU_OP(add, add, +) ^ arch/riscv/include/asm/percpu.h:25:5: note: expanded from macro 'PERCPU_OP' "amo" #asm_op ".d" \ ^ :1:2: note: instantiated into assembly here amoadd.d a2, a0, 0(a1) ^ In file included from fs/nfs/read.c:11: In file included from include/linux/time.h:6: In file included from include/linux/math64.h:6: In file included from include/linux/math.h:6: In file included from ./arch/riscv/include/generated/asm/div64.h:1: In file included from include/asm-generic/div64.h:55: In file included from include/linux/log2.h:12: In file included from include/linux/bitops.h:68: In file included from arch/riscv/include/asm/bitops.h:14: In file included from include/linux/irqflags.h:17: >> arch/riscv/include/asm/percpu.h:38:1: error: instruction requires the following: RV64I Base Instruction Set PERCPU_OP(add, add, +) ^ arch/riscv/include/asm/percpu.h:25:5: note: expanded from macro 'PERCPU_OP' "amo" #asm_op ".d" \ ^ :1:2: note: instantiated into assembly here amoadd.d a2, a0, 0(a1) ^ In file included from fs/nfs/read.c:11: In file included from include/linux/time.h:6: In file included from include/linux/math64.h:6: In file included from include/linux/math.h:6: In file included from ./arch/riscv/include/generated/asm/div64.h:1: In file included from include/asm-generic/div64.h:55: In file included from include/linux/log2.h:12: In file included from include/linux/bitops.h:68: In file included from arch/riscv/include/asm/bitops.h:14: In file included from include/linux/irqflags.h:17: >> arch/riscv/include/asm/percpu.h:38:1: error: instruction requires the following: RV64I Base Instruction Set PERCPU_OP(add, add, +) ^ arch/riscv/include/asm/percpu.h:25:5: note: expanded from macro 'PERCPU_OP' "amo" #asm_op ".d" \ ^ :1:2: note: instantiated into assembly here amoadd.d a2, a1, 0(a0) ^ 3 errors generated. -- In file included from fs/nfs/write.c:11: In file included from include/linux/slab.h:15: In file included from include/linux/gfp.h:7: In file included from include/linux/mmzone.h:8: In file included from include/linux/spinlock.h:56: In file included from include/linux/preempt.h:78: In file included from ./arch/riscv/include/generated/asm/preempt.h:1: In file included from include/asm-generic/preempt.h:5: In file included from include/linux/thread_info.h:14: In file included from include/linux/restart_block.h:10: In file included from include/linux/time64.h:5: In file included from include/linux/math64.h:6: In file included from include/linux/math.h:6: In file included from ./arch/riscv/include/generated/asm/div64.h:1: In file included from include/asm-generic/div64.h:55: In file included from include/linux/log2.h:12: In file included from include/linux/bitops.h:68: In file included from arch/riscv/include/asm/bitops.h:14: In file included from include/linux/irqflags.h:17: >> arch/riscv/include/asm/percpu.h:38:1: error: instruction requires the following: RV64I Base Instruction Set PERCPU_OP(add, add, +) ^ arch/riscv/include/asm/percpu.h:25:5: note: expanded from macro 'PERCPU_OP' "amo" #asm_op ".d" \ ^ :1:2: note: instantiated into assembly here amoadd.d a2, a1, 0(a0) ^ In file included from fs/nfs/write.c:11: In file included from include/linux/slab.h:15: In file included from include/linux/gfp.h:7: In file included from include/linux/mmzone.h:8: In file included from include/linux/spinlock.h:56: In file included from include/linux/preempt.h:78: In file included from ./arch/riscv/include/generated/asm/preempt.h:1: In file included from include/asm-generic/preempt.h:5: In file included from include/linux/thread_info.h:14: In file included from include/linux/restart_block.h:10: In file included from include/linux/time64.h:5: In file included from include/linux/math64.h:6: In file included from include/linux/math.h:6: In file included from ./arch/riscv/include/generated/asm/div64.h:1: In file included from include/asm-generic/div64.h:55: In file included from include/linux/log2.h:12: In file included from include/linux/bitops.h:68: In file included from arch/riscv/include/asm/bitops.h:14: In file included from include/linux/irqflags.h:17: >> arch/riscv/include/asm/percpu.h:38:1: error: instruction requires the following: RV64I Base Instruction Set PERCPU_OP(add, add, +) ^ arch/riscv/include/asm/percpu.h:25:5: note: expanded from macro 'PERCPU_OP' "amo" #asm_op ".d" \ ^ :1:2: note: instantiated into assembly here amoadd.d a2, a1, 0(a0) ^ 2 errors generated. -- In file included from fs/ext4/mballoc.c:12: In file included from fs/ext4/ext4_jbd2.h:15: In file included from include/linux/fs.h:6: In file included from include/linux/wait_bit.h:8: In file included from include/linux/wait.h:9: In file included from include/linux/spinlock.h:56: In file included from include/linux/preempt.h:78: In file included from ./arch/riscv/include/generated/asm/preempt.h:1: In file included from include/asm-generic/preempt.h:5: In file included from include/linux/thread_info.h:14: In file included from include/linux/restart_block.h:10: In file included from include/linux/time64.h:5: In file included from include/linux/math64.h:6: In file included from include/linux/math.h:6: In file included from ./arch/riscv/include/generated/asm/div64.h:1: In file included from include/asm-generic/div64.h:55: In file included from include/linux/log2.h:12: In file included from include/linux/bitops.h:68: In file included from arch/riscv/include/asm/bitops.h:14: In file included from include/linux/irqflags.h:17: >> arch/riscv/include/asm/percpu.h:38:1: error: instruction requires the following: RV64I Base Instruction Set PERCPU_OP(add, add, +) ^ arch/riscv/include/asm/percpu.h:25:5: note: expanded from macro 'PERCPU_OP' "amo" #asm_op ".d" \ ^ :1:2: note: instantiated into assembly here amoadd.d a2, a1, 0(a0) ^ In file included from fs/ext4/mballoc.c:12: In file included from fs/ext4/ext4_jbd2.h:15: In file included from include/linux/fs.h:6: In file included from include/linux/wait_bit.h:8: In file included from include/linux/wait.h:9: In file included from include/linux/spinlock.h:56: In file included from include/linux/preempt.h:78: In file included from ./arch/riscv/include/generated/asm/preempt.h:1: In file included from include/asm-generic/preempt.h:5: In file included from include/linux/thread_info.h:14: In file included from include/linux/restart_block.h:10: In file included from include/linux/time64.h:5: In file included from include/linux/math64.h:6: In file included from include/linux/math.h:6: In file included from ./arch/riscv/include/generated/asm/div64.h:1: In file included from include/asm-generic/div64.h:55: In file included from include/linux/log2.h:12: In file included from include/linux/bitops.h:68: In file included from arch/riscv/include/asm/bitops.h:14: In file included from include/linux/irqflags.h:17: >> arch/riscv/include/asm/percpu.h:38:1: error: instruction requires the following: RV64I Base Instruction Set PERCPU_OP(add, add, +) ^ arch/riscv/include/asm/percpu.h:25:5: note: expanded from macro 'PERCPU_OP' "amo" #asm_op ".d" \ ^ :1:2: note: instantiated into assembly here amoadd.d a4, a3, 0(a2) ^ In file included from fs/ext4/mballoc.c:12: In file included from fs/ext4/ext4_jbd2.h:15: In file included from include/linux/fs.h:6: In file included from include/linux/wait_bit.h:8: In file included from include/linux/wait.h:9: In file included from include/linux/spinlock.h:56: In file included from include/linux/preempt.h:78: In file included from ./arch/riscv/include/generated/asm/preempt.h:1: In file included from include/asm-generic/preempt.h:5: In file included from include/linux/thread_info.h:14: In file included from include/linux/restart_block.h:10: In file included from include/linux/time64.h:5: In file included from include/linux/math64.h:6: In file included from include/linux/math.h:6: In file included from ./arch/riscv/include/generated/asm/div64.h:1: In file included from include/asm-generic/div64.h:55: In file included from include/linux/log2.h:12: In file included from include/linux/bitops.h:68: In file included from arch/riscv/include/asm/bitops.h:14: In file included from include/linux/irqflags.h:17: >> arch/riscv/include/asm/percpu.h:38:1: error: instruction requires the following: RV64I Base Instruction Set PERCPU_OP(add, add, +) ^ arch/riscv/include/asm/percpu.h:25:5: note: expanded from macro 'PERCPU_OP' "amo" #asm_op ".d" \ ^ :1:2: note: instantiated into assembly here amoadd.d a1, s9, 0(a0) ^ 3 errors generated. -- In file included from net/ipv6/ip6_output.c:26: In file included from include/linux/kernel.h:22: In file included from include/linux/bitops.h:68: In file included from arch/riscv/include/asm/bitops.h:14: In file included from include/linux/irqflags.h:17: >> arch/riscv/include/asm/percpu.h:38:1: error: instruction requires the following: RV64I Base Instruction Set PERCPU_OP(add, add, +) ^ arch/riscv/include/asm/percpu.h:25:5: note: expanded from macro 'PERCPU_OP' "amo" #asm_op ".d" \ ^ :1:2: note: instantiated into assembly here amoadd.d a4, a3, 0(a2) ^ In file included from net/ipv6/ip6_output.c:26: In file included from include/linux/kernel.h:22: In file included from include/linux/bitops.h:68: In file included from arch/riscv/include/asm/bitops.h:14: In file included from include/linux/irqflags.h:17: >> arch/riscv/include/asm/percpu.h:38:1: error: instruction requires the following: RV64I Base Instruction Set PERCPU_OP(add, add, +) ^ arch/riscv/include/asm/percpu.h:25:5: note: expanded from macro 'PERCPU_OP' "amo" #asm_op ".d" \ ^ :1:2: note: instantiated into assembly here amoadd.d a2, a3, 0(a1) ^ In file included from net/ipv6/ip6_output.c:26: In file included from include/linux/kernel.h:22: In file included from include/linux/bitops.h:68: In file included from arch/riscv/include/asm/bitops.h:14: In file included from include/linux/irqflags.h:17: >> arch/riscv/include/asm/percpu.h:38:1: error: instruction requires the following: RV64I Base Instruction Set PERCPU_OP(add, add, +) ^ arch/riscv/include/asm/percpu.h:25:5: note: expanded from macro 'PERCPU_OP' "amo" #asm_op ".d" \ ^ :1:2: note: instantiated into assembly here amoadd.d a4, a3, 0(a2) ^ In file included from net/ipv6/ip6_output.c:26: In file included from include/linux/kernel.h:22: In file included from include/linux/bitops.h:68: In file included from arch/riscv/include/asm/bitops.h:14: In file included from include/linux/irqflags.h:17: >> arch/riscv/include/asm/percpu.h:38:1: error: instruction requires the following: RV64I Base Instruction Set PERCPU_OP(add, add, +) ^ arch/riscv/include/asm/percpu.h:25:5: note: expanded from macro 'PERCPU_OP' "amo" #asm_op ".d" \ ^ :1:2: note: instantiated into assembly here amoadd.d a1, a2, 0(a0) ^ In file included from net/ipv6/ip6_output.c:26: In file included from include/linux/kernel.h:22: In file included from include/linux/bitops.h:68: In file included from arch/riscv/include/asm/bitops.h:14: In file included from include/linux/irqflags.h:17: >> arch/riscv/include/asm/percpu.h:38:1: error: instruction requires the following: RV64I Base Instruction Set PERCPU_OP(add, add, +) ^ arch/riscv/include/asm/percpu.h:25:5: note: expanded from macro 'PERCPU_OP' "amo" #asm_op ".d" \ ^ :1:2: note: instantiated into assembly here amoadd.d a4, a3, 0(a2) ^ In file included from net/ipv6/ip6_output.c:26: In file included from include/linux/kernel.h:22: In file included from include/linux/bitops.h:68: In file included from arch/riscv/include/asm/bitops.h:14: In file included from include/linux/irqflags.h:17: >> arch/riscv/include/asm/percpu.h:38:1: error: instruction requires the following: RV64I Base Instruction Set PERCPU_OP(add, add, +) ^ arch/riscv/include/asm/percpu.h:25:5: note: expanded from macro 'PERCPU_OP' "amo" #asm_op ".d" \ ^ :1:2: note: instantiated into assembly here amoadd.d a2, a3, 0(a1) ^ In file included from net/ipv6/ip6_output.c:26: In file included from include/linux/kernel.h:22: In file included from include/linux/bitops.h:68: In file included from arch/riscv/include/asm/bitops.h:14: In file included from include/linux/irqflags.h:17: >> arch/riscv/include/asm/percpu.h:38:1: error: instruction requires the following: RV64I Base Instruction Set PERCPU_OP(add, add, +) ^ arch/riscv/include/asm/percpu.h:25:5: note: expanded from macro 'PERCPU_OP' "amo" #asm_op ".d" \ ^ :1:2: note: instantiated into assembly here amoadd.d a4, a3, 0(a2) ^ In file included from net/ipv6/ip6_output.c:26: In file included from include/linux/kernel.h:22: In file included from include/linux/bitops.h:68: In file included from arch/riscv/include/asm/bitops.h:14: In file included from include/linux/irqflags.h:17: >> arch/riscv/include/asm/percpu.h:38:1: error: instruction requires the following: RV64I Base Instruction Set PERCPU_OP(add, add, +) ^ arch/riscv/include/asm/percpu.h:25:5: note: expanded from macro 'PERCPU_OP' "amo" #asm_op ".d" \ ^ :1:2: note: instantiated into assembly here amoadd.d a2, a3, 0(a1) ^ In file included from net/ipv6/ip6_output.c:26: In file included from include/linux/kernel.h:22: In file included from include/linux/bitops.h:68: In file included from arch/riscv/include/asm/bitops.h:14: In file included from include/linux/irqflags.h:17: >> arch/riscv/include/asm/percpu.h:38:1: error: instruction requires the following: RV64I Base Instruction Set PERCPU_OP(add, add, +) ^ arch/riscv/include/asm/percpu.h:25:5: note: expanded from macro 'PERCPU_OP' "amo" #asm_op ".d" \ ^ :1:2: note: instantiated into assembly here amoadd.d a4, a3, 0(a1) ^ In file included from net/ipv6/ip6_output.c:26: In file included from include/linux/kernel.h:22: In file included from include/linux/bitops.h:68: In file included from arch/riscv/include/asm/bitops.h:14: In file included from include/linux/irqflags.h:17: >> arch/riscv/include/asm/percpu.h:38:1: error: instruction requires the following: RV64I Base Instruction Set PERCPU_OP(add, add, +) ^ arch/riscv/include/asm/percpu.h:25:5: note: expanded from macro 'PERCPU_OP' "amo" #asm_op ".d" \ ^ :1:2: note: instantiated into assembly here amoadd.d a1, a2, 0(a0) ^ In file included from net/ipv6/ip6_output.c:26: In file included from include/linux/kernel.h:22: In file included from include/linux/bitops.h:68: In file included from arch/riscv/include/asm/bitops.h:14: In file included from include/linux/irqflags.h:17: >> arch/riscv/include/asm/percpu.h:38:1: error: instruction requires the following: RV64I Base Instruction Set PERCPU_OP(add, add, +) ^ arch/riscv/include/asm/percpu.h:25:5: note: expanded from macro 'PERCPU_OP' "amo" #asm_op ".d" \ ^ :1:2: note: instantiated into assembly here amoadd.d a4, a3, 0(a1) ^ In file included from net/ipv6/ip6_output.c:26: In file included from include/linux/kernel.h:22: In file included from include/linux/bitops.h:68: In file included from arch/riscv/include/asm/bitops.h:14: In file included from include/linux/irqflags.h:17: >> arch/riscv/include/asm/percpu.h:38:1: error: instruction requires the following: RV64I Base Instruction Set PERCPU_OP(add, add, +) ^ arch/riscv/include/asm/percpu.h:25:5: note: expanded from macro 'PERCPU_OP' "amo" #asm_op ".d" \ ^ :1:2: note: instantiated into assembly here amoadd.d a1, a2, 0(a0) ^ 12 errors generated. .. vim +38 arch/riscv/include/asm/percpu.h 9 10 #define PERCPU_OP(op, asm_op, c_op) \ 11 static inline unsigned long __percpu_##op(void *ptr, \ 12 unsigned long val, int size) \ 13 { \ 14 unsigned long ret; \ 15 switch (size) { \ 16 case 4: \ 17 __asm__ __volatile__( \ 18 "amo" #asm_op ".w" \ 19 " %[ret], %[val], %[ptr]\n" \ 20 : [ret] "=&r"(ret), [ptr] "+A"(*(u32 *)ptr) \ 21 : [val] "r"(val)); \ 22 break; \ 23 case 8: \ 24 __asm__ __volatile__( \ 25 "amo" #asm_op ".d" \ 26 " %[ret], %[val], %[ptr]\n" \ 27 : [ret] "=&r"(ret), [ptr] "+A"(*(u64 *)ptr) \ 28 : [val] "r"(val)); \ 29 break; \ 30 default: \ 31 ret = 0; \ 32 BUILD_BUG(); \ 33 } \ 34 \ 35 return ret c_op val; \ 36 } 37 > 38 PERCPU_OP(add, add, +) 39 PERCPU_OP(and, and, &) 40 PERCPU_OP(or, or, |) 41 #undef PERCPU_OP 42 -- 0-DAY CI Kernel Test Service https://01.org/lkp