Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c014f6c8 authored by Francois Romieu's avatar Francois Romieu Committed by Jeff Garzik
Browse files

sis190: RTNL and flush_scheduled_work deadlock

parent eb2a021c
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -909,6 +909,9 @@ static void sis190_phy_task(struct work_struct *work)

	rtnl_lock();

	if (!netif_running(dev))
		goto out_unlock;

	val = mdio_read(ioaddr, phy_id, MII_BMCR);
	if (val & BMCR_RESET) {
		// FIXME: needlessly high ?  -- FR 02/07/2005
@@ -981,6 +984,7 @@ static void sis190_phy_task(struct work_struct *work)
		netif_carrier_on(dev);
	}

out_unlock:
	rtnl_unlock();
}

@@ -1102,8 +1106,6 @@ static void sis190_down(struct net_device *dev)

	netif_stop_queue(dev);

	flush_scheduled_work();

	do {
		spin_lock_irq(&tp->lock);

@@ -1857,6 +1859,7 @@ static void __devexit sis190_remove_one(struct pci_dev *pdev)
	struct net_device *dev = pci_get_drvdata(pdev);

	sis190_mii_remove(dev);
	flush_scheduled_work();
	unregister_netdev(dev);
	sis190_release_board(pdev);
	pci_set_drvdata(pdev, NULL);