aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet
diff options
context:
space:
mode:
authorYoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>2012-05-28 19:07:55 -0400
committerDavid S. Miller <davem@davemloft.net>2012-05-29 17:30:08 -0400
commit79fba9f51755c704c0a7d7b7f0df10874dc0a744 (patch)
tree3656226aa2fffe2a81068c77ec07dc1bbb585880 /drivers/net/ethernet
parent9dae31009b1a00d926c6fe032d5a88099620adc3 (diff)
net: sh_eth: fix the rxdesc pointer when rx descriptor empty happens
When Receive Descriptor Empty happens, rxdesc pointer of the driver and actual next descriptor of the controller may be mismatch. This patch fixes it. Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet')
-rw-r--r--drivers/net/ethernet/renesas/sh_eth.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/drivers/net/ethernet/renesas/sh_eth.c b/drivers/net/ethernet/renesas/sh_eth.c
index be3c22179161..667169b82526 100644
--- a/drivers/net/ethernet/renesas/sh_eth.c
+++ b/drivers/net/ethernet/renesas/sh_eth.c
@@ -1101,8 +1101,12 @@ static int sh_eth_rx(struct net_device *ndev)
1101 1101
1102 /* Restart Rx engine if stopped. */ 1102 /* Restart Rx engine if stopped. */
1103 /* If we don't need to check status, don't. -KDU */ 1103 /* If we don't need to check status, don't. -KDU */
1104 if (!(sh_eth_read(ndev, EDRRR) & EDRRR_R)) 1104 if (!(sh_eth_read(ndev, EDRRR) & EDRRR_R)) {
1105 /* fix the values for the next receiving */
1106 mdp->cur_rx = mdp->dirty_rx = (sh_eth_read(ndev, RDFAR) -
1107 sh_eth_read(ndev, RDLAR)) >> 4;
1105 sh_eth_write(ndev, EDRRR_R, EDRRR); 1108 sh_eth_write(ndev, EDRRR_R, EDRRR);
1109 }
1106 1110
1107 return 0; 1111 return 0;
1108} 1112}
@@ -1199,8 +1203,6 @@ static void sh_eth_error(struct net_device *ndev, int intr_status)
1199 /* Receive Descriptor Empty int */ 1203 /* Receive Descriptor Empty int */
1200 ndev->stats.rx_over_errors++; 1204 ndev->stats.rx_over_errors++;
1201 1205
1202 if (sh_eth_read(ndev, EDRRR) ^ EDRRR_R)
1203 sh_eth_write(ndev, EDRRR_R, EDRRR);
1204 if (netif_msg_rx_err(mdp)) 1206 if (netif_msg_rx_err(mdp))
1205 dev_err(&ndev->dev, "Receive Descriptor Empty\n"); 1207 dev_err(&ndev->dev, "Receive Descriptor Empty\n");
1206 } 1208 }