[tip:tmp.tmp2 351/364] include/linux/seqlock.h:239:76: error: implicit declaration of function 'mutex_unlock'; did you mean

From: kernel test robot
Date: Sun Jun 13 2021 - 17:48:10 EST


tree: https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git tmp.tmp2
head: adcceb5eb7aee38e4a9c15bdf599655f0e1b1324
commit: 6c13131b6a385211160e6bd8a211e5ed72e780a8 [351/364] sched/headers, locking/seqlocks: Optimize <linux/seqlock.h>
config: sparc64-randconfig-r015-20210613 (attached as .config)
compiler: sparc64-linux-gcc (GCC) 9.3.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://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git/commit/?id=6c13131b6a385211160e6bd8a211e5ed72e780a8
git remote add tip https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git
git fetch --no-tags tip tmp.tmp2
git checkout 6c13131b6a385211160e6bd8a211e5ed72e780a8
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=sparc64

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@xxxxxxxxx>

All errors (new ones prefixed by >>):

In file included from arch/sparc/kernel/asm-offsets.c:14:
include/linux/sched.h:475:20: error: array type has incomplete element type 'struct held_lock'
475 | struct held_lock held_locks[MAX_LOCK_DEPTH];
| ^~~~~~~~~~
In file included from ./arch/sparc/include/generated/asm/preempt.h:1,
from include/linux/preempt.h:80,
from include/linux/spinlock.h:53,
from include/linux/mm_types.h:9,
from arch/sparc/kernel/asm-offsets.c:15:
include/asm-generic/preempt.h: In function '__preempt_count_dec_and_test':
include/asm-generic/preempt.h:69:36: error: implicit declaration of function 'tif_need_resched' [-Werror=implicit-function-declaration]
69 | return !--*preempt_count_ptr() && tif_need_resched();
| ^~~~~~~~~~~~~~~~
In file included from include/linux/mm_types.h:17,
from arch/sparc/kernel/asm-offsets.c:15:
include/linux/seqlock.h: In function '__seqprop_mutex_sequence':
include/linux/seqlock.h:239:86: error: implicit declaration of function 'mutex_lock' [-Werror=implicit-function-declaration]
239 | SEQCOUNT_LOCKNAME(mutex, struct mutex, true, s->lock, mutex, mutex_lock(s->lock))
| ^~~~~~~~~~
include/linux/seqlock.h:136:26: note: in definition of macro '__SEQ_LOCK'
136 | #define __SEQ_LOCK(expr) expr
| ^~~~
include/linux/seqlock.h:239:1: note: in expansion of macro 'SEQCOUNT_LOCKNAME'
239 | SEQCOUNT_LOCKNAME(mutex, struct mutex, true, s->lock, mutex, mutex_lock(s->lock))
| ^~~~~~~~~~~~~~~~~
>> include/linux/seqlock.h:239:76: error: implicit declaration of function 'mutex_unlock'; did you mean 'write_unlock'? [-Werror=implicit-function-declaration]
239 | SEQCOUNT_LOCKNAME(mutex, struct mutex, true, s->lock, mutex, mutex_lock(s->lock))
| ^~~~~
include/linux/seqlock.h:136:26: note: in definition of macro '__SEQ_LOCK'
136 | #define __SEQ_LOCK(expr) expr
| ^~~~
include/linux/seqlock.h:239:1: note: in expansion of macro 'SEQCOUNT_LOCKNAME'
239 | SEQCOUNT_LOCKNAME(mutex, struct mutex, true, s->lock, mutex, mutex_lock(s->lock))
| ^~~~~~~~~~~~~~~~~
include/linux/seqlock.h: In function '__seqprop_mutex_assert':
include/linux/lockdep.h:286:52: error: dereferencing pointer to incomplete type 'struct mutex'
286 | #define lockdep_is_held(lock) lock_is_held(&(lock)->dep_map)
| ^~
include/linux/seqlock.h:136:26: note: in definition of macro '__SEQ_LOCK'
136 | #define __SEQ_LOCK(expr) expr
| ^~~~
include/linux/lockdep.h:310:3: note: in expansion of macro 'WARN_ON'
310 | WARN_ON(debug_locks && \
| ^~~~~~~
include/linux/lockdep.h:311:4: note: in expansion of macro 'lockdep_is_held'
311 | lockdep_is_held(l) == LOCK_STATE_NOT_HELD); \
| ^~~~~~~~~~~~~~~
include/linux/seqlock.h:231:13: note: in expansion of macro 'lockdep_assert_held'
231 | __SEQ_LOCK(lockdep_assert_held(lockmember)); \
| ^~~~~~~~~~~~~~~~~~~
include/linux/seqlock.h:239:1: note: in expansion of macro 'SEQCOUNT_LOCKNAME'
239 | SEQCOUNT_LOCKNAME(mutex, struct mutex, true, s->lock, mutex, mutex_lock(s->lock))
| ^~~~~~~~~~~~~~~~~
include/linux/seqlock.h: In function '__seqprop_ww_mutex_sequence':
>> include/linux/seqlock.h:240:86: error: implicit declaration of function 'ww_mutex_lock'; did you mean 'write_lock'? [-Werror=implicit-function-declaration]
240 | SEQCOUNT_LOCKNAME(ww_mutex, struct ww_mutex, true, &s->lock->base, ww_mutex, ww_mutex_lock(s->lock, NULL))
| ^~~~~~~~~~~~~
include/linux/seqlock.h:136:26: note: in definition of macro '__SEQ_LOCK'
136 | #define __SEQ_LOCK(expr) expr
| ^~~~
include/linux/seqlock.h:240:1: note: in expansion of macro 'SEQCOUNT_LOCKNAME'
240 | SEQCOUNT_LOCKNAME(ww_mutex, struct ww_mutex, true, &s->lock->base, ww_mutex, ww_mutex_lock(s->lock, NULL))
| ^~~~~~~~~~~~~~~~~
>> include/linux/seqlock.h:240:76: error: implicit declaration of function 'ww_mutex_unlock'; did you mean 'write_unlock'? [-Werror=implicit-function-declaration]
240 | SEQCOUNT_LOCKNAME(ww_mutex, struct ww_mutex, true, &s->lock->base, ww_mutex, ww_mutex_lock(s->lock, NULL))
| ^~~~~~~~
include/linux/seqlock.h:136:26: note: in definition of macro '__SEQ_LOCK'
136 | #define __SEQ_LOCK(expr) expr
| ^~~~
include/linux/seqlock.h:240:1: note: in expansion of macro 'SEQCOUNT_LOCKNAME'
240 | SEQCOUNT_LOCKNAME(ww_mutex, struct ww_mutex, true, &s->lock->base, ww_mutex, ww_mutex_lock(s->lock, NULL))
| ^~~~~~~~~~~~~~~~~
include/linux/seqlock.h: In function '__seqprop_ww_mutex_assert':
include/linux/seqlock.h:240:68: error: dereferencing pointer to incomplete type 'struct ww_mutex'
240 | SEQCOUNT_LOCKNAME(ww_mutex, struct ww_mutex, true, &s->lock->base, ww_mutex, ww_mutex_lock(s->lock, NULL))
| ^~
include/linux/seqlock.h:136:26: note: in definition of macro '__SEQ_LOCK'
136 | #define __SEQ_LOCK(expr) expr
| ^~~~
include/linux/lockdep.h:310:3: note: in expansion of macro 'WARN_ON'
310 | WARN_ON(debug_locks && \
| ^~~~~~~
include/linux/lockdep.h:311:4: note: in expansion of macro 'lockdep_is_held'
311 | lockdep_is_held(l) == LOCK_STATE_NOT_HELD); \
| ^~~~~~~~~~~~~~~
include/linux/seqlock.h:231:13: note: in expansion of macro 'lockdep_assert_held'
231 | __SEQ_LOCK(lockdep_assert_held(lockmember)); \
| ^~~~~~~~~~~~~~~~~~~
include/linux/seqlock.h:240:1: note: in expansion of macro 'SEQCOUNT_LOCKNAME'
240 | SEQCOUNT_LOCKNAME(ww_mutex, struct ww_mutex, true, &s->lock->base, ww_mutex, ww_mutex_lock(s->lock, NULL))
| ^~~~~~~~~~~~~~~~~
arch/sparc/kernel/asm-offsets.c: At top level:
arch/sparc/kernel/asm-offsets.c:29:5: warning: no previous prototype for 'sparc64_foo' [-Wmissing-prototypes]
29 | int sparc64_foo(void)
| ^~~~~~~~~~~
arch/sparc/kernel/asm-offsets.c:48:5: warning: no previous prototype for 'foo' [-Wmissing-prototypes]
48 | int foo(void)
| ^~~
In file included from arch/sparc/kernel/asm-offsets.c:17:
arch/sparc/kernel/asm-offsets.c: In function 'foo':
include/linux/compiler_types.h:140:35: error: 'struct task_struct' has no member named 'thread'
140 | #define __compiler_offsetof(a, b) __builtin_offsetof(a, b)
| ^~~~~~~~~~~~~~~~~~
include/linux/kbuild.h:6:62: note: in definition of macro 'DEFINE'
6 | asm volatile("\n.ascii \"->" #sym " %0 " #val "\"" : : "i" (val))
| ^~~
include/linux/stddef.h:17:32: note: in expansion of macro '__compiler_offsetof'
17 | #define offsetof(TYPE, MEMBER) __compiler_offsetof(TYPE, MEMBER)
| ^~~~~~~~~~~~~~~~~~~
arch/sparc/kernel/asm-offsets.c:51:27: note: in expansion of macro 'offsetof'
51 | DEFINE(AOFF_task_thread, offsetof(struct task_struct, thread));
| ^~~~~~~~
cc1: some warnings being treated as errors
--
In file included from arch/sparc/kernel/asm-offsets.c:14:
include/linux/sched.h:475:20: error: array type has incomplete element type 'struct held_lock'
475 | struct held_lock held_locks[MAX_LOCK_DEPTH];
| ^~~~~~~~~~
In file included from ./arch/sparc/include/generated/asm/preempt.h:1,
from include/linux/preempt.h:80,
from include/linux/spinlock.h:53,
from include/linux/mm_types.h:9,
from arch/sparc/kernel/asm-offsets.c:15:
include/asm-generic/preempt.h: In function '__preempt_count_dec_and_test':
include/asm-generic/preempt.h:69:36: error: implicit declaration of function 'tif_need_resched' [-Werror=implicit-function-declaration]
69 | return !--*preempt_count_ptr() && tif_need_resched();
| ^~~~~~~~~~~~~~~~
In file included from include/linux/mm_types.h:17,
from arch/sparc/kernel/asm-offsets.c:15:
include/linux/seqlock.h: In function '__seqprop_mutex_sequence':
include/linux/seqlock.h:239:86: error: implicit declaration of function 'mutex_lock' [-Werror=implicit-function-declaration]
239 | SEQCOUNT_LOCKNAME(mutex, struct mutex, true, s->lock, mutex, mutex_lock(s->lock))
| ^~~~~~~~~~
include/linux/seqlock.h:136:26: note: in definition of macro '__SEQ_LOCK'
136 | #define __SEQ_LOCK(expr) expr
| ^~~~
include/linux/seqlock.h:239:1: note: in expansion of macro 'SEQCOUNT_LOCKNAME'
239 | SEQCOUNT_LOCKNAME(mutex, struct mutex, true, s->lock, mutex, mutex_lock(s->lock))
| ^~~~~~~~~~~~~~~~~
>> include/linux/seqlock.h:239:76: error: implicit declaration of function 'mutex_unlock'; did you mean 'write_unlock'? [-Werror=implicit-function-declaration]
239 | SEQCOUNT_LOCKNAME(mutex, struct mutex, true, s->lock, mutex, mutex_lock(s->lock))
| ^~~~~
include/linux/seqlock.h:136:26: note: in definition of macro '__SEQ_LOCK'
136 | #define __SEQ_LOCK(expr) expr
| ^~~~
include/linux/seqlock.h:239:1: note: in expansion of macro 'SEQCOUNT_LOCKNAME'
239 | SEQCOUNT_LOCKNAME(mutex, struct mutex, true, s->lock, mutex, mutex_lock(s->lock))
| ^~~~~~~~~~~~~~~~~
include/linux/seqlock.h: In function '__seqprop_mutex_assert':
include/linux/lockdep.h:286:52: error: dereferencing pointer to incomplete type 'struct mutex'
286 | #define lockdep_is_held(lock) lock_is_held(&(lock)->dep_map)
| ^~
include/linux/seqlock.h:136:26: note: in definition of macro '__SEQ_LOCK'
136 | #define __SEQ_LOCK(expr) expr
| ^~~~
include/linux/lockdep.h:310:3: note: in expansion of macro 'WARN_ON'
310 | WARN_ON(debug_locks && \
| ^~~~~~~
include/linux/lockdep.h:311:4: note: in expansion of macro 'lockdep_is_held'
311 | lockdep_is_held(l) == LOCK_STATE_NOT_HELD); \
| ^~~~~~~~~~~~~~~
include/linux/seqlock.h:231:13: note: in expansion of macro 'lockdep_assert_held'
231 | __SEQ_LOCK(lockdep_assert_held(lockmember)); \
| ^~~~~~~~~~~~~~~~~~~
include/linux/seqlock.h:239:1: note: in expansion of macro 'SEQCOUNT_LOCKNAME'
239 | SEQCOUNT_LOCKNAME(mutex, struct mutex, true, s->lock, mutex, mutex_lock(s->lock))
| ^~~~~~~~~~~~~~~~~
include/linux/seqlock.h: In function '__seqprop_ww_mutex_sequence':
>> include/linux/seqlock.h:240:86: error: implicit declaration of function 'ww_mutex_lock'; did you mean 'write_lock'? [-Werror=implicit-function-declaration]
240 | SEQCOUNT_LOCKNAME(ww_mutex, struct ww_mutex, true, &s->lock->base, ww_mutex, ww_mutex_lock(s->lock, NULL))
| ^~~~~~~~~~~~~
include/linux/seqlock.h:136:26: note: in definition of macro '__SEQ_LOCK'
136 | #define __SEQ_LOCK(expr) expr
| ^~~~
include/linux/seqlock.h:240:1: note: in expansion of macro 'SEQCOUNT_LOCKNAME'
240 | SEQCOUNT_LOCKNAME(ww_mutex, struct ww_mutex, true, &s->lock->base, ww_mutex, ww_mutex_lock(s->lock, NULL))
| ^~~~~~~~~~~~~~~~~
>> include/linux/seqlock.h:240:76: error: implicit declaration of function 'ww_mutex_unlock'; did you mean 'write_unlock'? [-Werror=implicit-function-declaration]
240 | SEQCOUNT_LOCKNAME(ww_mutex, struct ww_mutex, true, &s->lock->base, ww_mutex, ww_mutex_lock(s->lock, NULL))
| ^~~~~~~~
include/linux/seqlock.h:136:26: note: in definition of macro '__SEQ_LOCK'
136 | #define __SEQ_LOCK(expr) expr
| ^~~~
include/linux/seqlock.h:240:1: note: in expansion of macro 'SEQCOUNT_LOCKNAME'
240 | SEQCOUNT_LOCKNAME(ww_mutex, struct ww_mutex, true, &s->lock->base, ww_mutex, ww_mutex_lock(s->lock, NULL))
| ^~~~~~~~~~~~~~~~~
include/linux/seqlock.h: In function '__seqprop_ww_mutex_assert':
include/linux/seqlock.h:240:68: error: dereferencing pointer to incomplete type 'struct ww_mutex'
240 | SEQCOUNT_LOCKNAME(ww_mutex, struct ww_mutex, true, &s->lock->base, ww_mutex, ww_mutex_lock(s->lock, NULL))
| ^~
include/linux/seqlock.h:136:26: note: in definition of macro '__SEQ_LOCK'
136 | #define __SEQ_LOCK(expr) expr
| ^~~~
include/linux/lockdep.h:310:3: note: in expansion of macro 'WARN_ON'
310 | WARN_ON(debug_locks && \
| ^~~~~~~
include/linux/lockdep.h:311:4: note: in expansion of macro 'lockdep_is_held'
311 | lockdep_is_held(l) == LOCK_STATE_NOT_HELD); \
| ^~~~~~~~~~~~~~~
include/linux/seqlock.h:231:13: note: in expansion of macro 'lockdep_assert_held'
231 | __SEQ_LOCK(lockdep_assert_held(lockmember)); \
| ^~~~~~~~~~~~~~~~~~~
include/linux/seqlock.h:240:1: note: in expansion of macro 'SEQCOUNT_LOCKNAME'
240 | SEQCOUNT_LOCKNAME(ww_mutex, struct ww_mutex, true, &s->lock->base, ww_mutex, ww_mutex_lock(s->lock, NULL))
| ^~~~~~~~~~~~~~~~~
arch/sparc/kernel/asm-offsets.c: At top level:
arch/sparc/kernel/asm-offsets.c:29:5: warning: no previous prototype for 'sparc64_foo' [-Wmissing-prototypes]
29 | int sparc64_foo(void)
| ^~~~~~~~~~~
arch/sparc/kernel/asm-offsets.c:48:5: warning: no previous prototype for 'foo' [-Wmissing-prototypes]
48 | int foo(void)
| ^~~
In file included from arch/sparc/kernel/asm-offsets.c:17:
arch/sparc/kernel/asm-offsets.c: In function 'foo':
include/linux/compiler_types.h:140:35: error: 'struct task_struct' has no member named 'thread'
140 | #define __compiler_offsetof(a, b) __builtin_offsetof(a, b)
| ^~~~~~~~~~~~~~~~~~
include/linux/kbuild.h:6:62: note: in definition of macro 'DEFINE'
6 | asm volatile("\n.ascii \"->" #sym " %0 " #val "\"" : : "i" (val))
| ^~~
include/linux/stddef.h:17:32: note: in expansion of macro '__compiler_offsetof'
17 | #define offsetof(TYPE, MEMBER) __compiler_offsetof(TYPE, MEMBER)
| ^~~~~~~~~~~~~~~~~~~
arch/sparc/kernel/asm-offsets.c:51:27: note: in expansion of macro 'offsetof'
51 | DEFINE(AOFF_task_thread, offsetof(struct task_struct, thread));
| ^~~~~~~~
cc1: some warnings being treated as errors
make[2]: *** [scripts/Makefile.build:117: arch/sparc/kernel/asm-offsets.s] Error 1
make[2]: Target '__build' not remade because of errors.
make[1]: *** [Makefile:1232: prepare0] Error 2
make[1]: Target 'modules_prepare' not remade because of errors.
make: *** [Makefile:215: __sub-make] Error 2
make: Target 'modules_prepare' not remade because of errors.
--
WARNING: unmet direct dependencies detected for LOCKDEP
Depends on DEBUG_KERNEL && LOCK_DEBUGGING_SUPPORT && (FRAME_POINTER || MIPS || PPC || S390 || MICROBLAZE || ARM || ARC || X86)
Selected by
- LOCK_STAT && DEBUG_KERNEL && LOCK_DEBUGGING_SUPPORT
- DEBUG_LOCK_ALLOC && DEBUG_KERNEL && LOCK_DEBUGGING_SUPPORT
In file included from arch/sparc/kernel/asm-offsets.c:14:
include/linux/sched.h:475:20: error: array type has incomplete element type 'struct held_lock'
475 | struct held_lock
| ^~~~~~~~~~
In file included from ./arch/sparc/include/generated/asm/preempt.h:1,
from include/linux/preempt.h:80,
from include/linux/spinlock.h:53,
from include/linux/mm_types.h:9,
from arch/sparc/kernel/asm-offsets.c:15:
include/asm-generic/preempt.h: In function '__preempt_count_dec_and_test':
include/asm-generic/preempt.h:69:36: error: implicit declaration of function 'tif_need_resched'
69 | return && tif_need_resched();
| ^~~~~~~~~~~~~~~~
In file included from include/linux/mm_types.h:17,
from arch/sparc/kernel/asm-offsets.c:15:
include/linux/seqlock.h: In function '__seqprop_mutex_sequence':
include/linux/seqlock.h:239:86: error: implicit declaration of function 'mutex_lock'
239 | SEQCOUNT_LOCKNAME(mutex, struct mutex, true, s->lock, mutex, mutex_lock(s->lock))
| ^~~~~~~~~~
include/linux/seqlock.h:136:26: note: in definition of macro '__SEQ_LOCK'
136 | #define __SEQ_LOCK(expr) expr
| ^~~~
include/linux/seqlock.h:239:1: note: in expansion of macro 'SEQCOUNT_LOCKNAME'
239 | SEQCOUNT_LOCKNAME(mutex, struct mutex, true, s->lock, mutex, mutex_lock(s->lock))
| ^~~~~~~~~~~~~~~~~
>> include/linux/seqlock.h:239:76: error: implicit declaration of function 'mutex_unlock'; did you mean
239 | SEQCOUNT_LOCKNAME(mutex, struct mutex, true, s->lock, mutex, mutex_lock(s->lock))
| ^~~~~
include/linux/seqlock.h:136:26: note: in definition of macro '__SEQ_LOCK'
136 | #define __SEQ_LOCK(expr) expr
| ^~~~
include/linux/seqlock.h:239:1: note: in expansion of macro 'SEQCOUNT_LOCKNAME'
239 | SEQCOUNT_LOCKNAME(mutex, struct mutex, true, s->lock, mutex, mutex_lock(s->lock))
| ^~~~~~~~~~~~~~~~~
include/linux/seqlock.h: In function '__seqprop_mutex_assert':
include/linux/lockdep.h:286:52: error: dereferencing pointer to incomplete type 'struct mutex'
286 | #define lockdep_is_held(lock) lock_is_held(&(lock)->dep_map)
| ^~
include/linux/seqlock.h:136:26: note: in definition of macro '__SEQ_LOCK'
136 | #define __SEQ_LOCK(expr) expr
| ^~~~
include/linux/lockdep.h:310:3: note: in expansion of macro 'WARN_ON'
310 | WARN_ON(debug_locks && | ^~~~~~~
include/linux/lockdep.h:311:4: note: in expansion of macro 'lockdep_is_held'
311 | lockdep_is_held(l) == LOCK_STATE_NOT_HELD); | ^~~~~~~~~~~~~~~
include/linux/seqlock.h:231:13: note: in expansion of macro 'lockdep_assert_held'
231 | __SEQ_LOCK(lockdep_assert_held(lockmember)); | ^~~~~~~~~~~~~~~~~~~
include/linux/seqlock.h:239:1: note: in expansion of macro 'SEQCOUNT_LOCKNAME'
239 | SEQCOUNT_LOCKNAME(mutex, struct mutex, true, s->lock, mutex, mutex_lock(s->lock))
| ^~~~~~~~~~~~~~~~~
include/linux/seqlock.h: In function '__seqprop_ww_mutex_sequence':
>> include/linux/seqlock.h:240:86: error: implicit declaration of function 'ww_mutex_lock'; did you mean
240 | SEQCOUNT_LOCKNAME(ww_mutex, struct ww_mutex, true, &s->lock->base, ww_mutex, ww_mutex_lock(s->lock, NULL))
| ^~~~~~~~~~~~~
include/linux/seqlock.h:136:26: note: in definition of macro '__SEQ_LOCK'
136 | #define __SEQ_LOCK(expr) expr
| ^~~~
include/linux/seqlock.h:240:1: note: in expansion of macro 'SEQCOUNT_LOCKNAME'
240 | SEQCOUNT_LOCKNAME(ww_mutex, struct ww_mutex, true, &s->lock->base, ww_mutex, ww_mutex_lock(s->lock, NULL))
| ^~~~~~~~~~~~~~~~~
>> include/linux/seqlock.h:240:76: error: implicit declaration of function 'ww_mutex_unlock'; did you mean
240 | SEQCOUNT_LOCKNAME(ww_mutex, struct ww_mutex, true, &s->lock->base, ww_mutex, ww_mutex_lock(s->lock, NULL))
| ^~~~~~~~
include/linux/seqlock.h:136:26: note: in definition of macro '__SEQ_LOCK'
136 | #define __SEQ_LOCK(expr) expr
| ^~~~
include/linux/seqlock.h:240:1: note: in expansion of macro 'SEQCOUNT_LOCKNAME'
240 | SEQCOUNT_LOCKNAME(ww_mutex, struct ww_mutex, true, &s->lock->base, ww_mutex, ww_mutex_lock(s->lock, NULL))
| ^~~~~~~~~~~~~~~~~
include/linux/seqlock.h: In function '__seqprop_ww_mutex_assert':
include/linux/seqlock.h:240:68: error: dereferencing pointer to incomplete type 'struct ww_mutex'
240 | SEQCOUNT_LOCKNAME(ww_mutex, struct ww_mutex, true, &s->lock->base, ww_mutex, ww_mutex_lock(s->lock, NULL))
| ^~
include/linux/seqlock.h:136:26: note: in definition of macro '__SEQ_LOCK'
136 | #define __SEQ_LOCK(expr) expr
| ^~~~
include/linux/lockdep.h:310:3: note: in expansion of macro 'WARN_ON'
310 | WARN_ON(debug_locks && | ^~~~~~~
include/linux/lockdep.h:311:4: note: in expansion of macro 'lockdep_is_held'
311 | lockdep_is_held(l) == LOCK_STATE_NOT_HELD); | ^~~~~~~~~~~~~~~
include/linux/seqlock.h:231:13: note: in expansion of macro 'lockdep_assert_held'
231 | __SEQ_LOCK(lockdep_assert_held(lockmember)); | ^~~~~~~~~~~~~~~~~~~
include/linux/seqlock.h:240:1: note: in expansion of macro 'SEQCOUNT_LOCKNAME'
240 | SEQCOUNT_LOCKNAME(ww_mutex, struct ww_mutex, true, &s->lock->base, ww_mutex, ww_mutex_lock(s->lock, NULL))
| ^~~~~~~~~~~~~~~~~
arch/sparc/kernel/asm-offsets.c: At top level:
arch/sparc/kernel/asm-offsets.c:29:5: warning: no previous prototype for 'sparc64_foo'
29 | int sparc64_foo(void)
| ^~~~~~~~~~~
arch/sparc/kernel/asm-offsets.c:48:5: warning: no previous prototype for 'foo'
48 | int foo(void)
| ^~~
In file included from arch/sparc/kernel/asm-offsets.c:17:
arch/sparc/kernel/asm-offsets.c: In function 'foo':
include/linux/compiler_types.h:140:35: error: 'struct task_struct' has no member named 'thread'
140 | #define __compiler_offsetof(a, b) __builtin_offsetof(a, b)
| ^~~~~~~~~~~~~~~~~~
include/linux/kbuild.h:6:62: note: in definition of macro 'DEFINE'
6 | asm volatile("n.ascii "->" #sym " %0 " #val """ : : "i" (val))
| ^~~
include/linux/stddef.h:17:32: note: in expansion of macro '__compiler_offsetof'
17 | #define offsetof(TYPE, MEMBER) __compiler_offsetof(TYPE, MEMBER)
| ^~~~~~~~~~~~~~~~~~~
arch/sparc/kernel/asm-offsets.c:51:27: note: in expansion of macro 'offsetof'
51 | DEFINE(AOFF_task_thread, offsetof(struct task_struct, thread));
| ^~~~~~~~
cc1: some warnings being treated as errors
Makefile arch block certs crypto drivers fs include init ipc kernel lib mm net scripts security sound source usr virt [scripts/Makefile.build:117: arch/sparc/kernel/asm-offsets.s] Error 1
Target '__build' not remade because of errors.
Makefile arch block certs crypto drivers fs include init ipc kernel lib mm net scripts security sound source usr virt [Makefile:1232: prepare0] Error 2
Target 'prepare' not remade because of errors.
make: Makefile arch block certs crypto drivers fs include init ipc kernel lib mm net scripts security sound source usr virt [Makefile:215: __sub-make] Error 2
make: Target 'prepare' not remade because of errors.

Kconfig warnings: (for reference only)
WARNING: unmet direct dependencies detected for LOCKDEP
Depends on DEBUG_KERNEL && LOCK_DEBUGGING_SUPPORT && (FRAME_POINTER || MIPS || PPC || S390 || MICROBLAZE || ARM || ARC || X86)
Selected by
- LOCK_STAT && DEBUG_KERNEL && LOCK_DEBUGGING_SUPPORT
- DEBUG_LOCK_ALLOC && DEBUG_KERNEL && LOCK_DEBUGGING_SUPPORT


vim +/mutex_unlock +239 include/linux/seqlock.h

267580db047ef42 peterz@xxxxxxxxxxxxx 2020-09-15 172
55f3560df975f55 Ahmed S. Darwish 2020-07-20 173 /*
6dd699b13d53f26 Ahmed S. Darwish 2020-09-04 174 * SEQCOUNT_LOCKNAME() - Instantiate seqcount_LOCKNAME_t and helpers
5cdd25572a29e46 Ahmed S. Darwish 2020-09-04 175 * seqprop_LOCKNAME_*() - Property accessors for seqcount_LOCKNAME_t
5cdd25572a29e46 Ahmed S. Darwish 2020-09-04 176 *
6dd699b13d53f26 Ahmed S. Darwish 2020-09-04 177 * @lockname: "LOCKNAME" part of seqcount_LOCKNAME_t
6dd699b13d53f26 Ahmed S. Darwish 2020-09-04 178 * @locktype: LOCKNAME canonical C data type
8117ab508f9c476 Ahmed S. Darwish 2020-09-04 179 * @preemptible: preemptibility of above locktype
a8772dccb2ec7b1 Peter Zijlstra 2020-07-23 180 * @lockmember: argument for lockdep_assert_held()
8117ab508f9c476 Ahmed S. Darwish 2020-09-04 181 * @lockbase: associated lock release function (prefix only)
8117ab508f9c476 Ahmed S. Darwish 2020-09-04 182 * @lock_acquire: associated lock acquisition function (full call)
55f3560df975f55 Ahmed S. Darwish 2020-07-20 183 */
8117ab508f9c476 Ahmed S. Darwish 2020-09-04 184 #define SEQCOUNT_LOCKNAME(lockname, locktype, preemptible, lockmember, lockbase, lock_acquire) \
a8772dccb2ec7b1 Peter Zijlstra 2020-07-23 185 typedef struct seqcount_##lockname { \
a8772dccb2ec7b1 Peter Zijlstra 2020-07-23 186 seqcount_t seqcount; \
a8772dccb2ec7b1 Peter Zijlstra 2020-07-23 187 __SEQ_LOCK(locktype *lock); \
a8772dccb2ec7b1 Peter Zijlstra 2020-07-23 188 } seqcount_##lockname##_t; \
a8772dccb2ec7b1 Peter Zijlstra 2020-07-23 189 \
a8772dccb2ec7b1 Peter Zijlstra 2020-07-23 190 static __always_inline seqcount_t * \
5cdd25572a29e46 Ahmed S. Darwish 2020-09-04 191 __seqprop_##lockname##_ptr(seqcount_##lockname##_t *s) \
55f3560df975f55 Ahmed S. Darwish 2020-07-20 192 { \
55f3560df975f55 Ahmed S. Darwish 2020-07-20 193 return &s->seqcount; \
55f3560df975f55 Ahmed S. Darwish 2020-07-20 194 } \
55f3560df975f55 Ahmed S. Darwish 2020-07-20 195 \
52ac39e5db5148f Ahmed S. Darwish 2020-09-04 196 static __always_inline unsigned \
52ac39e5db5148f Ahmed S. Darwish 2020-09-04 197 __seqprop_##lockname##_sequence(const seqcount_##lockname##_t *s) \
52ac39e5db5148f Ahmed S. Darwish 2020-09-04 198 { \
8117ab508f9c476 Ahmed S. Darwish 2020-09-04 199 unsigned seq = READ_ONCE(s->seqcount.sequence); \
8117ab508f9c476 Ahmed S. Darwish 2020-09-04 200 \
8117ab508f9c476 Ahmed S. Darwish 2020-09-04 201 if (!IS_ENABLED(CONFIG_PREEMPT_RT)) \
8117ab508f9c476 Ahmed S. Darwish 2020-09-04 202 return seq; \
8117ab508f9c476 Ahmed S. Darwish 2020-09-04 203 \
8117ab508f9c476 Ahmed S. Darwish 2020-09-04 204 if (preemptible && unlikely(seq & 1)) { \
8117ab508f9c476 Ahmed S. Darwish 2020-09-04 205 __SEQ_LOCK(lock_acquire); \
8117ab508f9c476 Ahmed S. Darwish 2020-09-04 206 __SEQ_LOCK(lockbase##_unlock(s->lock)); \
8117ab508f9c476 Ahmed S. Darwish 2020-09-04 207 \
8117ab508f9c476 Ahmed S. Darwish 2020-09-04 208 /* \
8117ab508f9c476 Ahmed S. Darwish 2020-09-04 209 * Re-read the sequence counter since the (possibly \
8117ab508f9c476 Ahmed S. Darwish 2020-09-04 210 * preempted) writer made progress. \
8117ab508f9c476 Ahmed S. Darwish 2020-09-04 211 */ \
8117ab508f9c476 Ahmed S. Darwish 2020-09-04 212 seq = READ_ONCE(s->seqcount.sequence); \
8117ab508f9c476 Ahmed S. Darwish 2020-09-04 213 } \
8117ab508f9c476 Ahmed S. Darwish 2020-09-04 214 \
8117ab508f9c476 Ahmed S. Darwish 2020-09-04 215 return seq; \
52ac39e5db5148f Ahmed S. Darwish 2020-09-04 216 } \
52ac39e5db5148f Ahmed S. Darwish 2020-09-04 217 \
a8772dccb2ec7b1 Peter Zijlstra 2020-07-23 218 static __always_inline bool \
5cdd25572a29e46 Ahmed S. Darwish 2020-09-04 219 __seqprop_##lockname##_preemptible(const seqcount_##lockname##_t *s) \
55f3560df975f55 Ahmed S. Darwish 2020-07-20 220 { \
8117ab508f9c476 Ahmed S. Darwish 2020-09-04 221 if (!IS_ENABLED(CONFIG_PREEMPT_RT)) \
a8772dccb2ec7b1 Peter Zijlstra 2020-07-23 222 return preemptible; \
8117ab508f9c476 Ahmed S. Darwish 2020-09-04 223 \
8117ab508f9c476 Ahmed S. Darwish 2020-09-04 224 /* PREEMPT_RT relies on the above LOCK+UNLOCK */ \
8117ab508f9c476 Ahmed S. Darwish 2020-09-04 225 return false; \
55f3560df975f55 Ahmed S. Darwish 2020-07-20 226 } \
55f3560df975f55 Ahmed S. Darwish 2020-07-20 227 \
a8772dccb2ec7b1 Peter Zijlstra 2020-07-23 228 static __always_inline void \
5cdd25572a29e46 Ahmed S. Darwish 2020-09-04 229 __seqprop_##lockname##_assert(const seqcount_##lockname##_t *s) \
55f3560df975f55 Ahmed S. Darwish 2020-07-20 230 { \
e55687fe5c1e484 Peter Zijlstra 2020-07-23 @231 __SEQ_LOCK(lockdep_assert_held(lockmember)); \
55f3560df975f55 Ahmed S. Darwish 2020-07-20 232 }
55f3560df975f55 Ahmed S. Darwish 2020-07-20 233
8117ab508f9c476 Ahmed S. Darwish 2020-09-04 234 #define __SEQ_RT IS_ENABLED(CONFIG_PREEMPT_RT)
8117ab508f9c476 Ahmed S. Darwish 2020-09-04 235
8117ab508f9c476 Ahmed S. Darwish 2020-09-04 236 SEQCOUNT_LOCKNAME(raw_spinlock, raw_spinlock_t, false, s->lock, raw_spin, raw_spin_lock(s->lock))
8117ab508f9c476 Ahmed S. Darwish 2020-09-04 237 SEQCOUNT_LOCKNAME(spinlock, spinlock_t, __SEQ_RT, s->lock, spin, spin_lock(s->lock))
8117ab508f9c476 Ahmed S. Darwish 2020-09-04 238 SEQCOUNT_LOCKNAME(rwlock, rwlock_t, __SEQ_RT, s->lock, read, read_lock(s->lock))
8117ab508f9c476 Ahmed S. Darwish 2020-09-04 @239 SEQCOUNT_LOCKNAME(mutex, struct mutex, true, s->lock, mutex, mutex_lock(s->lock))
8117ab508f9c476 Ahmed S. Darwish 2020-09-04 @240 SEQCOUNT_LOCKNAME(ww_mutex, struct ww_mutex, true, &s->lock->base, ww_mutex, ww_mutex_lock(s->lock, NULL))
a8772dccb2ec7b1 Peter Zijlstra 2020-07-23 241

:::::: The code at line 239 was first introduced by commit
:::::: 8117ab508f9c476e0a10b9db7f4818f784cf3176 seqlock: seqcount_LOCKNAME_t: Introduce PREEMPT_RT support

:::::: TO: Ahmed S. Darwish <a.darwish@xxxxxxxxxxxxx>
:::::: CC: Peter Zijlstra <peterz@xxxxxxxxxxxxx>

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@xxxxxxxxxxxx

Attachment: .config.gz
Description: application/gzip