[Madwifi-cvs] revision 3995 committed
Status: Beta
Brought to you by:
otaku
From: Pavel R. <svn...@ma...> - 2009-04-12 05:53:30
|
Project : madwifi Revision : 3995 Author : proski (Pavel Roskin) Date : 2009-04-12 07:53:23 +0200 (Sun, 12 Apr 2009) Log Message : Avoid triggering lockdep checker in ath_hw_reset() Use spin_lock_irqsave_nested() instead of spin_lock_irqsave(). Use a separate counter for the locking subclass, so that we don't exceed the maximal value of 8. We have 10 queues, but inactive queues don't get a locking subclass number. Provide a replacement for spin_lock_irqsave_nested() for kernels older than 2.6.19. Affected Files: * madwifi/trunk/ath/if_ath.c updated * madwifi/trunk/include/compat.h updated Modified: madwifi/trunk/ath/if_ath.c =================================================================== --- madwifi/trunk/ath/if_ath.c 2009-04-09 15:57:59 UTC (rev 3994) +++ madwifi/trunk/ath/if_ath.c 2009-04-12 05:53:23 UTC (rev 3995) @@ -1633,7 +1633,7 @@ HAL_BOOL ret; unsigned long __axq_lockflags[HAL_NUM_TX_QUEUES]; struct ath_txq * txq; - int i; + int i, lclass = 0; u_int8_t old_privFlags = sc->sc_curchan.privFlags; /* ath_hal_reset() resets all TXDP pointers, so we need to @@ -1643,7 +1643,8 @@ for (i = 0; i < HAL_NUM_TX_QUEUES; i++) { if (ATH_TXQ_SETUP(sc, i)) { txq = &sc->sc_txq[i]; - spin_lock_irqsave(&txq->axq_lock, __axq_lockflags[i]); + spin_lock_irqsave_nested(&txq->axq_lock, + __axq_lockflags[i], lclass++); } } Modified: madwifi/trunk/include/compat.h =================================================================== --- madwifi/trunk/include/compat.h 2009-04-09 15:57:59 UTC (rev 3994) +++ madwifi/trunk/include/compat.h 2009-04-12 05:53:23 UTC (rev 3995) @@ -210,6 +210,13 @@ #define request_module(_fmt, _modname) request_module(_modname) #endif +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19) +#ifndef spin_lock_irqsave_nested +#define spin_lock_irqsave_nested(_lock, _flags, _subclass) \ + spin_lock_irqsave(_lock, _flags) +#endif +#endif + #endif /* __KERNEL__ */ #endif /* _ATH_COMPAT_H_ */ |