From: Andrew Morton Someone redid the locking primitives. Badly. What's all this obfuscation? #define bcm43xx_lock_noirq(bcm) mutex_lock(&(bcm)->mutex) #define bcm43xx_unlock_noirq(bcm) mutex_unlock(&(bcm)->mutex) #define bcm43xx_lock_irqonly(bcm, flags) \ spin_lock_irqsave(&(bcm)->irq_lock, flags) Please, lose the macros and just open-code the locking. And I must say that patch's changelog is ultralame. Cc: Michael Buesch Cc: Jeff Garzik Signed-off-by: Andrew Morton --- drivers/net/wireless/bcm43xx/bcm43xx_main.c | 4 ++-- net/wireless/bcm43xx/Kconfig | 0 2 files changed, 2 insertions(+), 2 deletions(-) diff -puN drivers/net/wireless/bcm43xx/bcm43xx.h~add-bcm43xx-hw-rng-support-locking-update drivers/net/wireless/bcm43xx/bcm43xx.h diff -puN drivers/net/wireless/bcm43xx/bcm43xx_main.c~add-bcm43xx-hw-rng-support-locking-update drivers/net/wireless/bcm43xx/bcm43xx_main.c --- a/drivers/net/wireless/bcm43xx/bcm43xx_main.c~add-bcm43xx-hw-rng-support-locking-update +++ a/drivers/net/wireless/bcm43xx/bcm43xx_main.c @@ -3242,9 +3242,9 @@ static int bcm43xx_rng_read(struct hwrng struct bcm43xx_private *bcm = (struct bcm43xx_private *)rng->priv; unsigned long flags; - bcm43xx_lock(bcm, flags); + bcm43xx_lock_irqonly(bcm, flags); *data = bcm43xx_read16(bcm, BCM43xx_MMIO_RNG); - bcm43xx_unlock(bcm, flags); + bcm43xx_unlock_irqonly(bcm, flags); return (sizeof(u16)); } diff -puN drivers/net/wireless/bcm43xx/Kconfig~add-bcm43xx-hw-rng-support-locking-update drivers/net/wireless/bcm43xx/Kconfig _