diff options
Diffstat (limited to 'drivers/net/ethernet/xilinx/xilinx_axienet_main.c')
| -rw-r--r-- | drivers/net/ethernet/xilinx/xilinx_axienet_main.c | 14 | 
1 files changed, 7 insertions, 7 deletions
diff --git a/drivers/net/ethernet/xilinx/xilinx_axienet_main.c b/drivers/net/ethernet/xilinx/xilinx_axienet_main.c index 0793299bd39..77e6db9dcfe 100644 --- a/drivers/net/ethernet/xilinx/xilinx_axienet_main.c +++ b/drivers/net/ethernet/xilinx/xilinx_axienet_main.c @@ -942,6 +942,10 @@ static int axienet_open(struct net_device *ndev)  		phy_start(lp->phy_dev);  	} +	/* Enable tasklets for Axi DMA error handling */ +	tasklet_init(&lp->dma_err_tasklet, axienet_dma_err_handler, +		     (unsigned long) lp); +  	/* Enable interrupts for Axi DMA Tx */  	ret = request_irq(lp->tx_irq, axienet_tx_irq, 0, ndev->name, ndev);  	if (ret) @@ -950,8 +954,7 @@ static int axienet_open(struct net_device *ndev)  	ret = request_irq(lp->rx_irq, axienet_rx_irq, 0, ndev->name, ndev);  	if (ret)  		goto err_rx_irq; -	/* Enable tasklets for Axi DMA error handling */ -	tasklet_enable(&lp->dma_err_tasklet); +  	return 0;  err_rx_irq: @@ -960,6 +963,7 @@ err_tx_irq:  	if (lp->phy_dev)  		phy_disconnect(lp->phy_dev);  	lp->phy_dev = NULL; +	tasklet_kill(&lp->dma_err_tasklet);  	dev_err(lp->dev, "request_irq() failed\n");  	return ret;  } @@ -990,7 +994,7 @@ static int axienet_stop(struct net_device *ndev)  	axienet_setoptions(ndev, lp->options &  			   ~(XAE_OPTION_TXEN | XAE_OPTION_RXEN)); -	tasklet_disable(&lp->dma_err_tasklet); +	tasklet_kill(&lp->dma_err_tasklet);  	free_irq(lp->tx_irq, ndev);  	free_irq(lp->rx_irq, ndev); @@ -1613,10 +1617,6 @@ static int __devinit axienet_of_probe(struct platform_device *op)  		goto err_iounmap_2;  	} -	tasklet_init(&lp->dma_err_tasklet, axienet_dma_err_handler, -		     (unsigned long) lp); -	tasklet_disable(&lp->dma_err_tasklet); -  	return 0;  err_iounmap_2:  |