Message ID | 20211206090553.28615-1-qiangqing.zhang@nxp.com (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | net: fec: only clear interrupt of handling queue in fec_enet_rx_queue() | expand |
On Mon, Dec 06, 2021 at 05:05:53PM +0800, Joakim Zhang wrote: > Only clear interrupt of handling queue in fec_enet_rx_queue(), to avoid > missing packets caused by clear interrupt of other queues. > > Signed-off-by: Joakim Zhang <qiangqing.zhang@nxp.com> > --- > drivers/net/ethernet/freescale/fec_main.c | 7 ++++++- > 1 file changed, 6 insertions(+), 1 deletion(-) > > diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c > index 09df434b2f87..eeefed3043ad 100644 > --- a/drivers/net/ethernet/freescale/fec_main.c > +++ b/drivers/net/ethernet/freescale/fec_main.c > @@ -1506,7 +1506,12 @@ fec_enet_rx_queue(struct net_device *ndev, int budget, u16 queue_id) > break; > pkt_received++; > > - writel(FEC_ENET_RXF, fep->hwp + FEC_IEVENT); > + if (queue_id == 0) > + writel(FEC_ENET_RXF_0, fep->hwp + FEC_IEVENT); > + else if (queue_id == 1) > + writel(FEC_ENET_RXF_1, fep->hwp + FEC_IEVENT); > + else > + writel(FEC_ENET_RXF_2, fep->hwp + FEC_IEVENT); The change itself seems find. Reviewed-by: Andrew Lunn <andrew@lunn.ch> But could it be moved out of the loop? If you have a budget of 64, don't you clear this bit 64 times? Can you just clearing it once on exit? Andrew
Hi Andrew, > -----Original Message----- > From: Andrew Lunn <andrew@lunn.ch> > Sent: 2021年12月6日 21:05 > To: Joakim Zhang <qiangqing.zhang@nxp.com> > Cc: davem@davemloft.net; kuba@kernel.org; Nicolas Diaz > <nicolas.diaz@nxp.com>; rmk+kernel@arm.linux.org.uk; > netdev@vger.kernel.org; linux-kernel@vger.kernel.org; dl-linux-imx > <linux-imx@nxp.com> > Subject: Re: [PATCH] net: fec: only clear interrupt of handling queue in > fec_enet_rx_queue() > > On Mon, Dec 06, 2021 at 05:05:53PM +0800, Joakim Zhang wrote: > > Only clear interrupt of handling queue in fec_enet_rx_queue(), to > > avoid missing packets caused by clear interrupt of other queues. > > > > Signed-off-by: Joakim Zhang <qiangqing.zhang@nxp.com> > > --- > > drivers/net/ethernet/freescale/fec_main.c | 7 ++++++- > > 1 file changed, 6 insertions(+), 1 deletion(-) > > > > diff --git a/drivers/net/ethernet/freescale/fec_main.c > > b/drivers/net/ethernet/freescale/fec_main.c > > index 09df434b2f87..eeefed3043ad 100644 > > --- a/drivers/net/ethernet/freescale/fec_main.c > > +++ b/drivers/net/ethernet/freescale/fec_main.c > > @@ -1506,7 +1506,12 @@ fec_enet_rx_queue(struct net_device *ndev, > int budget, u16 queue_id) > > break; > > pkt_received++; > > > > - writel(FEC_ENET_RXF, fep->hwp + FEC_IEVENT); > > + if (queue_id == 0) > > + writel(FEC_ENET_RXF_0, fep->hwp + FEC_IEVENT); > > + else if (queue_id == 1) > > + writel(FEC_ENET_RXF_1, fep->hwp + FEC_IEVENT); > > + else > > + writel(FEC_ENET_RXF_2, fep->hwp + FEC_IEVENT); > > The change itself seems find. > > Reviewed-by: Andrew Lunn <andrew@lunn.ch> > > But could it be moved out of the loop? If you have a budget of 64, don't you > clear this bit 64 times? Can you just clearing it once on exit? Apologize first, I have a formal patch but send out the informal one, I will re-send later, sorry for inconvenience. About you question, yes, we need to clear this bit each time, the blamed patch introduced to avoiding interrupt flooding. > Andrew
diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c index 09df434b2f87..eeefed3043ad 100644 --- a/drivers/net/ethernet/freescale/fec_main.c +++ b/drivers/net/ethernet/freescale/fec_main.c @@ -1506,7 +1506,12 @@ fec_enet_rx_queue(struct net_device *ndev, int budget, u16 queue_id) break; pkt_received++; - writel(FEC_ENET_RXF, fep->hwp + FEC_IEVENT); + if (queue_id == 0) + writel(FEC_ENET_RXF_0, fep->hwp + FEC_IEVENT); + else if (queue_id == 1) + writel(FEC_ENET_RXF_1, fep->hwp + FEC_IEVENT); + else + writel(FEC_ENET_RXF_2, fep->hwp + FEC_IEVENT); /* Check for errors. */ status ^= BD_ENET_RX_LAST;
Only clear interrupt of handling queue in fec_enet_rx_queue(), to avoid missing packets caused by clear interrupt of other queues. Signed-off-by: Joakim Zhang <qiangqing.zhang@nxp.com> --- drivers/net/ethernet/freescale/fec_main.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)