--- zzzz-none-000/linux-4.4.271/include/linux/spinlock.h 2021-06-03 06:22:09.000000000 +0000 +++ hawkeye-5590-750/linux-4.4.271/include/linux/spinlock.h 2023-04-19 10:22:30.000000000 +0000 @@ -56,6 +56,12 @@ #include #include #include +#if defined(CONFIG_AVM_FASTIRQ_DEBUG) +#include +#define AVM_CHECK_LINUX_CONTEXT() do { if (is_cpu_mode_fiq()) { printk_linux(KERN_ERR"ERROR: fiq-context 0x%08lx 0x%08lx\n", _THIS_IP_, _RET_IP_);} } while(0) +#else/*--- #if defined(CONFIG_AVM_FASTIRQ_DEBUG) ---*/ +#define AVM_CHECK_LINUX_CONTEXT() +#endif/*--- #if defined(CONFIG_AVM_FASTIRQ_DEBUG) ---*/ /* @@ -179,9 +185,15 @@ #ifdef CONFIG_DEBUG_LOCK_ALLOC # define raw_spin_lock_nested(lock, subclass) \ - _raw_spin_lock_nested(lock, subclass) + do { \ + AVM_CHECK_LINUX_CONTEXT(); \ + _raw_spin_lock_nested(lock, subclass); \ + } while (0) # define raw_spin_lock_bh_nested(lock, subclass) \ - _raw_spin_lock_bh_nested(lock, subclass) + do { \ + AVM_CHECK_LINUX_CONTEXT(); \ + _raw_spin_lock_bh_nested(lock, subclass); \ + } while (0) # define raw_spin_lock_nest_lock(lock, nest_lock) \ do { \ @@ -204,6 +216,7 @@ #define raw_spin_lock_irqsave(lock, flags) \ do { \ + AVM_CHECK_LINUX_CONTEXT(); \ typecheck(unsigned long, flags); \ flags = _raw_spin_lock_irqsave(lock); \ } while (0) @@ -211,12 +224,14 @@ #ifdef CONFIG_DEBUG_LOCK_ALLOC #define raw_spin_lock_irqsave_nested(lock, flags, subclass) \ do { \ + AVM_CHECK_LINUX_CONTEXT(); \ typecheck(unsigned long, flags); \ flags = _raw_spin_lock_irqsave_nested(lock, subclass); \ } while (0) #else #define raw_spin_lock_irqsave_nested(lock, flags, subclass) \ do { \ + AVM_CHECK_LINUX_CONTEXT(); \ typecheck(unsigned long, flags); \ flags = _raw_spin_lock_irqsave(lock); \ } while (0) @@ -252,6 +267,7 @@ #define raw_spin_trylock_irq(lock) \ ({ \ + AVM_CHECK_LINUX_CONTEXT(); \ local_irq_disable(); \ raw_spin_trylock(lock) ? \ 1 : ({ local_irq_enable(); 0; }); \ @@ -259,6 +275,7 @@ #define raw_spin_trylock_irqsave(lock, flags) \ ({ \ + AVM_CHECK_LINUX_CONTEXT(); \ local_irq_save(flags); \ raw_spin_trylock(lock) ? \ 1 : ({ local_irq_restore(flags); 0; }); \ @@ -299,21 +316,25 @@ static __always_inline void spin_lock(spinlock_t *lock) { + AVM_CHECK_LINUX_CONTEXT(); raw_spin_lock(&lock->rlock); } static __always_inline void spin_lock_bh(spinlock_t *lock) { + AVM_CHECK_LINUX_CONTEXT(); raw_spin_lock_bh(&lock->rlock); } static __always_inline int spin_trylock(spinlock_t *lock) { + AVM_CHECK_LINUX_CONTEXT(); return raw_spin_trylock(&lock->rlock); } #define spin_lock_nested(lock, subclass) \ do { \ + AVM_CHECK_LINUX_CONTEXT(); \ raw_spin_lock_nested(spinlock_check(lock), subclass); \ } while (0) @@ -324,21 +345,25 @@ #define spin_lock_nest_lock(lock, nest_lock) \ do { \ + AVM_CHECK_LINUX_CONTEXT(); \ raw_spin_lock_nest_lock(spinlock_check(lock), nest_lock); \ } while (0) static __always_inline void spin_lock_irq(spinlock_t *lock) { + AVM_CHECK_LINUX_CONTEXT(); raw_spin_lock_irq(&lock->rlock); } #define spin_lock_irqsave(lock, flags) \ do { \ + AVM_CHECK_LINUX_CONTEXT(); \ raw_spin_lock_irqsave(spinlock_check(lock), flags); \ } while (0) #define spin_lock_irqsave_nested(lock, flags, subclass) \ do { \ + AVM_CHECK_LINUX_CONTEXT(); \ raw_spin_lock_irqsave_nested(spinlock_check(lock), flags, subclass); \ } while (0) @@ -364,16 +389,19 @@ static __always_inline int spin_trylock_bh(spinlock_t *lock) { + AVM_CHECK_LINUX_CONTEXT(); return raw_spin_trylock_bh(&lock->rlock); } static __always_inline int spin_trylock_irq(spinlock_t *lock) { + AVM_CHECK_LINUX_CONTEXT(); return raw_spin_trylock_irq(&lock->rlock); } #define spin_trylock_irqsave(lock, flags) \ ({ \ + AVM_CHECK_LINUX_CONTEXT(); \ raw_spin_trylock_irqsave(spinlock_check(lock), flags); \ })