Message ID | 1523253969-31699-2-git-send-email-kpark3469@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Hi Sahara,
Thank you for the patch! Yet something to improve:
[auto build test ERROR on linus/master]
[also build test ERROR on v4.16 next-20180406]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
url: https://github.com/0day-ci/linux/commits/kpark3469-gmail-com/usercopy-reimplement-arch_within_stack_frames/20180409-144349
config: i386-randconfig-x071-201814 (attached as .config)
compiler: gcc-7 (Debian 7.3.0-1) 7.3.0
reproduce:
# save the attached .config to linux build tree
make ARCH=i386
All errors (new ones prefixed by >>):
from include/linux/time.h:6,
from include/linux/ktime.h:24,
from include/linux/rcutiny.h:28,
from include/linux/rcupdate.h:211,
from include/linux/rculist.h:11,
from include/linux/pid.h:5,
from include/linux/sched.h:14,
from include/linux/uaccess.h:5,
from arch/x86/include/asm/stacktrace.h:10,
from include/linux/stacktrace.h:6,
from include/linux/lockdep.h:29,
from include/linux/spinlock_types.h:18,
from kernel/bounds.c:14:
include/linux/spinlock.h:297:24: error: unknown type name 'raw_spinlock_t'
static __always_inline raw_spinlock_t *spinlock_check(spinlock_t *lock)
^~~~~~~~~~~~~~
include/linux/spinlock.h:297:55: error: unknown type name 'spinlock_t'; did you mean 'clock_t'?
static __always_inline raw_spinlock_t *spinlock_check(spinlock_t *lock)
^~~~~~~~~~
clock_t
include/linux/spinlock.h:308:39: error: unknown type name 'spinlock_t'; did you mean 'clock_t'?
static __always_inline void spin_lock(spinlock_t *lock)
^~~~~~~~~~
clock_t
include/linux/spinlock.h:313:42: error: unknown type name 'spinlock_t'; did you mean 'clock_t'?
static __always_inline void spin_lock_bh(spinlock_t *lock)
^~~~~~~~~~
clock_t
include/linux/spinlock.h:318:41: error: unknown type name 'spinlock_t'; did you mean 'clock_t'?
static __always_inline int spin_trylock(spinlock_t *lock)
^~~~~~~~~~
clock_t
include/linux/spinlock.h:333:43: error: unknown type name 'spinlock_t'; did you mean 'clock_t'?
static __always_inline void spin_lock_irq(spinlock_t *lock)
^~~~~~~~~~
clock_t
include/linux/spinlock.h:348:41: error: unknown type name 'spinlock_t'; did you mean 'clock_t'?
static __always_inline void spin_unlock(spinlock_t *lock)
^~~~~~~~~~
clock_t
include/linux/spinlock.h:353:44: error: unknown type name 'spinlock_t'; did you mean 'clock_t'?
static __always_inline void spin_unlock_bh(spinlock_t *lock)
^~~~~~~~~~
clock_t
include/linux/spinlock.h:358:45: error: unknown type name 'spinlock_t'; did you mean 'clock_t'?
static __always_inline void spin_unlock_irq(spinlock_t *lock)
^~~~~~~~~~
clock_t
include/linux/spinlock.h:363:52: error: unknown type name 'spinlock_t'; did you mean 'clock_t'?
static __always_inline void spin_unlock_irqrestore(spinlock_t *lock, unsigned long flags)
^~~~~~~~~~
clock_t
include/linux/spinlock.h:368:44: error: unknown type name 'spinlock_t'; did you mean 'clock_t'?
static __always_inline int spin_trylock_bh(spinlock_t *lock)
^~~~~~~~~~
clock_t
include/linux/spinlock.h:373:45: error: unknown type name 'spinlock_t'; did you mean 'clock_t'?
static __always_inline int spin_trylock_irq(spinlock_t *lock)
^~~~~~~~~~
clock_t
include/linux/spinlock.h:383:43: error: unknown type name 'spinlock_t'; did you mean 'clock_t'?
static __always_inline int spin_is_locked(spinlock_t *lock)
^~~~~~~~~~
clock_t
include/linux/spinlock.h:388:46: error: unknown type name 'spinlock_t'; did you mean 'clock_t'?
static __always_inline int spin_is_contended(spinlock_t *lock)
^~~~~~~~~~
clock_t
include/linux/spinlock.h:408:51: error: unknown type name 'spinlock_t'; did you mean 'clock_t'?
extern int _atomic_dec_and_lock(atomic_t *atomic, spinlock_t *lock);
^~~~~~~~~~
clock_t
include/linux/spinlock.h:412:28: error: unknown type name 'spinlock_t'; did you mean 'clock_t'?
int alloc_bucket_spinlocks(spinlock_t **locks, unsigned int *lock_mask,
^~~~~~~~~~
clock_t
include/linux/spinlock.h:416:28: error: unknown type name 'spinlock_t'; did you mean 'clock_t'?
void free_bucket_spinlocks(spinlock_t *locks);
^~~~~~~~~~
clock_t
In file included from include/linux/time.h:6:0,
from include/linux/ktime.h:24,
from include/linux/rcutiny.h:28,
from include/linux/rcupdate.h:211,
from include/linux/rculist.h:11,
from include/linux/pid.h:5,
from include/linux/sched.h:14,
from include/linux/uaccess.h:5,
from arch/x86/include/asm/stacktrace.h:10,
from include/linux/stacktrace.h:6,
from include/linux/lockdep.h:29,
from include/linux/spinlock_types.h:18,
from kernel/bounds.c:14:
include/linux/seqlock.h:51:21: error: field 'dep_map' has incomplete type
struct lockdep_map dep_map;
^~~~~~~
include/linux/seqlock.h:56:15: warning: 'struct lock_class_key' declared inside parameter list will not be visible outside of this definition or declaration
struct lock_class_key *key)
^~~~~~~~~~~~~~
include/linux/seqlock.h: In function '__seqcount_init':
>> include/linux/seqlock.h:61:2: error: implicit declaration of function 'lockdep_init_map' [-Werror=implicit-function-declaration]
lockdep_init_map(&s->dep_map, name, key, 0);
^~~~~~~~~~~~~~~~
include/linux/seqlock.h: In function 'seqcount_lockdep_reader_access':
include/linux/seqlock.h:81:2: error: implicit declaration of function 'seqcount_acquire_read' [-Werror=implicit-function-declaration]
seqcount_acquire_read(&l->dep_map, 0, 0, _RET_IP_);
^~~~~~~~~~~~~~~~~~~~~
include/linux/seqlock.h:82:2: error: implicit declaration of function 'seqcount_release'; did you mean 'xchg_release'? [-Werror=implicit-function-declaration]
seqcount_release(&l->dep_map, 1, _RET_IP_);
^~~~~~~~~~~~~~~~
xchg_release
include/linux/seqlock.h: In function 'write_seqcount_begin_nested':
include/linux/seqlock.h:377:2: error: implicit declaration of function 'seqcount_acquire'; did you mean 'seqcount_init'? [-Werror=implicit-function-declaration]
seqcount_acquire(&s->dep_map, subclass, 0, _RET_IP_);
^~~~~~~~~~~~~~~~
seqcount_init
include/linux/seqlock.h: At top level:
include/linux/seqlock.h:406:2: error: unknown type name 'spinlock_t'
spinlock_t lock;
^~~~~~~~~~
include/linux/seqlock.h: In function 'write_seqlock':
include/linux/seqlock.h:448:2: error: implicit declaration of function 'spin_lock'; did you mean 'write_lock'? [-Werror=implicit-function-declaration]
spin_lock(&sl->lock);
^~~~~~~~~
write_lock
include/linux/seqlock.h: In function 'write_sequnlock':
include/linux/seqlock.h:455:2: error: implicit declaration of function 'spin_unlock'; did you mean 'raw_spin_unlock'? [-Werror=implicit-function-declaration]
spin_unlock(&sl->lock);
^~~~~~~~~~~
raw_spin_unlock
include/linux/seqlock.h: In function 'write_seqlock_bh':
include/linux/seqlock.h:460:2: error: implicit declaration of function 'spin_lock_bh'; did you mean 'raw_spin_lock_bh'? [-Werror=implicit-function-declaration]
spin_lock_bh(&sl->lock);
^~~~~~~~~~~~
raw_spin_lock_bh
include/linux/seqlock.h: In function 'write_sequnlock_bh':
include/linux/seqlock.h:467:2: error: implicit declaration of function 'spin_unlock_bh'; did you mean 'write_unlock_bh'? [-Werror=implicit-function-declaration]
spin_unlock_bh(&sl->lock);
^~~~~~~~~~~~~~
write_unlock_bh
include/linux/seqlock.h: In function 'write_seqlock_irq':
include/linux/seqlock.h:472:2: error: implicit declaration of function 'spin_lock_irq'; did you mean 'spin_lock_init'? [-Werror=implicit-function-declaration]
spin_lock_irq(&sl->lock);
^~~~~~~~~~~~~
spin_lock_init
include/linux/seqlock.h: In function 'write_sequnlock_irq':
include/linux/seqlock.h:479:2: error: implicit declaration of function 'spin_unlock_irq'; did you mean 'read_unlock_irq'? [-Werror=implicit-function-declaration]
spin_unlock_irq(&sl->lock);
^~~~~~~~~~~~~~~
read_unlock_irq
In file included from include/linux/seqlock.h:36:0,
from include/linux/time.h:6,
from include/linux/ktime.h:24,
from include/linux/rcutiny.h:28,
from include/linux/rcupdate.h:211,
from include/linux/rculist.h:11,
from include/linux/pid.h:5,
from include/linux/sched.h:14,
from include/linux/uaccess.h:5,
from arch/x86/include/asm/stacktrace.h:10,
from include/linux/stacktrace.h:6,
from include/linux/lockdep.h:29,
from include/linux/spinlock_types.h:18,
from kernel/bounds.c:14:
include/linux/seqlock.h: In function '__write_seqlock_irqsave':
include/linux/spinlock.h:222:11: error: implicit declaration of function '_raw_spin_lock_irqsave'; did you mean 'raw_spin_lock_irqsave'? [-Werror=implicit-function-declaration]
flags = _raw_spin_lock_irqsave(lock); \
^
include/linux/spinlock.h:340:2: note: in expansion of macro 'raw_spin_lock_irqsave'
raw_spin_lock_irqsave(spinlock_check(lock), flags); \
^~~~~~~~~~~~~~~~~~~~~
include/linux/seqlock.h:486:2: note: in expansion of macro 'spin_lock_irqsave'
spin_lock_irqsave(&sl->lock, flags);
^~~~~~~~~~~~~~~~~
include/linux/spinlock.h:340:24: error: implicit declaration of function 'spinlock_check'; did you mean 'cpumask_check'? [-Werror=implicit-function-declaration]
raw_spin_lock_irqsave(spinlock_check(lock), flags); \
^
include/linux/spinlock.h:222:34: note: in definition of macro 'raw_spin_lock_irqsave'
flags = _raw_spin_lock_irqsave(lock); \
^~~~
include/linux/seqlock.h:486:2: note: in expansion of macro 'spin_lock_irqsave'
spin_lock_irqsave(&sl->lock, flags);
^~~~~~~~~~~~~~~~~
In file included from include/linux/time.h:6:0,
from include/linux/ktime.h:24,
from include/linux/rcutiny.h:28,
from include/linux/rcupdate.h:211,
from include/linux/rculist.h:11,
from include/linux/pid.h:5,
from include/linux/sched.h:14,
from include/linux/uaccess.h:5,
from arch/x86/include/asm/stacktrace.h:10,
from include/linux/stacktrace.h:6,
from include/linux/lockdep.h:29,
from include/linux/spinlock_types.h:18,
from kernel/bounds.c:14:
include/linux/seqlock.h: In function 'write_sequnlock_irqrestore':
include/linux/seqlock.h:498:2: error: implicit declaration of function 'spin_unlock_irqrestore'; did you mean 'write_unlock_irqrestore'? [-Werror=implicit-function-declaration]
spin_unlock_irqrestore(&sl->lock, flags);
^~~~~~~~~~~~~~~~~~~~~~
write_unlock_irqrestore
vim +/lockdep_init_map +61 include/linux/seqlock.h
^1da177e Linus Torvalds 2005-04-16 41
^1da177e Linus Torvalds 2005-04-16 42 /*
^1da177e Linus Torvalds 2005-04-16 43 * Version using sequence counter only.
^1da177e Linus Torvalds 2005-04-16 44 * This can be used when code has its own mutex protecting the
^1da177e Linus Torvalds 2005-04-16 45 * updating starting before the write_seqcountbeqin() and ending
^1da177e Linus Torvalds 2005-04-16 46 * after the write_seqcount_end().
^1da177e Linus Torvalds 2005-04-16 47 */
^1da177e Linus Torvalds 2005-04-16 48 typedef struct seqcount {
^1da177e Linus Torvalds 2005-04-16 49 unsigned sequence;
1ca7d67c John Stultz 2013-10-07 50 #ifdef CONFIG_DEBUG_LOCK_ALLOC
1ca7d67c John Stultz 2013-10-07 @51 struct lockdep_map dep_map;
1ca7d67c John Stultz 2013-10-07 52 #endif
^1da177e Linus Torvalds 2005-04-16 53 } seqcount_t;
^1da177e Linus Torvalds 2005-04-16 54
1ca7d67c John Stultz 2013-10-07 55 static inline void __seqcount_init(seqcount_t *s, const char *name,
1ca7d67c John Stultz 2013-10-07 56 struct lock_class_key *key)
1ca7d67c John Stultz 2013-10-07 57 {
1ca7d67c John Stultz 2013-10-07 58 /*
1ca7d67c John Stultz 2013-10-07 59 * Make sure we are not reinitializing a held lock:
1ca7d67c John Stultz 2013-10-07 60 */
1ca7d67c John Stultz 2013-10-07 @61 lockdep_init_map(&s->dep_map, name, key, 0);
1ca7d67c John Stultz 2013-10-07 62 s->sequence = 0;
1ca7d67c John Stultz 2013-10-07 63 }
1ca7d67c John Stultz 2013-10-07 64
:::::: The code at line 61 was first introduced by commit
:::::: 1ca7d67cf5d5a2aef26a8d9afd789006fa098347 seqcount: Add lockdep functionality to seqcount/seqlock structures
:::::: TO: John Stultz <john.stultz@linaro.org>
:::::: CC: Ingo Molnar <mingo@kernel.org>
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
Hi Sahara,
Thank you for the patch! Yet something to improve:
[auto build test ERROR on linus/master]
[also build test ERROR on v4.16 next-20180406]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
url: https://github.com/0day-ci/linux/commits/kpark3469-gmail-com/usercopy-reimplement-arch_within_stack_frames/20180409-144349
config: x86_64-randconfig-x013-201814 (attached as .config)
compiler: gcc-7 (Debian 7.3.0-1) 7.3.0
reproduce:
# save the attached .config to linux build tree
make ARCH=x86_64
All errors (new ones prefixed by >>):
from include/linux/uaccess.h:5,
from arch/x86/include/asm/stacktrace.h:10,
from include/linux/stacktrace.h:6,
from include/linux/lockdep.h:29,
from include/linux/spinlock_types.h:18,
from kernel/bounds.c:14:
include/linux/spinlock.h:297:24: error: unknown type name 'raw_spinlock_t'
static __always_inline raw_spinlock_t *spinlock_check(spinlock_t *lock)
^~~~~~~~~~~~~~
include/linux/spinlock.h:297:55: error: unknown type name 'spinlock_t'; did you mean 'clock_t'?
static __always_inline raw_spinlock_t *spinlock_check(spinlock_t *lock)
^~~~~~~~~~
clock_t
include/linux/spinlock.h:308:39: error: unknown type name 'spinlock_t'; did you mean 'clock_t'?
static __always_inline void spin_lock(spinlock_t *lock)
^~~~~~~~~~
clock_t
include/linux/spinlock.h:313:42: error: unknown type name 'spinlock_t'; did you mean 'clock_t'?
static __always_inline void spin_lock_bh(spinlock_t *lock)
^~~~~~~~~~
clock_t
include/linux/spinlock.h:318:41: error: unknown type name 'spinlock_t'; did you mean 'clock_t'?
static __always_inline int spin_trylock(spinlock_t *lock)
^~~~~~~~~~
clock_t
include/linux/spinlock.h:333:43: error: unknown type name 'spinlock_t'; did you mean 'clock_t'?
static __always_inline void spin_lock_irq(spinlock_t *lock)
^~~~~~~~~~
clock_t
include/linux/spinlock.h:348:41: error: unknown type name 'spinlock_t'; did you mean 'clock_t'?
static __always_inline void spin_unlock(spinlock_t *lock)
^~~~~~~~~~
clock_t
include/linux/spinlock.h:353:44: error: unknown type name 'spinlock_t'; did you mean 'clock_t'?
static __always_inline void spin_unlock_bh(spinlock_t *lock)
^~~~~~~~~~
clock_t
include/linux/spinlock.h:358:45: error: unknown type name 'spinlock_t'; did you mean 'clock_t'?
static __always_inline void spin_unlock_irq(spinlock_t *lock)
^~~~~~~~~~
clock_t
include/linux/spinlock.h:363:52: error: unknown type name 'spinlock_t'; did you mean 'clock_t'?
static __always_inline void spin_unlock_irqrestore(spinlock_t *lock, unsigned long flags)
^~~~~~~~~~
clock_t
include/linux/spinlock.h:368:44: error: unknown type name 'spinlock_t'; did you mean 'clock_t'?
static __always_inline int spin_trylock_bh(spinlock_t *lock)
^~~~~~~~~~
clock_t
include/linux/spinlock.h:373:45: error: unknown type name 'spinlock_t'; did you mean 'clock_t'?
static __always_inline int spin_trylock_irq(spinlock_t *lock)
^~~~~~~~~~
clock_t
include/linux/spinlock.h:383:43: error: unknown type name 'spinlock_t'; did you mean 'clock_t'?
static __always_inline int spin_is_locked(spinlock_t *lock)
^~~~~~~~~~
clock_t
include/linux/spinlock.h:388:46: error: unknown type name 'spinlock_t'; did you mean 'clock_t'?
static __always_inline int spin_is_contended(spinlock_t *lock)
^~~~~~~~~~
clock_t
include/linux/spinlock.h:408:51: error: unknown type name 'spinlock_t'; did you mean 'clock_t'?
extern int _atomic_dec_and_lock(atomic_t *atomic, spinlock_t *lock);
^~~~~~~~~~
clock_t
include/linux/spinlock.h:412:28: error: unknown type name 'spinlock_t'; did you mean 'clock_t'?
int alloc_bucket_spinlocks(spinlock_t **locks, unsigned int *lock_mask,
^~~~~~~~~~
clock_t
include/linux/spinlock.h:416:28: error: unknown type name 'spinlock_t'; did you mean 'clock_t'?
void free_bucket_spinlocks(spinlock_t *locks);
^~~~~~~~~~
clock_t
In file included from include/linux/time.h:6:0,
from include/linux/ktime.h:24,
from include/linux/rcutiny.h:28,
from include/linux/rcupdate.h:211,
from include/linux/rculist.h:11,
from include/linux/pid.h:5,
from include/linux/sched.h:14,
from include/linux/uaccess.h:5,
from arch/x86/include/asm/stacktrace.h:10,
from include/linux/stacktrace.h:6,
from include/linux/lockdep.h:29,
from include/linux/spinlock_types.h:18,
from kernel/bounds.c:14:
include/linux/seqlock.h:51:21: error: field 'dep_map' has incomplete type
struct lockdep_map dep_map;
^~~~~~~
include/linux/seqlock.h:56:15: warning: 'struct lock_class_key' declared inside parameter list will not be visible outside of this definition or declaration
struct lock_class_key *key)
^~~~~~~~~~~~~~
include/linux/seqlock.h: In function '__seqcount_init':
include/linux/seqlock.h:61:2: error: implicit declaration of function 'lockdep_init_map' [-Werror=implicit-function-declaration]
lockdep_init_map(&s->dep_map, name, key, 0);
^~~~~~~~~~~~~~~~
include/linux/seqlock.h: In function 'seqcount_lockdep_reader_access':
include/linux/seqlock.h:81:2: error: implicit declaration of function 'seqcount_acquire_read' [-Werror=implicit-function-declaration]
seqcount_acquire_read(&l->dep_map, 0, 0, _RET_IP_);
^~~~~~~~~~~~~~~~~~~~~
>> include/linux/seqlock.h:82:2: error: implicit declaration of function 'seqcount_release'; did you mean 'seqcount_init'? [-Werror=implicit-function-declaration]
seqcount_release(&l->dep_map, 1, _RET_IP_);
^~~~~~~~~~~~~~~~
seqcount_init
include/linux/seqlock.h: In function 'write_seqcount_begin_nested':
include/linux/seqlock.h:377:2: error: implicit declaration of function 'seqcount_acquire'; did you mean 'seqcount_init'? [-Werror=implicit-function-declaration]
seqcount_acquire(&s->dep_map, subclass, 0, _RET_IP_);
^~~~~~~~~~~~~~~~
seqcount_init
include/linux/seqlock.h: At top level:
include/linux/seqlock.h:406:2: error: unknown type name 'spinlock_t'
spinlock_t lock;
^~~~~~~~~~
include/linux/seqlock.h: In function 'write_seqlock':
include/linux/seqlock.h:448:2: error: implicit declaration of function 'spin_lock'; did you mean 'write_lock'? [-Werror=implicit-function-declaration]
spin_lock(&sl->lock);
^~~~~~~~~
write_lock
include/linux/seqlock.h: In function 'write_sequnlock':
include/linux/seqlock.h:455:2: error: implicit declaration of function 'spin_unlock'; did you mean 'raw_spin_unlock'? [-Werror=implicit-function-declaration]
spin_unlock(&sl->lock);
^~~~~~~~~~~
raw_spin_unlock
include/linux/seqlock.h: In function 'write_seqlock_bh':
include/linux/seqlock.h:460:2: error: implicit declaration of function 'spin_lock_bh'; did you mean 'raw_spin_lock_bh'? [-Werror=implicit-function-declaration]
spin_lock_bh(&sl->lock);
^~~~~~~~~~~~
raw_spin_lock_bh
include/linux/seqlock.h: In function 'write_sequnlock_bh':
include/linux/seqlock.h:467:2: error: implicit declaration of function 'spin_unlock_bh'; did you mean 'write_unlock_bh'? [-Werror=implicit-function-declaration]
spin_unlock_bh(&sl->lock);
^~~~~~~~~~~~~~
write_unlock_bh
include/linux/seqlock.h: In function 'write_seqlock_irq':
include/linux/seqlock.h:472:2: error: implicit declaration of function 'spin_lock_irq'; did you mean 'spin_lock_init'? [-Werror=implicit-function-declaration]
spin_lock_irq(&sl->lock);
^~~~~~~~~~~~~
spin_lock_init
include/linux/seqlock.h: In function 'write_sequnlock_irq':
include/linux/seqlock.h:479:2: error: implicit declaration of function 'spin_unlock_irq'; did you mean 'read_unlock_irq'? [-Werror=implicit-function-declaration]
spin_unlock_irq(&sl->lock);
^~~~~~~~~~~~~~~
read_unlock_irq
In file included from include/linux/seqlock.h:36:0,
from include/linux/time.h:6,
from include/linux/ktime.h:24,
from include/linux/rcutiny.h:28,
from include/linux/rcupdate.h:211,
from include/linux/rculist.h:11,
from include/linux/pid.h:5,
from include/linux/sched.h:14,
from include/linux/uaccess.h:5,
from arch/x86/include/asm/stacktrace.h:10,
from include/linux/stacktrace.h:6,
from include/linux/lockdep.h:29,
from include/linux/spinlock_types.h:18,
from kernel/bounds.c:14:
include/linux/seqlock.h: In function '__write_seqlock_irqsave':
include/linux/spinlock.h:222:11: error: implicit declaration of function '_raw_spin_lock_irqsave'; did you mean 'raw_spin_lock_irqsave'? [-Werror=implicit-function-declaration]
flags = _raw_spin_lock_irqsave(lock); \
^
include/linux/spinlock.h:340:2: note: in expansion of macro 'raw_spin_lock_irqsave'
raw_spin_lock_irqsave(spinlock_check(lock), flags); \
^~~~~~~~~~~~~~~~~~~~~
include/linux/seqlock.h:486:2: note: in expansion of macro 'spin_lock_irqsave'
spin_lock_irqsave(&sl->lock, flags);
^~~~~~~~~~~~~~~~~
include/linux/spinlock.h:340:24: error: implicit declaration of function 'spinlock_check'; did you mean 'cpumask_check'? [-Werror=implicit-function-declaration]
raw_spin_lock_irqsave(spinlock_check(lock), flags); \
^
include/linux/spinlock.h:222:34: note: in definition of macro 'raw_spin_lock_irqsave'
flags = _raw_spin_lock_irqsave(lock); \
^~~~
include/linux/seqlock.h:486:2: note: in expansion of macro 'spin_lock_irqsave'
spin_lock_irqsave(&sl->lock, flags);
^~~~~~~~~~~~~~~~~
In file included from include/linux/time.h:6:0,
from include/linux/ktime.h:24,
from include/linux/rcutiny.h:28,
from include/linux/rcupdate.h:211,
from include/linux/rculist.h:11,
from include/linux/pid.h:5,
from include/linux/sched.h:14,
from include/linux/uaccess.h:5,
from arch/x86/include/asm/stacktrace.h:10,
from include/linux/stacktrace.h:6,
from include/linux/lockdep.h:29,
from include/linux/spinlock_types.h:18,
from kernel/bounds.c:14:
include/linux/seqlock.h: In function 'write_sequnlock_irqrestore':
include/linux/seqlock.h:498:2: error: implicit declaration of function 'spin_unlock_irqrestore'; did you mean 'raw_spin_unlock_irqrestore'? [-Werror=implicit-function-declaration]
spin_unlock_irqrestore(&sl->lock, flags);
^~~~~~~~~~~~~~~~~~~~~~
raw_spin_unlock_irqrestore
In file included from include/linux/rculist.h:11:0,
from include/linux/pid.h:5,
from include/linux/sched.h:14,
from include/linux/uaccess.h:5,
from arch/x86/include/asm/stacktrace.h:10,
from include/linux/stacktrace.h:6,
from include/linux/lockdep.h:29,
vim +82 include/linux/seqlock.h
^1da177e Linus Torvalds 2005-04-16 54
1ca7d67c John Stultz 2013-10-07 55 static inline void __seqcount_init(seqcount_t *s, const char *name,
1ca7d67c John Stultz 2013-10-07 56 struct lock_class_key *key)
1ca7d67c John Stultz 2013-10-07 57 {
1ca7d67c John Stultz 2013-10-07 58 /*
1ca7d67c John Stultz 2013-10-07 59 * Make sure we are not reinitializing a held lock:
1ca7d67c John Stultz 2013-10-07 60 */
1ca7d67c John Stultz 2013-10-07 @61 lockdep_init_map(&s->dep_map, name, key, 0);
1ca7d67c John Stultz 2013-10-07 62 s->sequence = 0;
1ca7d67c John Stultz 2013-10-07 63 }
1ca7d67c John Stultz 2013-10-07 64
1ca7d67c John Stultz 2013-10-07 65 #ifdef CONFIG_DEBUG_LOCK_ALLOC
1ca7d67c John Stultz 2013-10-07 66 # define SEQCOUNT_DEP_MAP_INIT(lockname) \
1ca7d67c John Stultz 2013-10-07 67 .dep_map = { .name = #lockname } \
1ca7d67c John Stultz 2013-10-07 68
1ca7d67c John Stultz 2013-10-07 69 # define seqcount_init(s) \
1ca7d67c John Stultz 2013-10-07 70 do { \
1ca7d67c John Stultz 2013-10-07 71 static struct lock_class_key __key; \
1ca7d67c John Stultz 2013-10-07 72 __seqcount_init((s), #s, &__key); \
1ca7d67c John Stultz 2013-10-07 73 } while (0)
1ca7d67c John Stultz 2013-10-07 74
1ca7d67c John Stultz 2013-10-07 75 static inline void seqcount_lockdep_reader_access(const seqcount_t *s)
1ca7d67c John Stultz 2013-10-07 76 {
1ca7d67c John Stultz 2013-10-07 77 seqcount_t *l = (seqcount_t *)s;
1ca7d67c John Stultz 2013-10-07 78 unsigned long flags;
1ca7d67c John Stultz 2013-10-07 79
1ca7d67c John Stultz 2013-10-07 80 local_irq_save(flags);
1ca7d67c John Stultz 2013-10-07 81 seqcount_acquire_read(&l->dep_map, 0, 0, _RET_IP_);
1ca7d67c John Stultz 2013-10-07 @82 seqcount_release(&l->dep_map, 1, _RET_IP_);
1ca7d67c John Stultz 2013-10-07 83 local_irq_restore(flags);
1ca7d67c John Stultz 2013-10-07 84 }
1ca7d67c John Stultz 2013-10-07 85
:::::: The code at line 82 was first introduced by commit
:::::: 1ca7d67cf5d5a2aef26a8d9afd789006fa098347 seqcount: Add lockdep functionality to seqcount/seqlock structures
:::::: TO: John Stultz <john.stultz@linaro.org>
:::::: CC: Ingo Molnar <mingo@kernel.org>
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
diff --git a/arch/arm/kernel/stacktrace.c b/arch/arm/kernel/stacktrace.c index a56e7c8..d7d629b 100644 --- a/arch/arm/kernel/stacktrace.c +++ b/arch/arm/kernel/stacktrace.c @@ -4,7 +4,6 @@ #include <linux/stacktrace.h> #include <asm/sections.h> -#include <asm/stacktrace.h> #include <asm/traps.h> #if defined(CONFIG_FRAME_POINTER) && !defined(CONFIG_ARM_UNWIND) diff --git a/arch/arm64/kernel/stacktrace.c b/arch/arm64/kernel/stacktrace.c index d5718a0..33c4028 100644 --- a/arch/arm64/kernel/stacktrace.c +++ b/arch/arm64/kernel/stacktrace.c @@ -25,7 +25,6 @@ #include <asm/irq.h> #include <asm/stack_pointer.h> -#include <asm/stacktrace.h> /* * AArch64 PCS assigns the frame pointer to x29. diff --git a/arch/mips/kernel/stacktrace.c b/arch/mips/kernel/stacktrace.c index 7c7c902..0b44e10 100644 --- a/arch/mips/kernel/stacktrace.c +++ b/arch/mips/kernel/stacktrace.c @@ -8,7 +8,6 @@ #include <linux/sched/task_stack.h> #include <linux/stacktrace.h> #include <linux/export.h> -#include <asm/stacktrace.h> /* * Save stack-backtrace addresses into a stack_trace buffer: diff --git a/arch/mips/oprofile/backtrace.c b/arch/mips/oprofile/backtrace.c index 806fb79..845ff8c 100644 --- a/arch/mips/oprofile/backtrace.c +++ b/arch/mips/oprofile/backtrace.c @@ -4,7 +4,6 @@ #include <linux/mm.h> #include <linux/uaccess.h> #include <asm/ptrace.h> -#include <asm/stacktrace.h> #include <linux/stacktrace.h> #include <linux/kernel.h> #include <asm/sections.h> diff --git a/arch/sh/kernel/stacktrace.c b/arch/sh/kernel/stacktrace.c index 7a73d27..7a7ac4c 100644 --- a/arch/sh/kernel/stacktrace.c +++ b/arch/sh/kernel/stacktrace.c @@ -16,7 +16,6 @@ #include <linux/module.h> #include <asm/unwinder.h> #include <asm/ptrace.h> -#include <asm/stacktrace.h> static int save_stack_stack(void *data, char *name) { diff --git a/arch/sparc/kernel/stacktrace.c b/arch/sparc/kernel/stacktrace.c index be4c14c..42cdf86 100644 --- a/arch/sparc/kernel/stacktrace.c +++ b/arch/sparc/kernel/stacktrace.c @@ -5,7 +5,6 @@ #include <linux/ftrace.h> #include <linux/export.h> #include <asm/ptrace.h> -#include <asm/stacktrace.h> #include "kstack.h" diff --git a/arch/um/kernel/stacktrace.c b/arch/um/kernel/stacktrace.c index ebe7bcf..a0d556e 100644 --- a/arch/um/kernel/stacktrace.c +++ b/arch/um/kernel/stacktrace.c @@ -14,7 +14,6 @@ #include <linux/stacktrace.h> #include <linux/module.h> #include <linux/uaccess.h> -#include <asm/stacktrace.h> void dump_trace(struct task_struct *tsk, const struct stacktrace_ops *ops, diff --git a/arch/unicore32/kernel/process.c b/arch/unicore32/kernel/process.c index 2bc10b8..ffca651 100644 --- a/arch/unicore32/kernel/process.c +++ b/arch/unicore32/kernel/process.c @@ -36,7 +36,6 @@ #include <asm/cacheflush.h> #include <asm/processor.h> -#include <asm/stacktrace.h> #include "setup.h" diff --git a/arch/unicore32/kernel/stacktrace.c b/arch/unicore32/kernel/stacktrace.c index 9976e76..f9cd2a4 100644 --- a/arch/unicore32/kernel/stacktrace.c +++ b/arch/unicore32/kernel/stacktrace.c @@ -14,8 +14,6 @@ #include <linux/sched/debug.h> #include <linux/stacktrace.h> -#include <asm/stacktrace.h> - #if defined(CONFIG_FRAME_POINTER) /* * Unwind the current stack frame and store the new register values in the diff --git a/arch/x86/include/asm/thread_info.h b/arch/x86/include/asm/thread_info.h index a5d9521..e25d70a 100644 --- a/arch/x86/include/asm/thread_info.h +++ b/arch/x86/include/asm/thread_info.h @@ -156,59 +156,10 @@ struct thread_info { * * preempt_count needs to be 1 initially, until the scheduler is functional. */ -#ifndef __ASSEMBLY__ - -/* - * Walks up the stack frames to make sure that the specified object is - * entirely contained by a single stack frame. - * - * Returns: - * GOOD_FRAME if within a frame - * BAD_STACK if placed across a frame boundary (or outside stack) - * NOT_STACK unable to determine (no frame pointers, etc) - */ -static inline int arch_within_stack_frames(const void * const stack, - const void * const stackend, - const void *obj, unsigned long len) -{ -#if defined(CONFIG_FRAME_POINTER) - const void *frame = NULL; - const void *oldframe; - - oldframe = __builtin_frame_address(1); - if (oldframe) - frame = __builtin_frame_address(2); - /* - * low ----------------------------------------------> high - * [saved bp][saved ip][args][local vars][saved bp][saved ip] - * ^----------------^ - * allow copies only within here - */ - while (stack <= frame && frame < stackend) { - /* - * If obj + len extends past the last frame, this - * check won't pass and the next frame will be 0, - * causing us to bail out and correctly report - * the copy as invalid. - */ - if (obj + len <= frame) - return obj >= oldframe + 2 * sizeof(void *) ? - GOOD_FRAME : BAD_STACK; - oldframe = frame; - frame = *(const void * const *)frame; - } - return BAD_STACK; -#else - return NOT_STACK; -#endif -} - -#else /* !__ASSEMBLY__ */ - +#ifdef __ASSEMBLY__ #ifdef CONFIG_X86_64 # define cpu_current_top_of_stack (cpu_tss_rw + TSS_sp1) #endif - #endif #ifdef CONFIG_COMPAT diff --git a/arch/x86/kernel/Makefile b/arch/x86/kernel/Makefile index 02d6f5c..3b8afd5 100644 --- a/arch/x86/kernel/Makefile +++ b/arch/x86/kernel/Makefile @@ -70,7 +70,7 @@ obj-$(CONFIG_IA32_EMULATION) += tls.o obj-y += step.o obj-$(CONFIG_INTEL_TXT) += tboot.o obj-$(CONFIG_ISA_DMA_API) += i8237.o -obj-$(CONFIG_STACKTRACE) += stacktrace.o +obj-y += stacktrace.o obj-y += cpu/ obj-y += acpi/ obj-y += reboot.o diff --git a/arch/x86/kernel/stacktrace.c b/arch/x86/kernel/stacktrace.c index 093f2ea..f433a33 100644 --- a/arch/x86/kernel/stacktrace.c +++ b/arch/x86/kernel/stacktrace.c @@ -9,9 +9,56 @@ #include <linux/stacktrace.h> #include <linux/export.h> #include <linux/uaccess.h> -#include <asm/stacktrace.h> #include <asm/unwind.h> + +/* + * Walks up the stack frames to make sure that the specified object is + * entirely contained by a single stack frame. + * + * Returns: + * GOOD_FRAME if within a frame + * BAD_STACK if placed across a frame boundary (or outside stack) + * NOT_STACK unable to determine (no frame pointers, etc) + */ +int arch_within_stack_frames(const void * const stack, + const void * const stackend, + const void *obj, unsigned long len) +{ +#if defined(CONFIG_FRAME_POINTER) + const void *frame = NULL; + const void *oldframe; + + oldframe = __builtin_frame_address(2); + if (oldframe) + frame = __builtin_frame_address(3); + /* + * low ----------------------------------------------> high + * [saved bp][saved ip][args][local vars][saved bp][saved ip] + * ^----------------^ + * allow copies only within here + */ + while (stack <= frame && frame < stackend) { + /* + * If obj + len extends past the last frame, this + * check won't pass and the next frame will be 0, + * causing us to bail out and correctly report + * the copy as invalid. + */ + if (obj + len <= frame) + return obj >= oldframe + 2 * sizeof(void *) ? + GOOD_FRAME : BAD_STACK; + oldframe = frame; + frame = *(const void * const *)frame; + } + return BAD_STACK; +#else + return NOT_STACK; +#endif +} + +#ifdef CONFIG_STACKTRACE + static int save_stack_address(struct stack_trace *trace, unsigned long addr, bool nosched) { @@ -241,3 +288,4 @@ void save_stack_trace_user(struct stack_trace *trace) if (trace->nr_entries < trace->max_entries) trace->entries[trace->nr_entries++] = ULONG_MAX; } +#endif /* CONFIG_STACKTRACE */ diff --git a/arch/xtensa/kernel/stacktrace.c b/arch/xtensa/kernel/stacktrace.c index 0df4080..ab831d8 100644 --- a/arch/xtensa/kernel/stacktrace.c +++ b/arch/xtensa/kernel/stacktrace.c @@ -12,7 +12,6 @@ #include <linux/sched.h> #include <linux/stacktrace.h> -#include <asm/stacktrace.h> #include <asm/traps.h> #include <linux/uaccess.h> diff --git a/include/linux/page_ext.h b/include/linux/page_ext.h index ca5461e..f3b7dd9 100644 --- a/include/linux/page_ext.h +++ b/include/linux/page_ext.h @@ -3,7 +3,6 @@ #define __LINUX_PAGE_EXT_H #include <linux/types.h> -#include <linux/stacktrace.h> #include <linux/stackdepot.h> struct pglist_data; diff --git a/include/linux/stacktrace.h b/include/linux/stacktrace.h index ba29a06..4fd061e 100644 --- a/include/linux/stacktrace.h +++ b/include/linux/stacktrace.h @@ -3,10 +3,35 @@ #define __LINUX_STACKTRACE_H #include <linux/types.h> +#include <asm/stacktrace.h> struct task_struct; struct pt_regs; +/* + * For per-arch arch_within_stack_frames() implementations, defined in + * kernel/stacktrace.c. + */ +enum { + BAD_STACK = -1, + NOT_STACK = 0, + GOOD_FRAME, + GOOD_STACK, +}; + +#ifdef CONFIG_HAVE_ARCH_WITHIN_STACK_FRAMES +extern int arch_within_stack_frames(const void * const stack, + const void * const stackend, + const void *obj, unsigned long len); +#else +static inline int arch_within_stack_frames(const void * const stack, + const void * const stackend, + const void *obj, unsigned long len) +{ + return NOT_STACK; +} +#endif + #ifdef CONFIG_STACKTRACE struct stack_trace { unsigned int nr_entries, max_entries; diff --git a/include/linux/thread_info.h b/include/linux/thread_info.h index 34f053a..5403851 100644 --- a/include/linux/thread_info.h +++ b/include/linux/thread_info.h @@ -23,18 +23,6 @@ #endif #include <linux/bitops.h> - -/* - * For per-arch arch_within_stack_frames() implementations, defined in - * asm/thread_info.h. - */ -enum { - BAD_STACK = -1, - NOT_STACK = 0, - GOOD_FRAME, - GOOD_STACK, -}; - #include <asm/thread_info.h> #ifdef __KERNEL__ @@ -92,15 +80,6 @@ static inline int test_ti_thread_flag(struct thread_info *ti, int flag) #define tif_need_resched() test_thread_flag(TIF_NEED_RESCHED) -#ifndef CONFIG_HAVE_ARCH_WITHIN_STACK_FRAMES -static inline int arch_within_stack_frames(const void * const stack, - const void * const stackend, - const void *obj, unsigned long len) -{ - return 0; -} -#endif - #ifdef CONFIG_HARDENED_USERCOPY extern void __check_object_size(const void *ptr, unsigned long n, bool to_user); diff --git a/kernel/sysctl.c b/kernel/sysctl.c index bdf7090..782c3e4 100644 --- a/kernel/sysctl.c +++ b/kernel/sysctl.c @@ -73,7 +73,6 @@ #ifdef CONFIG_X86 #include <asm/nmi.h> -#include <asm/stacktrace.h> #include <asm/io.h> #endif #ifdef CONFIG_SPARC diff --git a/mm/usercopy.c b/mm/usercopy.c index e9e9325..6a74776 100644 --- a/mm/usercopy.c +++ b/mm/usercopy.c @@ -19,7 +19,7 @@ #include <linux/sched.h> #include <linux/sched/task.h> #include <linux/sched/task_stack.h> -#include <linux/thread_info.h> +#include <linux/stacktrace.h> #include <asm/sections.h> /*