From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sergei Shtylyov Subject: Re: [PATCH] sh_eth: Optimization for RX excess judgement Date: Fri, 14 Nov 2014 01:09:06 +0300 Message-ID: <54652C02.4070703@cogentembedded.com> References: <1415862031-27925-1-git-send-email-ykaneko0929@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit Cc: "David S. Miller" , Simon Horman , Magnus Damm , linux-sh@vger.kernel.org To: Yoshihiro Kaneko , netdev@vger.kernel.org Return-path: In-Reply-To: <1415862031-27925-1-git-send-email-ykaneko0929@gmail.com> Sender: linux-sh-owner@vger.kernel.org List-Id: netdev.vger.kernel.org Hello. On 11/13/2014 10:00 AM, Yoshihiro Kaneko wrote: > From: Mitsuhiro Kimura > 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 > Signed-off-by: Yoshihiro Kaneko > --- > This patch is based on net tree. This is clearly 'net-next' material. > drivers/net/ethernet/renesas/sh_eth.c | 15 +++++++++------ > 1 file changed, 9 insertions(+), 6 deletions(-) > diff --git a/drivers/net/ethernet/renesas/sh_eth.c b/drivers/net/ethernet/renesas/sh_eth.c > index 60e9c2c..7d46326 100644 > --- a/drivers/net/ethernet/renesas/sh_eth.c > +++ b/drivers/net/ethernet/renesas/sh_eth.c > @@ -1394,10 +1394,15 @@ 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 = boguscnt; > struct sk_buff *skb; > u16 pkt_len = 0; > u32 desc_status; > > + if (quota) { I don't see what's the point in checking -- quota is always non-NULL. > + 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); [...] > @@ -1501,7 +1501,10 @@ static int sh_eth_rx(struct net_device *ndev, u32 intr_status, int *quota) > sh_eth_write(ndev, EDRRR_R, EDRRR); > } > > - return *quota <= 0; > + if (quota) Again, seeing no sense in this check. > + *quota -= limit - (++boguscnt); > + > + return (boguscnt <= 0); Parens not needed. [...] WBR, Sergei