:::::: :::::: Manual check reason: "low confidence bisect report" :::::: Manual check reason: "low confidence static check first_new_problem: include/asm-generic/bitops/generic-non-atomic.h:32:9: warning: use of uninitialized value 'tmpmask[0].bits[0]' [CWE-457] [-Wanalyzer-use-of-uninitialized-value]" ::::::
CC: [email protected] BCC: [email protected] TO: Yury Norov <[email protected]> tree: https://github.com/norov/linux __bitmap-for-next head: 7ea69874eca96eba31079f53bff149543ee3da1a commit: 3e7e5baaaba78075a7f3a57432609e363bf2a486 [9/30] bitmap: don't assume compiler evaluates small mem*() builtins calls :::::: branch date: 2 days ago :::::: commit date: 3 weeks ago config: arm-randconfig-c002-20220718 (https://download.01.org/0day-ci/archive/20220725/[email protected]/config) compiler: arm-linux-gnueabi-gcc (GCC) 12.1.0 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 # https://github.com/norov/linux/commit/3e7e5baaaba78075a7f3a57432609e363bf2a486 git remote add norov https://github.com/norov/linux git fetch --no-tags norov __bitmap-for-next git checkout 3e7e5baaaba78075a7f3a57432609e363bf2a486 # save the config file ARCH=arm KBUILD_USERCFLAGS='-fanalyzer -Wno-error' If you fix the issue, kindly add following tag where applicable Reported-by: kernel test robot <[email protected]> gcc-analyzer warnings: (new ones prefixed by >>) In file included from include/linux/bitops.h:34, from include/linux/kernel.h:22, from include/linux/cpumask.h:10, from include/linux/smp.h:13, from include/linux/sched/clock.h:5, from kernel/sched/build_utility.c:12: In function 'generic___set_bit', inlined from '__cpumask_set_cpu' at include/linux/cpumask.h:351:2, inlined from 'membarrier_private_expedited' at kernel/sched/membarrier.c:372:5: >> include/asm-generic/bitops/generic-non-atomic.h:32:9: warning: use of >> uninitialized value 'tmpmask[0].bits[0]' [CWE-457] >> [-Wanalyzer-use-of-uninitialized-value] 32 | *p |= mask; | ^~ 'membarrier_private_expedited': events 1-4 | |kernel/sched/membarrier.c:311:23: | 311 | cpumask_var_t tmpmask; | | ^~~~~~~ | | | | | (1) region created on stack here |...... | 318 | if (!(atomic_read(&mm->membarrier_state) & | | ~ | | | | | (2) following 'false' branch... |...... | 336 | if (flags != MEMBARRIER_FLAG_SYNC_CORE && | | ~ | | | | | (3) ...to here | | (4) following 'false' branch (when 'flags == 1')... | 'membarrier_private_expedited': event 5 | |include/linux/compiler.h:86:20: | 86 | # define barrier() __asm__ __volatile__("": : :"memory") | | ^~~~~~~ | | | | | (5) ...to here include/asm-generic/barrier.h:105:25: note: in expansion of macro 'barrier' | 105 | #define smp_mb() barrier() | | ^~~~~~~ kernel/sched/membarrier.c:344:9: note: in expansion of macro 'smp_mb' | 344 | smp_mb(); /* system call entry is not a mb. */ | | ^~~~~~ | 'membarrier_private_expedited': event 6 | | 346 | if (cpu_id < 0 && !zalloc_cpumask_var(&tmpmask, GFP_KERNEL)) | | ^ | | | | | (6) following 'true' branch (when 'cpu_id < 0')... | 'membarrier_private_expedited': event 7 | |include/linux/bitmap.h:243:22: | 243 | *dst = 0; | | ~~~~~^~~ | | | | | (7) ...to here | 'membarrier_private_expedited': event 8 | |include/linux/cpumask.h:190:31: | 190 | for ((cpu) = 0; (cpu) < 1; (cpu)++, (void)mask) | | ~~~~~~^~~ | | | | | (8) following 'true' branch (when 'cpu == 0')... include/linux/cpumask.h:815:36: note: in expansion of macro 'for_each_cpu' | 815 | #define for_each_online_cpu(cpu) for_each_cpu((cpu), cpu_online_mask) | | ^~~~~~~~~~~~ kernel/sched/membarrier.c:367:17: note: in expansion of macro 'for_each_online_cpu' | 367 | for_each_online_cpu(cpu) { | | ^~~~~~~~~~~~~~~~~~~ | 'membarrier_private_expedited': event 9 | |include/asm-generic/rwonce.h:44:26: | 44 | #define __READ_ONCE(x) (*(const volatile __unqual_scalar_typeof(x) *)&(x)) | | ~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (9) ...to here include/asm-generic/rwonce.h:50:9: note: in expansion of macro '__READ_ONCE' | 50 | __READ_ONCE(x); \ | | ^~~~~~~~~~~ include/linux/rcupdate.h:392:50: note: in expansion of macro 'READ_ONCE' | 392 | typeof(*p) *local = (typeof(*p) *__force)READ_ONCE(p); \ | | ^~~~~~~~~ include/linux/rcupdate.h:532:9: note: in expansion of macro '__rcu_dereference_check' | 532 | __rcu_dereference_check((p), __UNIQUE_ID(rcu), \ | | ^~~~~~~~~~~~~~~~~~~~~~~ include/linux/rcupdate.h:604:28: note: in expansion of macro 'rcu_dereference_check' | 604 | #define rcu_dereference(p) rcu_dereference_check(p, 0) | | ^~~~~~~~~~~~~~~~~~~~~ kernel/sched/membarrier.c:370:29: note: in expansion of macro 'rcu_dereference' | 370 | p = rcu_dereference(cpu_rq(cpu)->curr); | | ^~~~~~~~~~~~~~~ | 'membarrier_private_expedited': event 10 | |include/asm-generic/bitops/generic-non-atomic.h:32:9: | 32 | *p |= mask; | | ^~ | | | | | (10) use of uninitialized value 'tmpmask[0].bits[0]' here | >> include/asm-generic/bitops/generic-non-atomic.h:32:9: warning: use of >> uninitialized value 'tmpmask[0].bits[0]' [CWE-457] >> [-Wanalyzer-use-of-uninitialized-value] '__do_sys_membarrier': event 1 | |include/linux/syscalls.h:255:28: | 255 | static inline long __do_sys##name(__MAP(x,__SC_DECL,__VA_ARGS__)) | | ^~~~~~~~ | | | | | (1) entry to '__do_sys_membarrier' include/linux/syscalls.h:228:9: note: in expansion of macro '__SYSCALL_DEFINEx' | 228 | __SYSCALL_DEFINEx(x, sname, __VA_ARGS__) | | ^~~~~~~~~~~~~~~~~ include/linux/syscalls.h:219:36: note: in expansion of macro 'SYSCALL_DEFINEx' | 219 | #define SYSCALL_DEFINE3(name, ...) SYSCALL_DEFINEx(3, _##name, __VA_ARGS__) | | ^~~~~~~~~~~~~~~ kernel/sched/membarrier.c:579:1: note: in expansion of macro 'SYSCALL_DEFINE3' | 579 | SYSCALL_DEFINE3(membarrier, int, cmd, unsigned int, flags, int, cpu_id) | | ^~~~~~~~~~~~~~~ | '__do_sys_membarrier': events 2-6 | | 587 | if (unlikely(flags)) | | ^ | | | | | (2) following 'false' branch... |...... | 591 | if (!(flags & MEMBARRIER_CMD_FLAG_CPU)) | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (3) ...to here |...... | 594 | switch (cmd) { | | ~~~~~~ | | | | | (4) following 'case 32:' branch... |...... | 618 | case MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE: | | ~~~~ | | | | | (5) ...to here | 619 | return membarrier_private_expedited(MEMBARRIER_FLAG_SYNC_CORE, cpu_id); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (6) calling 'membarrier_private_expedited' from '__do_sys_membarrier' | +--> 'membarrier_private_expedited': events 7-9 | | 309 | static int membarrier_private_expedited(int flags, int cpu_id) | | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (7) entry to 'membarrier_private_expedited' | 310 | { | 311 | cpumask_var_t tmpmask; | | ~~~~~~~ | | | | | (8) region created on stack here |...... | 315 | if (flags == MEMBARRIER_FLAG_SYNC_CORE) { | | ~ | | | | | (9) following 'true' branch (when 'flags == 1')... | 'membarrier_private_expedited': event 10 | |include/asm-generic/rwonce.h:44:26: | 44 | #define __READ_ONCE(x) (*(const volatile __unqual_scalar_typeof(x) *)&(x)) | | ~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (10) ...to here include/asm-generic/rwonce.h:50:9: note: in expansion of macro '__READ_ONCE' | 50 | __READ_ONCE(x); \ | | ^~~~~~~~~~~ arch/arm/include/asm/atomic.h:25:33: note: in expansion of macro 'READ_ONCE' | 25 | #define arch_atomic_read(v) READ_ONCE((v)->counter) | | ^~~~~~~~~ include/linux/atomic/atomic-instrumented.h:28:16: note: in expansion of macro 'arch_atomic_read' | 28 | return arch_atomic_read(v); | | ^~~~~~~~~~~~~~~~ | 'membarrier_private_expedited': events 11-13 | |kernel/sched/membarrier.c:318:20: | 318 | if (!(atomic_read(&mm->membarrier_state) & | | ^ | | | | | (11) following 'false' branch... |...... | 336 | if (flags != MEMBARRIER_FLAG_SYNC_CORE && | | ~ | | | | | (12) ...to here | | (13) following 'false' branch (when 'flags == 1')... | 'membarrier_private_expedited': event 14 | |include/linux/compiler.h:86:20: | 86 | # define barrier() __asm__ __volatile__("": : :"memory") | | ^~~~~~~ | | | | | (14) ...to here include/asm-generic/barrier.h:105:25: note: in expansion of macro 'barrier' | 105 | #define smp_mb() barrier() | | ^~~~~~~ kernel/sched/membarrier.c:344:9: note: in expansion of macro 'smp_mb' | 344 | smp_mb(); /* system call entry is not a mb. */ | | ^~~~~~ | 'membarrier_private_expedited': event 15 | | 346 | if (cpu_id < 0 && !zalloc_cpumask_var(&tmpmask, GFP_KERNEL)) | | ^ | | | | | (15) following 'true' branch (when 'cpu_id < 0')... | 'membarrier_private_expedited': event 16 | |include/linux/bitmap.h:243:22: | 243 | *dst = 0; | | ~~~~~^~~ | | | | | (16) ...to here | 'membarrier_private_expedited': event 17 | |include/linux/cpumask.h:190:31: | 190 | for ((cpu) = 0; (cpu) < 1; (cpu)++, (void)mask) | | ~~~~~~^~~ | | | | | (17) following 'true' branch (when 'cpu == 0')... include/linux/cpumask.h:815:36: note: in expansion of macro 'for_each_cpu' | 815 | #define for_each_online_cpu(cpu) for_each_cpu((cpu), cpu_online_mask) | | ^~~~~~~~~~~~ kernel/sched/membarrier.c:367:17: note: in expansion of macro 'for_each_online_cpu' | 367 | for_each_online_cpu(cpu) { | | ^~~~~~~~~~~~~~~~~~~ | 'membarrier_private_expedited': event 18 | |include/asm-generic/rwonce.h:44:26: | 44 | #define __READ_ONCE(x) (*(const volatile __unqual_scalar_typeof(x) *)&(x)) | | ~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (18) ...to here include/asm-generic/rwonce.h:50:9: note: in expansion of macro '__READ_ONCE' | 50 | __READ_ONCE(x); \ | | ^~~~~~~~~~~ include/linux/rcupdate.h:392:50: note: in expansion of macro 'READ_ONCE' | 392 | typeof(*p) *local = (typeof(*p) *__force)READ_ONCE(p); \ | | ^~~~~~~~~ include/linux/rcupdate.h:532:9: note: in expansion of macro '__rcu_dereference_check' | 532 | __rcu_dereference_check((p), __UNIQUE_ID(rcu), \ | | ^~~~~~~~~~~~~~~~~~~~~~~ include/linux/rcupdate.h:604:28: note: in expansion of macro 'rcu_dereference_check' | 604 | #define rcu_dereference(p) rcu_dereference_check(p, 0) | | ^~~~~~~~~~~~~~~~~~~~~ kernel/sched/membarrier.c:370:29: note: in expansion of macro 'rcu_dereference' | 370 | p = rcu_dereference(cpu_rq(cpu)->curr); | | ^~~~~~~~~~~~~~~ | 'membarrier_private_expedited': event 19 | |include/asm-generic/bitops/generic-non-atomic.h:32:9: | 32 | *p |= mask; | | ^~ | | | | | (19) use of uninitialized value 'tmpmask[0].bits[0]' here | >> include/asm-generic/bitops/generic-non-atomic.h:32:9: warning: use of >> uninitialized value 'tmpmask[0].bits[0]' [CWE-457] >> [-Wanalyzer-use-of-uninitialized-value] '__se_sys_membarrier': event 1 | |include/linux/syscalls.h:247:25: | 247 | asmlinkage long __se_sys##name(__MAP(x,__SC_LONG,__VA_ARGS__)) \ | | ^~~~~~~~ | | | | | (1) entry to '__se_sys_membarrier' include/linux/syscalls.h:228:9: note: in expansion of macro '__SYSCALL_DEFINEx' | 228 | __SYSCALL_DEFINEx(x, sname, __VA_ARGS__) | | ^~~~~~~~~~~~~~~~~ include/linux/syscalls.h:219:36: note: in expansion of macro 'SYSCALL_DEFINEx' | 219 | #define SYSCALL_DEFINE3(name, ...) SYSCALL_DEFINEx(3, _##name, __VA_ARGS__) | | ^~~~~~~~~~~~~~~ kernel/sched/membarrier.c:579:1: note: in expansion of macro 'SYSCALL_DEFINE3' | 579 | SYSCALL_DEFINE3(membarrier, int, cmd, unsigned int, flags, int, cpu_id) | | ^~~~~~~~~~~~~~~ | '__se_sys_membarrier': event 2 | |include/linux/syscalls.h:249:28: | 249 | long ret = __do_sys##name(__MAP(x,__SC_CAST,__VA_ARGS__));\ | | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (2) calling '__do_sys_membarrier' from '__se_sys_membarrier' include/linux/syscalls.h:228:9: note: in expansion of macro '__SYSCALL_DEFINEx' | 228 | __SYSCALL_DEFINEx(x, sname, __VA_ARGS__) | | ^~~~~~~~~~~~~~~~~ include/linux/syscalls.h:219:36: note: in expansion of macro 'SYSCALL_DEFINEx' | 219 | #define SYSCALL_DEFINE3(name, ...) SYSCALL_DEFINEx(3, _##name, __VA_ARGS__) | | ^~~~~~~~~~~~~~~ kernel/sched/membarrier.c:579:1: note: in expansion of macro 'SYSCALL_DEFINE3' | 579 | SYSCALL_DEFINE3(membarrier, int, cmd, unsigned int, flags, int, cpu_id) | | ^~~~~~~~~~~~~~~ | +--> '__do_sys_membarrier': event 3 | |include/linux/syscalls.h:255:28: | 255 | static inline long __do_sys##name(__MAP(x,__SC_DECL,__VA_ARGS__)) | | ^~~~~~~~ | | | | | (3) entry to '__do_sys_membarrier' include/linux/syscalls.h:228:9: note: in expansion of macro '__SYSCALL_DEFINEx' | 228 | __SYSCALL_DEFINEx(x, sname, __VA_ARGS__) | | ^~~~~~~~~~~~~~~~~ include/linux/syscalls.h:219:36: note: in expansion of macro 'SYSCALL_DEFINEx' | 219 | #define SYSCALL_DEFINE3(name, ...) SYSCALL_DEFINEx(3, _##name, __VA_ARGS__) | | ^~~~~~~~~~~~~~~ kernel/sched/membarrier.c:579:1: note: in expansion of macro 'SYSCALL_DEFINE3' | 579 | SYSCALL_DEFINE3(membarrier, int, cmd, unsigned int, flags, int, cpu_id) | | ^~~~~~~~~~~~~~~ | '__do_sys_membarrier': events 4-8 | | 587 | if (unlikely(flags)) | | ^ | | | | | (4) following 'false' branch... |...... | 591 | if (!(flags & MEMBARRIER_CMD_FLAG_CPU)) | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (5) ...to here |...... | 594 | switch (cmd) { | | ~~~~~~ | | | | | (6) following 'case 32:' branch... |...... | 618 | case MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE: | | ~~~~ | | | | | (7) ...to here | 619 | return membarrier_private_expedited(MEMBARRIER_FLAG_SYNC_CORE, cpu_id); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (8) calling 'membarrier_private_expedited' from '__do_sys_membarrier' | +--> 'membarrier_private_expedited': events 9-11 | | 309 | static int membarrier_private_expedited(int flags, int cpu_id) | | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (9) entry to 'membarrier_private_expedited' | 310 | { | 311 | cpumask_var_t tmpmask; | | ~~~~~~~ | | | | | (10) region created on stack here |...... | 315 | if (flags == MEMBARRIER_FLAG_SYNC_CORE) { | | ~ | | | | | (11) following 'true' branch (when 'flags == 1')... | 'membarrier_private_expedited': event 12 | |include/asm-generic/rwonce.h:44:26: | 44 | #define __READ_ONCE(x) (*(const volatile __unqual_scalar_typeof(x) *)&(x)) | | ~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | -- lib/bitmap.c: In function 'bitmap_check_region': >> lib/bitmap.c:652:35: warning: use of uninitialized value '*r.group_len' >> [CWE-457] [-Wanalyzer-use-of-uninitialized-value] 652 | if (r->start > r->end || r->group_len == 0 || r->off > r->group_len) | ~^~~~~~~~~~~ 'bitmap_parselist_user': events 1-4 | | 837 | int bitmap_parselist_user(const char __user *ubuf, | | ^~~~~~~~~~~~~~~~~~~~~ | | | | | (1) entry to 'bitmap_parselist_user' |...... | 845 | if (IS_ERR(buf)) | | ~ | | | | | (2) following 'false' branch... |...... | 848 | ret = bitmap_parselist(buf, maskp, nmaskbits); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (3) ...to here | | (4) calling 'bitmap_parselist' from 'bitmap_parselist_user' | +--> 'bitmap_parselist': events 5-7 | | 796 | int bitmap_parselist(const char *buf, unsigned long *maskp, int nmaskbits) | | ^~~~~~~~~~~~~~~~ | | | | | (5) entry to 'bitmap_parselist' | 797 | { | 798 | struct region r; | | ~ | | | | | (6) region created on stack here |...... | 802 | bitmap_zero(maskp, r.nbits); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (7) calling 'bitmap_zero' from 'bitmap_parselist' | +--> 'bitmap_zero': events 8-10 | |include/linux/bitmap.h:238:20: | 238 | static inline void bitmap_zero(unsigned long *dst, unsigned int nbits) | | ^~~~~~~~~~~ | | | | | (8) entry to 'bitmap_zero' |...... | 242 | if (small_const_nbits(nbits)) | | ~ | | | | | (9) following 'true' branch... | 243 | *dst = 0; | | ~~~~~~~~ | | | | | (10) ...to here | <------+ | 'bitmap_parselist': events 11-14 | |lib/bitmap.c:802:9: | 802 | bitmap_zero(maskp, r.nbits); | | ^~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (11) returning to 'bitmap_parselist' from 'bitmap_zero' | 803 | | 804 | while (buf) { | | ~~~ | | | | | (12) following 'true' branch (when 'buf' is non-NULL)... | 805 | buf = bitmap_find_region(buf); | | ~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (13) ...to here | | (14) calling 'bitmap_find_region' from 'bitmap_parselist' | +--> 'bitmap_find_region': events 15-18 | | 701 | static const char *bitmap_find_region(const char *str) | | ^~~~~~~~~~~~~~~~~~ | | | | | (15) entry to 'bitmap_find_region' | 702 | { | 703 | while (__end_of_region(*str)) | | ~~~~~~~~~~~~~~~ | | | | | (16) following 'false' branch... |...... | 706 | return end_of_str(*str) ? NULL : str; | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | | (17) ...to here (18) following 'false' branch... | 'bitmap_find_region': event 19 | |cc1: | (19): ...to here | <------+ | 'bitmap_parselist': events 20-23 | vim +32 include/asm-generic/bitops/generic-non-atomic.h 21bb8af513d35c0 Alexander Lobakin 2022-06-24 11 21bb8af513d35c0 Alexander Lobakin 2022-06-24 12 /* 21bb8af513d35c0 Alexander Lobakin 2022-06-24 13 * Generic definitions for bit operations, should not be used in regular code 21bb8af513d35c0 Alexander Lobakin 2022-06-24 14 * directly. 21bb8af513d35c0 Alexander Lobakin 2022-06-24 15 */ 21bb8af513d35c0 Alexander Lobakin 2022-06-24 16 21bb8af513d35c0 Alexander Lobakin 2022-06-24 17 /** 21bb8af513d35c0 Alexander Lobakin 2022-06-24 18 * generic___set_bit - Set a bit in memory 21bb8af513d35c0 Alexander Lobakin 2022-06-24 19 * @nr: the bit to set 21bb8af513d35c0 Alexander Lobakin 2022-06-24 20 * @addr: the address to start counting from 21bb8af513d35c0 Alexander Lobakin 2022-06-24 21 * 21bb8af513d35c0 Alexander Lobakin 2022-06-24 22 * Unlike set_bit(), this function is non-atomic and may be reordered. 21bb8af513d35c0 Alexander Lobakin 2022-06-24 23 * If it's called on the same region of memory simultaneously, the effect 21bb8af513d35c0 Alexander Lobakin 2022-06-24 24 * may be that only one operation succeeds. 21bb8af513d35c0 Alexander Lobakin 2022-06-24 25 */ 21bb8af513d35c0 Alexander Lobakin 2022-06-24 26 static __always_inline void 0e862838f290147 Alexander Lobakin 2022-06-24 27 generic___set_bit(unsigned long nr, volatile unsigned long *addr) 21bb8af513d35c0 Alexander Lobakin 2022-06-24 28 { 21bb8af513d35c0 Alexander Lobakin 2022-06-24 29 unsigned long mask = BIT_MASK(nr); 21bb8af513d35c0 Alexander Lobakin 2022-06-24 30 unsigned long *p = ((unsigned long *)addr) + BIT_WORD(nr); 21bb8af513d35c0 Alexander Lobakin 2022-06-24 31 21bb8af513d35c0 Alexander Lobakin 2022-06-24 @32 *p |= mask; 21bb8af513d35c0 Alexander Lobakin 2022-06-24 33 } 21bb8af513d35c0 Alexander Lobakin 2022-06-24 34 :::::: The code at line 32 was first introduced by commit :::::: 21bb8af513d35c005c401706030f4eb469538d1d bitops: always define asm-generic non-atomic bitops :::::: TO: Alexander Lobakin <[email protected]> :::::: CC: Yury Norov <[email protected]> -- 0-DAY CI Kernel Test Service https://01.org/lkp _______________________________________________ kbuild mailing list -- [email protected] To unsubscribe send an email to [email protected]
