Here you go:
static void bcm43xx_periodic_work_handler(void *d)
{
struct bcm43xx_private *bcm = d;
unsigned long flags;
u32 savedirqs = 0;
int badness;
badness = estimate_periodic_work_badness(bcm->periodic_state);
mutex_lock(&bcm->mutex);
netif_tx_disable(bcm->net_dev);
spin_lock_irqsave(&bcm->irq_lock, flags);
if (badness > BADNESS_LIMIT) {
/* Periodic work will take a long time, so we want it to
* be preemtible.
*/
bcm43xx_mac_suspend(bcm);
if (bcm43xx_using_pio(bcm))
bcm43xx_pio_freeze_txqueues(bcm);
savedirqs = bcm43xx_interrupt_disable(bcm, BCM43xx_IRQ_ALL);
spin_unlock_irqrestore(&bcm->irq_lock, flags);
bcm43xx_synchronize_irq(bcm);
}
do_periodic_work(bcm);
if (badness > BADNESS_LIMIT) {
spin_lock_irqsave(&bcm->irq_lock, flags);
tasklet_enable(&bcm->isr_tasklet);
bcm43xx_interrupt_enable(bcm, savedirqs);
if (bcm43xx_using_pio(bcm))
bcm43xx_pio_thaw_txqueues(bcm);
bcm43xx_mac_enable(bcm);
}
mmiowb();
spin_unlock_irqrestore(&bcm->irq_lock, flags);
netif_wake_queue(bcm->net_dev);
mutex_unlock(&bcm->mutex);
}
Larry Finger wrote:
> Gregory Gulik wrote:
>> Looks that way. Log attached.
>
> One final check, please send me the contents of routine
> bcm43xx_periodic_work_handler in
> drivers/net/wireless/bcm43xx/bcm43xx_main.c.
>
> Larry
--
Greg Gulik http://www.gulik.org/greg/
greg at gulik dot org
_______________________________________________
Bcm43xx-dev mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/bcm43xx-dev