Index: sys/compat/linuxkpi/common/include/linux/spinlock.h =================================================================== --- sys/compat/linuxkpi/common/include/linux/spinlock.h +++ sys/compat/linuxkpi/common/include/linux/spinlock.h @@ -37,6 +37,7 @@ #include #include #include +#include #include #include @@ -117,9 +118,12 @@ local_bh_disable(); \ } while (0) -#define spin_lock_irqsave(_l, flags) do { \ - (flags) = 0; \ - spin_lock(_l); \ +#define spin_lock_irqsave(_l, flags) do { \ + (flags) = 0; \ + if (unlikely(curthread->td_critnest != 0)) \ + while (!spin_trylock(_l)) {} \ + else \ + spin_lock(_l); \ } while (0) #define spin_lock_irqsave_nested(_l, flags, _n) do { \