--- zzzz-none-000/linux-4.19.183/include/linux/spinlock.h 2021-03-24 10:07:39.000000000 +0000 +++ bcm63-7530ax-756/linux-4.19.183/include/linux/spinlock.h 2023-06-28 08:54:20.000000000 +0000 @@ -57,6 +57,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) ---*/ /* @@ -215,7 +221,10 @@ #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_nest_lock(lock, nest_lock) \ do { \ @@ -237,6 +246,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) @@ -244,12 +254,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) @@ -259,6 +271,7 @@ #define raw_spin_lock_irqsave(lock, flags) \ do { \ + AVM_CHECK_LINUX_CONTEXT(); \ typecheck(unsigned long, flags); \ _raw_spin_lock_irqsave(lock, flags); \ } while (0) @@ -285,6 +298,7 @@ #define raw_spin_trylock_irq(lock) \ ({ \ + AVM_CHECK_LINUX_CONTEXT(); \ local_irq_disable(); \ raw_spin_trylock(lock) ? \ 1 : ({ local_irq_enable(); 0; }); \ @@ -292,6 +306,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; }); \ @@ -326,41 +341,49 @@ 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) #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) @@ -386,16 +409,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); \ })