···31633163static void bcm43xx_periodic_work_handler(void *d)31643164{31653165 struct bcm43xx_private *bcm = d;31663166+ struct net_device *net_dev = bcm->net_dev;31663167 unsigned long flags;31673168 u32 savedirqs = 0;31683169 int badness;31703170+ unsigned long orig_trans_start = 0;3169317131703172 mutex_lock(&bcm->mutex);31713173 badness = estimate_periodic_work_badness(bcm->periodic_state);···31753173 /* Periodic work will take a long time, so we want it to31763174 * be preemtible.31773175 */31783178- netif_tx_disable(bcm->net_dev);31763176+31773177+ netif_tx_lock_bh(net_dev);31783178+ /* We must fake a started transmission here, as we are going to31793179+ * disable TX. If we wouldn't fake a TX, it would be possible to31803180+ * trigger the netdev watchdog, if the last real TX is already31813181+ * some time on the past (slightly less than 5secs)31823182+ */31833183+ orig_trans_start = net_dev->trans_start;31843184+ net_dev->trans_start = jiffies;31853185+ netif_stop_queue(net_dev);31863186+ netif_tx_unlock_bh(net_dev);31873187+31793188 spin_lock_irqsave(&bcm->irq_lock, flags);31803189 bcm43xx_mac_suspend(bcm);31813190 if (bcm43xx_using_pio(bcm))···32113198 bcm43xx_pio_thaw_txqueues(bcm);32123199 bcm43xx_mac_enable(bcm);32133200 netif_wake_queue(bcm->net_dev);32013201+ net_dev->trans_start = orig_trans_start;32143202 }32153203 mmiowb();32163204 spin_unlock_irqrestore(&bcm->irq_lock, flags);