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>
This commit is contained in:
parent
e008f3f07f
commit
319cd52013
|
@ -1395,10 +1395,13 @@ static int sh_eth_rx(struct net_device *ndev, u32 intr_status, int *quota)
|
|||
|
||||
int entry = mdp->cur_rx % mdp->num_rx_ring;
|
||||
int boguscnt = (mdp->dirty_rx + mdp->num_rx_ring) - mdp->cur_rx;
|
||||
int limit;
|
||||
struct sk_buff *skb;
|
||||
u16 pkt_len = 0;
|
||||
u32 desc_status;
|
||||
|
||||
boguscnt = min(boguscnt, *quota);
|
||||
limit = boguscnt;
|
||||
rxdesc = &mdp->rx_ring[entry];
|
||||
while (!(rxdesc->status & cpu_to_edmac(mdp, RD_RACT))) {
|
||||
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)
|
|||
if (--boguscnt < 0)
|
||||
break;
|
||||
|
||||
if (*quota <= 0)
|
||||
break;
|
||||
|
||||
(*quota)--;
|
||||
|
||||
if (!(desc_status & RDFEND))
|
||||
ndev->stats.rx_length_errors++;
|
||||
|
||||
|
@ -1502,6 +1500,8 @@ static int sh_eth_rx(struct net_device *ndev, u32 intr_status, int *quota)
|
|||
sh_eth_write(ndev, EDRRR_R, EDRRR);
|
||||
}
|
||||
|
||||
*quota -= limit - boguscnt - 1;
|
||||
|
||||
return *quota <= 0;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue