From: Andrew Morton git-block.patch somehow triggers this: I don't see why and I don't have time/inclination to unpick the mess. Just uninline them. Cc: Martin Schwidefsky Cc: Heiko Carstens Cc: Jens Axboe Signed-off-by: Andrew Morton --- arch/s390/kernel/Makefile | 2 - arch/s390/kernel/spinlock.c | 37 ++++++++++++++++++++++++++++++++++ include/asm-s390/spinlock.h | 33 ++---------------------------- 3 files changed, 41 insertions(+), 31 deletions(-) diff -puN arch/s390/kernel/Makefile~s390-uninline-spinlock-functions-which-use-smp_processor_id arch/s390/kernel/Makefile --- a/arch/s390/kernel/Makefile~s390-uninline-spinlock-functions-which-use-smp_processor_id +++ a/arch/s390/kernel/Makefile @@ -22,7 +22,7 @@ obj-y += $(if $(CONFIG_64BIT),reipl64.o, extra-y += head.o init_task.o vmlinux.lds obj-$(CONFIG_MODULES) += s390_ksyms.o module.o -obj-$(CONFIG_SMP) += smp.o topology.o +obj-$(CONFIG_SMP) += smp.o topology.o spinlock.o obj-$(CONFIG_AUDIT) += audit.o compat-obj-$(CONFIG_AUDIT) += compat_audit.o diff -puN /dev/null arch/s390/kernel/spinlock.c --- /dev/null +++ a/arch/s390/kernel/spinlock.c @@ -0,0 +1,37 @@ + +#include +#include + +void __raw_spin_lock(raw_spinlock_t *lp) +{ + int old; + + old = _raw_compare_and_swap(&lp->owner_cpu, 0, ~smp_processor_id()); + if (likely(old == 0)) + return; + _raw_spin_lock_wait(lp); +} +EXPORT_SYMBOL(__raw_spin_lock); + +void __raw_spin_lock_flags(raw_spinlock_t *lp, unsigned long flags) +{ + int old; + + old = _raw_compare_and_swap(&lp->owner_cpu, 0, ~smp_processor_id()); + if (likely(old == 0)) + return; + _raw_spin_lock_wait_flags(lp, flags); +} +EXPORT_SYMBOL(__raw_spin_lock_flags); + +int __raw_spin_trylock(raw_spinlock_t *lp) +{ + int old; + + old = _raw_compare_and_swap(&lp->owner_cpu, 0, ~smp_processor_id()); + if (likely(old == 0)) + return 1; + return _raw_spin_trylock_retry(lp); +} +EXPORT_SYMBOL(__raw_spin_trylock); + diff -puN include/asm-s390/spinlock.h~s390-uninline-spinlock-functions-which-use-smp_processor_id include/asm-s390/spinlock.h --- a/include/asm-s390/spinlock.h~s390-uninline-spinlock-functions-which-use-smp_processor_id +++ a/include/asm-s390/spinlock.h @@ -62,36 +62,9 @@ extern void _raw_spin_lock_wait_flags(ra extern int _raw_spin_trylock_retry(raw_spinlock_t *); extern void _raw_spin_relax(raw_spinlock_t *lock); -static inline void __raw_spin_lock(raw_spinlock_t *lp) -{ - int old; - - old = _raw_compare_and_swap(&lp->owner_cpu, 0, ~smp_processor_id()); - if (likely(old == 0)) - return; - _raw_spin_lock_wait(lp); -} - -static inline void __raw_spin_lock_flags(raw_spinlock_t *lp, - unsigned long flags) -{ - int old; - - old = _raw_compare_and_swap(&lp->owner_cpu, 0, ~smp_processor_id()); - if (likely(old == 0)) - return; - _raw_spin_lock_wait_flags(lp, flags); -} - -static inline int __raw_spin_trylock(raw_spinlock_t *lp) -{ - int old; - - old = _raw_compare_and_swap(&lp->owner_cpu, 0, ~smp_processor_id()); - if (likely(old == 0)) - return 1; - return _raw_spin_trylock_retry(lp); -} +void __raw_spin_lock(raw_spinlock_t *lp); +void __raw_spin_lock_flags(raw_spinlock_t *lp, unsigned long flags); +int __raw_spin_trylock(raw_spinlock_t *lp); static inline void __raw_spin_unlock(raw_spinlock_t *lp) { _