From: wolf Date: Fri, 13 Feb 2009 16:40:34 +0000 (+0000) Subject: mcp251x CAN driver: fixes race condition on module unload and can device up X-Git-Url: http://rtime.felk.cvut.cz/gitweb/socketcan-devel.git/commitdiff_plain/9492729717790ea4d4c8dbdeba0ca16e0deb3764 mcp251x CAN driver: fixes race condition on module unload and can device up Signed-off-by: Christian Pellegrin git-svn-id: svn://svn.berlios.de//socketcan/trunk@934 030b6a49-0b11-0410-94ab-b0dab22257f2 --- diff --git a/kernel/2.6/drivers/net/can/mcp251x.c b/kernel/2.6/drivers/net/can/mcp251x.c index 24778c9..b765759 100644 --- a/kernel/2.6/drivers/net/can/mcp251x.c +++ b/kernel/2.6/drivers/net/can/mcp251x.c @@ -1136,6 +1136,9 @@ static int __devexit mcp251x_can_remove(struct spi_device *spi) struct mcp251x_priv *priv = dev_get_drvdata(&spi->dev); struct net_device *net = priv->net; + unregister_candev(net); + free_candev(net); + free_irq(spi->irq, net); priv->force_quit = 1; flush_workqueue(priv->wq); @@ -1149,9 +1152,6 @@ static int __devexit mcp251x_can_remove(struct spi_device *spi) kfree(priv->spi_rx_buf); } - unregister_candev(net); - free_candev(net); - if (pdata->power_enable) pdata->power_enable(0);