Message ID | 20250206105435.2159977-19-memxor@gmail.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | Resilient Queued Spin Lock | expand |
Hi Kumar,
kernel test robot noticed the following build errors:
[auto build test ERROR on 0abff462d802a352c87b7f5e71b442b09bf9cfff]
url: https://github.com/intel-lab-lkp/linux/commits/Kumar-Kartikeya-Dwivedi/locking-Move-MCS-struct-definition-to-public-header/20250206-190258
base: 0abff462d802a352c87b7f5e71b442b09bf9cfff
patch link: https://lore.kernel.org/r/20250206105435.2159977-19-memxor%40gmail.com
patch subject: [PATCH bpf-next v2 18/26] rqspinlock: Add entry to Makefile, MAINTAINERS
config: i386-randconfig-014-20250207 (https://download.01.org/0day-ci/archive/20250207/202502072249.IXcsG9Tu-lkp@intel.com/config)
compiler: gcc-12 (Debian 12.2.0-14) 12.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250207/202502072249.IXcsG9Tu-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/202502072249.IXcsG9Tu-lkp@intel.com/
All errors (new ones prefixed by >>):
In file included from arch/x86/include/asm/rqspinlock.h:27,
from kernel/locking/rqspinlock.c:28:
include/asm-generic/rqspinlock.h:33:12: error: conflicting types for 'resilient_tas_spin_lock'; have 'int(rqspinlock_t *, u64)' {aka 'int(struct rqspinlock *, long long unsigned int)'}
33 | extern int resilient_tas_spin_lock(rqspinlock_t *lock, u64 timeout);
| ^~~~~~~~~~~~~~~~~~~~~~~
arch/x86/include/asm/rqspinlock.h:17:12: note: previous declaration of 'resilient_tas_spin_lock' with type 'int(struct qspinlock *, u64)' {aka 'int(struct qspinlock *, long long unsigned int)'}
17 | extern int resilient_tas_spin_lock(struct qspinlock *lock, u64 timeout);
| ^~~~~~~~~~~~~~~~~~~~~~~
>> kernel/locking/rqspinlock.c:293:16: error: conflicting types for 'resilient_tas_spin_lock'; have 'int(rqspinlock_t *, u64)' {aka 'int(struct rqspinlock *, long long unsigned int)'}
293 | int __lockfunc resilient_tas_spin_lock(rqspinlock_t *lock, u64 timeout)
| ^~~~~~~~~~~~~~~~~~~~~~~
arch/x86/include/asm/rqspinlock.h:17:12: note: previous declaration of 'resilient_tas_spin_lock' with type 'int(struct qspinlock *, u64)' {aka 'int(struct qspinlock *, long long unsigned int)'}
17 | extern int resilient_tas_spin_lock(struct qspinlock *lock, u64 timeout);
| ^~~~~~~~~~~~~~~~~~~~~~~
kernel/locking/rqspinlock.c:204:13: warning: 'rqspinlock_report_violation' defined but not used [-Wunused-function]
204 | static void rqspinlock_report_violation(const char *s, void *lock)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~
vim +293 kernel/locking/rqspinlock.c
65ba402b78bc5d Kumar Kartikeya Dwivedi 2025-02-06 288
7a9d3b27f7bf9c Kumar Kartikeya Dwivedi 2025-02-06 289 /*
7a9d3b27f7bf9c Kumar Kartikeya Dwivedi 2025-02-06 290 * Provide a test-and-set fallback for cases when queued spin lock support is
7a9d3b27f7bf9c Kumar Kartikeya Dwivedi 2025-02-06 291 * absent from the architecture.
7a9d3b27f7bf9c Kumar Kartikeya Dwivedi 2025-02-06 292 */
7a9d3b27f7bf9c Kumar Kartikeya Dwivedi 2025-02-06 @293 int __lockfunc resilient_tas_spin_lock(rqspinlock_t *lock, u64 timeout)
7a9d3b27f7bf9c Kumar Kartikeya Dwivedi 2025-02-06 294 {
7a9d3b27f7bf9c Kumar Kartikeya Dwivedi 2025-02-06 295 struct rqspinlock_timeout ts;
7a9d3b27f7bf9c Kumar Kartikeya Dwivedi 2025-02-06 296 int val, ret = 0;
7a9d3b27f7bf9c Kumar Kartikeya Dwivedi 2025-02-06 297
7a9d3b27f7bf9c Kumar Kartikeya Dwivedi 2025-02-06 298 RES_INIT_TIMEOUT(ts, timeout);
7a9d3b27f7bf9c Kumar Kartikeya Dwivedi 2025-02-06 299 grab_held_lock_entry(lock);
7a9d3b27f7bf9c Kumar Kartikeya Dwivedi 2025-02-06 300 retry:
7a9d3b27f7bf9c Kumar Kartikeya Dwivedi 2025-02-06 301 val = atomic_read(&lock->val);
7a9d3b27f7bf9c Kumar Kartikeya Dwivedi 2025-02-06 302
7a9d3b27f7bf9c Kumar Kartikeya Dwivedi 2025-02-06 303 if (val || !atomic_try_cmpxchg(&lock->val, &val, 1)) {
7a9d3b27f7bf9c Kumar Kartikeya Dwivedi 2025-02-06 304 if (RES_CHECK_TIMEOUT(ts, ret, ~0u)) {
7a9d3b27f7bf9c Kumar Kartikeya Dwivedi 2025-02-06 305 lockevent_inc(rqspinlock_lock_timeout);
7a9d3b27f7bf9c Kumar Kartikeya Dwivedi 2025-02-06 306 goto out;
7a9d3b27f7bf9c Kumar Kartikeya Dwivedi 2025-02-06 307 }
7a9d3b27f7bf9c Kumar Kartikeya Dwivedi 2025-02-06 308 cpu_relax();
7a9d3b27f7bf9c Kumar Kartikeya Dwivedi 2025-02-06 309 goto retry;
7a9d3b27f7bf9c Kumar Kartikeya Dwivedi 2025-02-06 310 }
7a9d3b27f7bf9c Kumar Kartikeya Dwivedi 2025-02-06 311
7a9d3b27f7bf9c Kumar Kartikeya Dwivedi 2025-02-06 312 return 0;
7a9d3b27f7bf9c Kumar Kartikeya Dwivedi 2025-02-06 313 out:
7a9d3b27f7bf9c Kumar Kartikeya Dwivedi 2025-02-06 314 release_held_lock_entry();
7a9d3b27f7bf9c Kumar Kartikeya Dwivedi 2025-02-06 315 return ret;
7a9d3b27f7bf9c Kumar Kartikeya Dwivedi 2025-02-06 316 }
7a9d3b27f7bf9c Kumar Kartikeya Dwivedi 2025-02-06 317
Hi Kumar, kernel test robot noticed the following build errors: [auto build test ERROR on 0abff462d802a352c87b7f5e71b442b09bf9cfff] url: https://github.com/intel-lab-lkp/linux/commits/Kumar-Kartikeya-Dwivedi/locking-Move-MCS-struct-definition-to-public-header/20250206-190258 base: 0abff462d802a352c87b7f5e71b442b09bf9cfff patch link: https://lore.kernel.org/r/20250206105435.2159977-19-memxor%40gmail.com patch subject: [PATCH bpf-next v2 18/26] rqspinlock: Add entry to Makefile, MAINTAINERS config: arm-randconfig-001-20250207 (https://download.01.org/0day-ci/archive/20250207/202502072210.Fzbbpkun-lkp@intel.com/config) compiler: arm-linux-gnueabi-gcc (GCC) 14.2.0 reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250207/202502072210.Fzbbpkun-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/202502072210.Fzbbpkun-lkp@intel.com/ All error/warnings (new ones prefixed by >>): In file included from kernel/locking/rqspinlock.c:77: >> kernel/locking/mcs_spinlock.h:57:27: warning: 'struct mcs_spinlock' declared inside parameter list will not be visible outside of this definition or declaration 57 | void mcs_spin_lock(struct mcs_spinlock **lock, struct mcs_spinlock *node) | ^~~~~~~~~~~~ kernel/locking/mcs_spinlock.h: In function 'mcs_spin_lock': >> kernel/locking/mcs_spinlock.h:62:13: error: invalid use of undefined type 'struct mcs_spinlock' 62 | node->locked = 0; | ^~ kernel/locking/mcs_spinlock.h:63:13: error: invalid use of undefined type 'struct mcs_spinlock' 63 | node->next = NULL; | ^~ In file included from <command-line>: kernel/locking/mcs_spinlock.h:83:24: error: invalid use of undefined type 'struct mcs_spinlock' 83 | WRITE_ONCE(prev->next, node); | ^~ include/linux/compiler_types.h:522:23: note: in definition of macro '__compiletime_assert' 522 | if (!(condition)) \ | ^~~~~~~~~ include/linux/compiler_types.h:542:9: note: in expansion of macro '_compiletime_assert' 542 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__) | ^~~~~~~~~~~~~~~~~~~ include/asm-generic/rwonce.h:36:9: note: in expansion of macro 'compiletime_assert' 36 | compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \ | ^~~~~~~~~~~~~~~~~~ include/asm-generic/rwonce.h:36:28: note: in expansion of macro '__native_word' 36 | compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \ | ^~~~~~~~~~~~~ include/asm-generic/rwonce.h:60:9: note: in expansion of macro 'compiletime_assert_rwonce_type' 60 | compiletime_assert_rwonce_type(x); \ | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ kernel/locking/mcs_spinlock.h:83:9: note: in expansion of macro 'WRITE_ONCE' 83 | WRITE_ONCE(prev->next, node); | ^~~~~~~~~~ kernel/locking/mcs_spinlock.h:83:24: error: invalid use of undefined type 'struct mcs_spinlock' 83 | WRITE_ONCE(prev->next, node); | ^~ include/linux/compiler_types.h:522:23: note: in definition of macro '__compiletime_assert' 522 | if (!(condition)) \ | ^~~~~~~~~ include/linux/compiler_types.h:542:9: note: in expansion of macro '_compiletime_assert' 542 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__) | ^~~~~~~~~~~~~~~~~~~ include/asm-generic/rwonce.h:36:9: note: in expansion of macro 'compiletime_assert' 36 | compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \ | ^~~~~~~~~~~~~~~~~~ include/asm-generic/rwonce.h:36:28: note: in expansion of macro '__native_word' 36 | compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \ | ^~~~~~~~~~~~~ include/asm-generic/rwonce.h:60:9: note: in expansion of macro 'compiletime_assert_rwonce_type' 60 | compiletime_assert_rwonce_type(x); \ | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ kernel/locking/mcs_spinlock.h:83:9: note: in expansion of macro 'WRITE_ONCE' 83 | WRITE_ONCE(prev->next, node); | ^~~~~~~~~~ kernel/locking/mcs_spinlock.h:83:24: error: invalid use of undefined type 'struct mcs_spinlock' 83 | WRITE_ONCE(prev->next, node); | ^~ include/linux/compiler_types.h:522:23: note: in definition of macro '__compiletime_assert' 522 | if (!(condition)) \ | ^~~~~~~~~ include/linux/compiler_types.h:542:9: note: in expansion of macro '_compiletime_assert' 542 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__) | ^~~~~~~~~~~~~~~~~~~ include/asm-generic/rwonce.h:36:9: note: in expansion of macro 'compiletime_assert' 36 | compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \ | ^~~~~~~~~~~~~~~~~~ include/asm-generic/rwonce.h:36:28: note: in expansion of macro '__native_word' 36 | compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \ | ^~~~~~~~~~~~~ include/asm-generic/rwonce.h:60:9: note: in expansion of macro 'compiletime_assert_rwonce_type' 60 | compiletime_assert_rwonce_type(x); \ | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ kernel/locking/mcs_spinlock.h:83:9: note: in expansion of macro 'WRITE_ONCE' 83 | WRITE_ONCE(prev->next, node); | ^~~~~~~~~~ kernel/locking/mcs_spinlock.h:83:24: error: invalid use of undefined type 'struct mcs_spinlock' 83 | WRITE_ONCE(prev->next, node); | ^~ include/linux/compiler_types.h:522:23: note: in definition of macro '__compiletime_assert' 522 | if (!(condition)) \ | ^~~~~~~~~ include/linux/compiler_types.h:542:9: note: in expansion of macro '_compiletime_assert' 542 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__) | ^~~~~~~~~~~~~~~~~~~ include/asm-generic/rwonce.h:36:9: note: in expansion of macro 'compiletime_assert' 36 | compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \ | ^~~~~~~~~~~~~~~~~~ include/asm-generic/rwonce.h:36:28: note: in expansion of macro '__native_word' 36 | compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \ | ^~~~~~~~~~~~~ include/asm-generic/rwonce.h:60:9: note: in expansion of macro 'compiletime_assert_rwonce_type' 60 | compiletime_assert_rwonce_type(x); \ | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ kernel/locking/mcs_spinlock.h:83:9: note: in expansion of macro 'WRITE_ONCE' 83 | WRITE_ONCE(prev->next, node); | ^~~~~~~~~~ kernel/locking/mcs_spinlock.h:83:24: error: invalid use of undefined type 'struct mcs_spinlock' 83 | WRITE_ONCE(prev->next, node); | ^~ include/linux/compiler_types.h:522:23: note: in definition of macro '__compiletime_assert' 522 | if (!(condition)) \ | ^~~~~~~~~ include/linux/compiler_types.h:542:9: note: in expansion of macro '_compiletime_assert' 542 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__) | ^~~~~~~~~~~~~~~~~~~ include/asm-generic/rwonce.h:36:9: note: in expansion of macro 'compiletime_assert' vim +62 kernel/locking/mcs_spinlock.h e207552e64ea05 include/linux/mcs_spinlock.h Will Deacon 2014-01-21 39 e72246748ff006 include/linux/mcs_spinlock.h Tim Chen 2014-01-21 40 /* e72246748ff006 include/linux/mcs_spinlock.h Tim Chen 2014-01-21 41 * Note: the smp_load_acquire/smp_store_release pair is not e72246748ff006 include/linux/mcs_spinlock.h Tim Chen 2014-01-21 42 * sufficient to form a full memory barrier across e72246748ff006 include/linux/mcs_spinlock.h Tim Chen 2014-01-21 43 * cpus for many architectures (except x86) for mcs_unlock and mcs_lock. e72246748ff006 include/linux/mcs_spinlock.h Tim Chen 2014-01-21 44 * For applications that need a full barrier across multiple cpus e72246748ff006 include/linux/mcs_spinlock.h Tim Chen 2014-01-21 45 * with mcs_unlock and mcs_lock pair, smp_mb__after_unlock_lock() should be e72246748ff006 include/linux/mcs_spinlock.h Tim Chen 2014-01-21 46 * used after mcs_lock. e72246748ff006 include/linux/mcs_spinlock.h Tim Chen 2014-01-21 47 */ 5faeb8adb956a5 include/linux/mcs_spinlock.h Jason Low 2014-01-21 48 5faeb8adb956a5 include/linux/mcs_spinlock.h Jason Low 2014-01-21 49 /* 5faeb8adb956a5 include/linux/mcs_spinlock.h Jason Low 2014-01-21 50 * In order to acquire the lock, the caller should declare a local node and 5faeb8adb956a5 include/linux/mcs_spinlock.h Jason Low 2014-01-21 51 * pass a reference of the node to this function in addition to the lock. 5faeb8adb956a5 include/linux/mcs_spinlock.h Jason Low 2014-01-21 52 * If the lock has already been acquired, then this will proceed to spin 5faeb8adb956a5 include/linux/mcs_spinlock.h Jason Low 2014-01-21 53 * on this node->locked until the previous lock holder sets the node->locked 5faeb8adb956a5 include/linux/mcs_spinlock.h Jason Low 2014-01-21 54 * in mcs_spin_unlock(). 5faeb8adb956a5 include/linux/mcs_spinlock.h Jason Low 2014-01-21 55 */ e72246748ff006 include/linux/mcs_spinlock.h Tim Chen 2014-01-21 56 static inline e72246748ff006 include/linux/mcs_spinlock.h Tim Chen 2014-01-21 @57 void mcs_spin_lock(struct mcs_spinlock **lock, struct mcs_spinlock *node) e72246748ff006 include/linux/mcs_spinlock.h Tim Chen 2014-01-21 58 { e72246748ff006 include/linux/mcs_spinlock.h Tim Chen 2014-01-21 59 struct mcs_spinlock *prev; e72246748ff006 include/linux/mcs_spinlock.h Tim Chen 2014-01-21 60 e72246748ff006 include/linux/mcs_spinlock.h Tim Chen 2014-01-21 61 /* Init node */ e72246748ff006 include/linux/mcs_spinlock.h Tim Chen 2014-01-21 @62 node->locked = 0; e72246748ff006 include/linux/mcs_spinlock.h Tim Chen 2014-01-21 63 node->next = NULL; e72246748ff006 include/linux/mcs_spinlock.h Tim Chen 2014-01-21 64 920c720aa5aa39 kernel/locking/mcs_spinlock.h Peter Zijlstra 2016-02-01 65 /* 920c720aa5aa39 kernel/locking/mcs_spinlock.h Peter Zijlstra 2016-02-01 66 * We rely on the full barrier with global transitivity implied by the 920c720aa5aa39 kernel/locking/mcs_spinlock.h Peter Zijlstra 2016-02-01 67 * below xchg() to order the initialization stores above against any 920c720aa5aa39 kernel/locking/mcs_spinlock.h Peter Zijlstra 2016-02-01 68 * observation of @node. And to provide the ACQUIRE ordering associated 920c720aa5aa39 kernel/locking/mcs_spinlock.h Peter Zijlstra 2016-02-01 69 * with a LOCK primitive. 920c720aa5aa39 kernel/locking/mcs_spinlock.h Peter Zijlstra 2016-02-01 70 */ 920c720aa5aa39 kernel/locking/mcs_spinlock.h Peter Zijlstra 2016-02-01 71 prev = xchg(lock, node); e72246748ff006 include/linux/mcs_spinlock.h Tim Chen 2014-01-21 72 if (likely(prev == NULL)) { 5faeb8adb956a5 include/linux/mcs_spinlock.h Jason Low 2014-01-21 73 /* 5faeb8adb956a5 include/linux/mcs_spinlock.h Jason Low 2014-01-21 74 * Lock acquired, don't need to set node->locked to 1. Threads 5faeb8adb956a5 include/linux/mcs_spinlock.h Jason Low 2014-01-21 75 * only spin on its own node->locked value for lock acquisition. 5faeb8adb956a5 include/linux/mcs_spinlock.h Jason Low 2014-01-21 76 * However, since this thread can immediately acquire the lock 5faeb8adb956a5 include/linux/mcs_spinlock.h Jason Low 2014-01-21 77 * and does not proceed to spin on its own node->locked, this 5faeb8adb956a5 include/linux/mcs_spinlock.h Jason Low 2014-01-21 78 * value won't be used. If a debug mode is needed to 5faeb8adb956a5 include/linux/mcs_spinlock.h Jason Low 2014-01-21 79 * audit lock status, then set node->locked value here. 5faeb8adb956a5 include/linux/mcs_spinlock.h Jason Low 2014-01-21 80 */ e72246748ff006 include/linux/mcs_spinlock.h Tim Chen 2014-01-21 81 return; e72246748ff006 include/linux/mcs_spinlock.h Tim Chen 2014-01-21 82 } 4d3199e4ca8e66 kernel/locking/mcs_spinlock.h Davidlohr Bueso 2015-02-22 83 WRITE_ONCE(prev->next, node); e207552e64ea05 include/linux/mcs_spinlock.h Will Deacon 2014-01-21 84 e207552e64ea05 include/linux/mcs_spinlock.h Will Deacon 2014-01-21 85 /* Wait until the lock holder passes the lock down. */ e207552e64ea05 include/linux/mcs_spinlock.h Will Deacon 2014-01-21 86 arch_mcs_spin_lock_contended(&node->locked); e72246748ff006 include/linux/mcs_spinlock.h Tim Chen 2014-01-21 87 } e72246748ff006 include/linux/mcs_spinlock.h Tim Chen 2014-01-21 88
Hi Kumar, kernel test robot noticed the following build warnings: [auto build test WARNING on 0abff462d802a352c87b7f5e71b442b09bf9cfff] url: https://github.com/intel-lab-lkp/linux/commits/Kumar-Kartikeya-Dwivedi/locking-Move-MCS-struct-definition-to-public-header/20250206-190258 base: 0abff462d802a352c87b7f5e71b442b09bf9cfff patch link: https://lore.kernel.org/r/20250206105435.2159977-19-memxor%40gmail.com patch subject: [PATCH bpf-next v2 18/26] rqspinlock: Add entry to Makefile, MAINTAINERS config: x86_64-randconfig-121-20250207 (https://download.01.org/0day-ci/archive/20250208/202502080835.XRxxo7P5-lkp@intel.com/config) compiler: gcc-12 (Debian 12.2.0-14) 12.2.0 reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250208/202502080835.XRxxo7P5-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/202502080835.XRxxo7P5-lkp@intel.com/ sparse warnings: (new ones prefixed by >>) >> kernel/locking/rqspinlock.c:101:39: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct rqspinlock_held * @@ kernel/locking/rqspinlock.c:101:39: sparse: expected void const [noderef] __percpu *__vpp_verify kernel/locking/rqspinlock.c:101:39: sparse: got struct rqspinlock_held * kernel/locking/rqspinlock.c:123:39: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct rqspinlock_held * @@ kernel/locking/rqspinlock.c:123:39: sparse: expected void const [noderef] __percpu *__vpp_verify kernel/locking/rqspinlock.c:123:39: sparse: got struct rqspinlock_held * kernel/locking/rqspinlock.c:136:51: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct rqspinlock_held * @@ kernel/locking/rqspinlock.c:136:51: sparse: expected void const [noderef] __percpu *__vpp_verify kernel/locking/rqspinlock.c:136:51: sparse: got struct rqspinlock_held * kernel/locking/rqspinlock.c:206:39: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct rqspinlock_held * @@ kernel/locking/rqspinlock.c:206:39: sparse: expected void const [noderef] __percpu *__vpp_verify kernel/locking/rqspinlock.c:206:39: sparse: got struct rqspinlock_held * >> kernel/locking/rqspinlock.c:572:41: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected struct qnode *qnodes @@ got struct qnode [noderef] __percpu * @@ kernel/locking/rqspinlock.c:572:41: sparse: expected struct qnode *qnodes kernel/locking/rqspinlock.c:572:41: sparse: got struct qnode [noderef] __percpu * kernel/locking/rqspinlock.c: note: in included file: kernel/locking/qspinlock.h:67:16: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct mcs_spinlock * @@ kernel/locking/qspinlock.h:67:16: sparse: expected void const [noderef] __percpu *__vpp_verify kernel/locking/qspinlock.h:67:16: sparse: got struct mcs_spinlock * vim +101 kernel/locking/rqspinlock.c 6516ce00a1482f Kumar Kartikeya Dwivedi 2025-02-06 97 6516ce00a1482f Kumar Kartikeya Dwivedi 2025-02-06 98 static noinline int check_deadlock_AA(rqspinlock_t *lock, u32 mask, 6516ce00a1482f Kumar Kartikeya Dwivedi 2025-02-06 99 struct rqspinlock_timeout *ts) 6516ce00a1482f Kumar Kartikeya Dwivedi 2025-02-06 100 { 6516ce00a1482f Kumar Kartikeya Dwivedi 2025-02-06 @101 struct rqspinlock_held *rqh = this_cpu_ptr(&rqspinlock_held_locks); 6516ce00a1482f Kumar Kartikeya Dwivedi 2025-02-06 102 int cnt = min(RES_NR_HELD, rqh->cnt); 6516ce00a1482f Kumar Kartikeya Dwivedi 2025-02-06 103 6516ce00a1482f Kumar Kartikeya Dwivedi 2025-02-06 104 /* 6516ce00a1482f Kumar Kartikeya Dwivedi 2025-02-06 105 * Return an error if we hold the lock we are attempting to acquire. 6516ce00a1482f Kumar Kartikeya Dwivedi 2025-02-06 106 * We'll iterate over max 32 locks; no need to do is_lock_released. 6516ce00a1482f Kumar Kartikeya Dwivedi 2025-02-06 107 */ 6516ce00a1482f Kumar Kartikeya Dwivedi 2025-02-06 108 for (int i = 0; i < cnt - 1; i++) { 6516ce00a1482f Kumar Kartikeya Dwivedi 2025-02-06 109 if (rqh->locks[i] == lock) 6516ce00a1482f Kumar Kartikeya Dwivedi 2025-02-06 110 return -EDEADLK; 6516ce00a1482f Kumar Kartikeya Dwivedi 2025-02-06 111 } 6516ce00a1482f Kumar Kartikeya Dwivedi 2025-02-06 112 return 0; 6516ce00a1482f Kumar Kartikeya Dwivedi 2025-02-06 113 } 6516ce00a1482f Kumar Kartikeya Dwivedi 2025-02-06 114
diff --git a/MAINTAINERS b/MAINTAINERS index 896a307fa065..4d81f3303c79 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -4305,6 +4305,9 @@ F: include/uapi/linux/filter.h F: kernel/bpf/ F: kernel/trace/bpf_trace.c F: lib/buildid.c +F: arch/*/include/asm/rqspinlock.h +F: include/asm-generic/rqspinlock.h +F: kernel/locking/rqspinlock.c F: lib/test_bpf.c F: net/bpf/ F: net/core/filter.c diff --git a/include/asm-generic/Kbuild b/include/asm-generic/Kbuild index 1b43c3a77012..8675b7b4ad23 100644 --- a/include/asm-generic/Kbuild +++ b/include/asm-generic/Kbuild @@ -45,6 +45,7 @@ mandatory-y += pci.h mandatory-y += percpu.h mandatory-y += pgalloc.h mandatory-y += preempt.h +mandatory-y += rqspinlock.h mandatory-y += runtime-const.h mandatory-y += rwonce.h mandatory-y += sections.h diff --git a/kernel/locking/Makefile b/kernel/locking/Makefile index 0db4093d17b8..5645e9029bc0 100644 --- a/kernel/locking/Makefile +++ b/kernel/locking/Makefile @@ -24,6 +24,7 @@ obj-$(CONFIG_SMP) += spinlock.o obj-$(CONFIG_LOCK_SPIN_ON_OWNER) += osq_lock.o obj-$(CONFIG_PROVE_LOCKING) += spinlock.o obj-$(CONFIG_QUEUED_SPINLOCKS) += qspinlock.o +obj-$(CONFIG_BPF_SYSCALL) += rqspinlock.o obj-$(CONFIG_RT_MUTEXES) += rtmutex_api.o obj-$(CONFIG_PREEMPT_RT) += spinlock_rt.o ww_rt_mutex.o obj-$(CONFIG_DEBUG_SPINLOCK) += spinlock.o
Ensure that rqspinlock is built when qspinlock support and BPF subsystem is enabled. Also, add the file under the BPF MAINTAINERS entry so that all patches changing code in the file end up Cc'ing bpf@vger and the maintainers/reviewers. Ensure that the rqspinlock code is only built when the BPF subsystem is compiled in. Depending on queued spinlock support, we may or may not end up building the queued spinlock slowpath, and instead fallback to the test-and-set implementation. Signed-off-by: Kumar Kartikeya Dwivedi <memxor@gmail.com> --- MAINTAINERS | 3 +++ include/asm-generic/Kbuild | 1 + kernel/locking/Makefile | 1 + 3 files changed, 5 insertions(+)