Message ID | 53958ED5.8070108@renesas.com (mailing list archive) |
---|---|
State | Awaiting Upstream |
Headers | show |
Hello. On 09-06-2014 14:39, Yoshihiro Shimoda wrote: > This patch fixes the packet "exceeded" condition in sh_eth_rx() when > RACT in an RX descriptor is not set and the "quota" is 0. > Otherwise, kernel panic happens because the "&n->poll_list" is deleted > twice in sh_eth_poll() which calls napi_complete() and net_rx_action(). > Signed-off-by: Kouei Abe <kouei.abe.cp@renesas.com> > Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com> > --- > drivers/net/ethernet/renesas/sh_eth.c | 8 +++----- > 1 file changed, 3 insertions(+), 5 deletions(-) > diff --git a/drivers/net/ethernet/renesas/sh_eth.c b/drivers/net/ethernet/renesas/sh_eth.c > index 08ed9a3..ad0b5bd 100644 > --- a/drivers/net/ethernet/renesas/sh_eth.c > +++ b/drivers/net/ethernet/renesas/sh_eth.c [...] > @@ -1508,7 +1506,7 @@ static int sh_eth_rx(struct net_device *ndev, u32 intr_status, int *quota) > sh_eth_write(ndev, EDRRR_R, EDRRR); > } > > - return exceeded; > + return (*quota <= 0); Parens not needed here. WBR, Sergei -- To unsubscribe from this list: send the line "unsubscribe linux-sh" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Hello. (2014/06/09 19:58), Sergei Shtylyov wrote: > Hello. > > On 09-06-2014 14:39, Yoshihiro Shimoda wrote: > >> This patch fixes the packet "exceeded" condition in sh_eth_rx() when >> RACT in an RX descriptor is not set and the "quota" is 0. >> Otherwise, kernel panic happens because the "&n->poll_list" is deleted >> twice in sh_eth_poll() which calls napi_complete() and net_rx_action(). > >> Signed-off-by: Kouei Abe <kouei.abe.cp@renesas.com> >> Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com> >> --- >> drivers/net/ethernet/renesas/sh_eth.c | 8 +++----- >> 1 file changed, 3 insertions(+), 5 deletions(-) > >> diff --git a/drivers/net/ethernet/renesas/sh_eth.c b/drivers/net/ethernet/renesas/sh_eth.c >> index 08ed9a3..ad0b5bd 100644 >> --- a/drivers/net/ethernet/renesas/sh_eth.c >> +++ b/drivers/net/ethernet/renesas/sh_eth.c > [...] >> @@ -1508,7 +1506,7 @@ static int sh_eth_rx(struct net_device *ndev, u32 intr_status, int *quota) >> sh_eth_write(ndev, EDRRR_R, EDRRR); >> } >> >> - return exceeded; >> + return (*quota <= 0); > > Parens not needed here. Thank you for the point. I will remove the parens. Best regards, Yoshihiro Shimoda > WBR, Sergei > -- To unsubscribe from this list: send the line "unsubscribe linux-sh" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/net/ethernet/renesas/sh_eth.c b/drivers/net/ethernet/renesas/sh_eth.c index 08ed9a3..ad0b5bd 100644 --- a/drivers/net/ethernet/renesas/sh_eth.c +++ b/drivers/net/ethernet/renesas/sh_eth.c @@ -1399,7 +1399,6 @@ 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; struct sk_buff *skb; - int exceeded = 0; u16 pkt_len = 0; u32 desc_status; @@ -1411,10 +1410,9 @@ static int sh_eth_rx(struct net_device *ndev, u32 intr_status, int *quota) if (--boguscnt < 0) break; - if (*quota <= 0) { - exceeded = 1; + if (*quota <= 0) break; - } + (*quota)--; if (!(desc_status & RDFEND)) @@ -1508,7 +1506,7 @@ static int sh_eth_rx(struct net_device *ndev, u32 intr_status, int *quota) sh_eth_write(ndev, EDRRR_R, EDRRR); } - return exceeded; + return (*quota <= 0); } static void sh_eth_rcv_snd_disable(struct net_device *ndev)