Skip to content

Commit

Permalink
net/temac: FIX segfault when process old irqs
Browse files Browse the repository at this point in the history
Do not enable the irq until the scatter gather registers are ready to
handle the data. Otherwise an irq from a packet send/received before
last close can lead to an access to an invalid memory region on the irq
handler.

Also, stop the dma engine on close.

Signed-off-by: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Ricardo Ribalda authored and David S. Miller committed Nov 9, 2011
1 parent 2bc8ca4 commit 50ec153
Showing 1 changed file with 5 additions and 1 deletion.
6 changes: 5 additions & 1 deletion drivers/net/ethernet/xilinx/ll_temac_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -203,6 +203,9 @@ static void temac_dma_bd_release(struct net_device *ndev)
struct temac_local *lp = netdev_priv(ndev);
int i;

/* Reset Local Link (DMA) */
lp->dma_out(lp, DMA_CONTROL_REG, DMA_CONTROL_RST);

for (i = 0; i < RX_BD_NUM; i++) {
if (!lp->rx_skb[i])
break;
Expand Down Expand Up @@ -860,14 +863,15 @@ static int temac_open(struct net_device *ndev)
phy_start(lp->phy_dev);
}

temac_device_reset(ndev);

rc = request_irq(lp->tx_irq, ll_temac_tx_irq, 0, ndev->name, ndev);
if (rc)
goto err_tx_irq;
rc = request_irq(lp->rx_irq, ll_temac_rx_irq, 0, ndev->name, ndev);
if (rc)
goto err_rx_irq;

temac_device_reset(ndev);
return 0;

err_rx_irq:
Expand Down

0 comments on commit 50ec153

Please sign in to comment.