aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMitsuhiro Kimura <mitsuhiro.kimura.kc@renesas.com>2014-12-09 07:23:42 -0500
committerDavid S. Miller <davem@davemloft.net>2014-12-09 18:05:08 -0500
commit319cd52013dec3413a3b753f7b7747504aa077df (patch)
treec009e85708a4345aa8498f1656b45e748a4e841f
parente008f3f07ffba2be471ffd79bd1922af0042f936 (diff)
sh_eth: Optimization for RX excess judgement
Both of 'boguscnt' and 'quota' have nearly meaning as the condition of the reception loop. In order to cut down redundant processing, this patch changes excess judgement. Signed-off-by: Mitsuhiro Kimura <mitsuhiro.kimura.kc@renesas.com> Signed-off-by: Yoshihiro Kaneko <ykaneko0929@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/ethernet/renesas/sh_eth.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/drivers/net/ethernet/renesas/sh_eth.c b/drivers/net/ethernet/renesas/sh_eth.c
index 71f59ee51304..e77025915b23 100644
--- a/drivers/net/ethernet/renesas/sh_eth.c
+++ b/drivers/net/ethernet/renesas/sh_eth.c
@@ -1395,10 +1395,13 @@ static int sh_eth_rx(struct net_device *ndev, u32 intr_status, int *quota)
1395 1395
1396 int entry = mdp->cur_rx % mdp->num_rx_ring; 1396 int entry = mdp->cur_rx % mdp->num_rx_ring;
1397 int boguscnt = (mdp->dirty_rx + mdp->num_rx_ring) - mdp->cur_rx; 1397 int boguscnt = (mdp->dirty_rx + mdp->num_rx_ring) - mdp->cur_rx;
1398 int limit;
1398 struct sk_buff *skb; 1399 struct sk_buff *skb;
1399 u16 pkt_len = 0; 1400 u16 pkt_len = 0;
1400 u32 desc_status; 1401 u32 desc_status;
1401 1402
1403 boguscnt = min(boguscnt, *quota);
1404 limit = boguscnt;
1402 rxdesc = &mdp->rx_ring[entry]; 1405 rxdesc = &mdp->rx_ring[entry];
1403 while (!(rxdesc->status & cpu_to_edmac(mdp, RD_RACT))) { 1406 while (!(rxdesc->status & cpu_to_edmac(mdp, RD_RACT))) {
1404 desc_status = edmac_to_cpu(mdp, rxdesc->status); 1407 desc_status = edmac_to_cpu(mdp, rxdesc->status);
@@ -1407,11 +1410,6 @@ static int sh_eth_rx(struct net_device *ndev, u32 intr_status, int *quota)
1407 if (--boguscnt < 0) 1410 if (--boguscnt < 0)
1408 break; 1411 break;
1409 1412
1410 if (*quota <= 0)
1411 break;
1412
1413 (*quota)--;
1414
1415 if (!(desc_status & RDFEND)) 1413 if (!(desc_status & RDFEND))
1416 ndev->stats.rx_length_errors++; 1414 ndev->stats.rx_length_errors++;
1417 1415
@@ -1502,6 +1500,8 @@ static int sh_eth_rx(struct net_device *ndev, u32 intr_status, int *quota)
1502 sh_eth_write(ndev, EDRRR_R, EDRRR); 1500 sh_eth_write(ndev, EDRRR_R, EDRRR);
1503 } 1501 }
1504 1502
1503 *quota -= limit - boguscnt - 1;
1504
1505 return *quota <= 0; 1505 return *quota <= 0;
1506} 1506}
1507 1507