Message ID | 3190648.uJuPIZ6zlh@al |
---|---|
State | Accepted, archived |
Delegated to: | David Miller |
Headers | show |
From: Peter Wu <lekensteyn@gmail.com> Date: Mon, 22 Jul 2013 09:53:30 +0200 > The work queue is initialised in rtl_open (when the interface goes up), > but canceled in rtl_remove_one (when the PCI device gets removed). If > the network interface is not brought up, then the work queue struct is > not initialised. When the device is removed, the attempt to cancel the > uninitialised work queue causes a lockdep warning. > > This patch fixes the issue by moving cancel_work_sync to rtl_close (to > match rtl_open). (Note that rtl_close is also called via > unregister_netdev in rtl_remove_one.) > > Signed-off-by: Peter Wu <lekensteyn@gmail.com> > Acked-by: Francois Romieu <romieu@fr.zoreil.com> Applied, thanks. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c index 4106a74..880015c 100644 --- a/drivers/net/ethernet/realtek/r8169.c +++ b/drivers/net/ethernet/realtek/r8169.c @@ -6468,6 +6468,8 @@ static int rtl8169_close(struct net_device *dev) rtl8169_down(dev); rtl_unlock_work(tp); + cancel_work_sync(&tp->wk.work); + free_irq(pdev->irq, dev); dma_free_coherent(&pdev->dev, R8169_RX_RING_BYTES, tp->RxDescArray, @@ -6793,8 +6795,6 @@ static void rtl_remove_one(struct pci_dev *pdev) rtl8168_driver_stop(tp); } - cancel_work_sync(&tp->wk.work); - netif_napi_del(&tp->napi); unregister_netdev(dev);