diff options
Diffstat (limited to 'drivers/net/can/sja1000/peak_pci.c')
| -rw-r--r-- | drivers/net/can/sja1000/peak_pci.c | 17 | 
1 files changed, 10 insertions, 7 deletions
diff --git a/drivers/net/can/sja1000/peak_pci.c b/drivers/net/can/sja1000/peak_pci.c index 6b6f0ad7509..564933ae218 100644 --- a/drivers/net/can/sja1000/peak_pci.c +++ b/drivers/net/can/sja1000/peak_pci.c @@ -551,7 +551,7 @@ static int peak_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)  {  	struct sja1000_priv *priv;  	struct peak_pci_chan *chan; -	struct net_device *dev; +	struct net_device *dev, *prev_dev;  	void __iomem *cfg_base, *reg_base;  	u16 sub_sys_id, icr;  	int i, err, channels; @@ -642,6 +642,7 @@ static int peak_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)  		icr |= chan->icr_mask;  		SET_NETDEV_DEV(dev, &pdev->dev); +		dev->dev_id = i;  		/* Create chain of SJA1000 devices */  		chan->prev_dev = pci_get_drvdata(pdev); @@ -687,11 +688,13 @@ failure_remove_channels:  	writew(0x0, cfg_base + PITA_ICR + 2);  	chan = NULL; -	for (dev = pci_get_drvdata(pdev); dev; dev = chan->prev_dev) { -		unregister_sja1000dev(dev); -		free_sja1000dev(dev); +	for (dev = pci_get_drvdata(pdev); dev; dev = prev_dev) {  		priv = netdev_priv(dev);  		chan = priv->priv; +		prev_dev = chan->prev_dev; + +		unregister_sja1000dev(dev); +		free_sja1000dev(dev);  	}  	/* free any PCIeC resources too */ @@ -725,10 +728,12 @@ static void peak_pci_remove(struct pci_dev *pdev)  	/* Loop over all registered devices */  	while (1) { +		struct net_device *prev_dev = chan->prev_dev; +  		dev_info(&pdev->dev, "removing device %s\n", dev->name);  		unregister_sja1000dev(dev);  		free_sja1000dev(dev); -		dev = chan->prev_dev; +		dev = prev_dev;  		if (!dev) {  			/* do that only for first channel */ @@ -744,8 +749,6 @@ static void peak_pci_remove(struct pci_dev *pdev)  	pci_iounmap(pdev, cfg_base);  	pci_release_regions(pdev);  	pci_disable_device(pdev); - -	pci_set_drvdata(pdev, NULL);  }  static struct pci_driver peak_pci_driver = {  | 
