--- zzzz-none-000/linux-3.10.107/include/linux/spinlock.h 2017-06-27 09:49:32.000000000 +0000 +++ vr9-7490-729/linux-3.10.107/include/linux/spinlock.h 2021-11-10 11:53:56.000000000 +0000 @@ -149,7 +149,7 @@ } static inline void -do_raw_spin_lock_flags(raw_spinlock_t *lock, unsigned long *flags) __acquires(lock) +do_raw_spin_lock_flags(raw_spinlock_t *lock, unsigned long *flags __attribute__((unused))) __acquires(lock) { __acquire(lock); arch_spin_lock_flags(&lock->raw_lock, *flags); @@ -273,6 +273,16 @@ # include #endif +#if defined(CONFIG_AVM_IPI_YIELD_DEBUG) +#include +#define CHECK_YIELD_CONTEXT(lock) BUG_ON_YIELDTHREAD_NOT_ALLOWED() + /*--- do { \ ---*/ + /*--- if(is_yield_context()) printk(KERN_ERR"error pc=0x%p (ra=0x%p) not allowed from yield lock=%p\n", (void *)_THIS_IP_, (void *)_RET_IP_, lock); ---*/ + /*--- } while(0) ---*/ +#else/*--- #if defined(CONFIG_AVM_IPI_YIELD_DEBUG) ---*/ +#define CHECK_YIELD_CONTEXT(lock) +#endif/*--- #else ---*//*--- #if defined(CONFIG_AVM_IPI_YIELD_DEBUG) ---*/ + /* * Map the spin_lock functions to the raw variants for PREEMPT_RT=n */ @@ -290,11 +300,13 @@ static inline void spin_lock(spinlock_t *lock) { + CHECK_YIELD_CONTEXT(lock); raw_spin_lock(&lock->rlock); } static inline void spin_lock_bh(spinlock_t *lock) { + CHECK_YIELD_CONTEXT(lock); raw_spin_lock_bh(&lock->rlock); } @@ -315,16 +327,19 @@ static inline void spin_lock_irq(spinlock_t *lock) { + CHECK_YIELD_CONTEXT(lock); raw_spin_lock_irq(&lock->rlock); } #define spin_lock_irqsave(lock, flags) \ do { \ + CHECK_YIELD_CONTEXT(lock); \ raw_spin_lock_irqsave(spinlock_check(lock), flags); \ } while (0) #define spin_lock_irqsave_nested(lock, flags, subclass) \ do { \ + CHECK_YIELD_CONTEXT(lock); \ raw_spin_lock_irqsave_nested(spinlock_check(lock), flags, subclass); \ } while (0)