On 11/23/23 7:48 PM, Biju Das wrote: [...] >>> From: Claudiu Beznea <claudiu.beznea.uj@xxxxxxxxxxxxxx> >>> >>> ravb_poll() initial code used to interrogate the first descriptor of >>> the RX queue in case gptp is false to know if ravb_rx() should be >> called. >>> This is done for non GPTP IPs. For GPTP IPs the driver PTP specific >> >> It's called gPTP, AFAIK. >> >>> information was used to know if receive function should be called. As >>> every IP has it's own receive function that interrogates the RX >>> descriptor >> >> Its own. >> >>> list in the same way the ravb_poll() was doing there is no need to >>> double check this in ravb_poll(). Removing the code form ravb_poll() >>> and >> >> From ravb_poll(). >> >>> adjusting ravb_rx_gbeth() leads to a cleaner code. >>> >>> Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@xxxxxxxxxxxxxx> >>> --- >>> drivers/net/ethernet/renesas/ravb_main.c | 18 ++++++------------ >>> 1 file changed, 6 insertions(+), 12 deletions(-) >>> >>> diff --git a/drivers/net/ethernet/renesas/ravb_main.c >>> b/drivers/net/ethernet/renesas/ravb_main.c >>> index 588e3be692d3..0fc9810c5e78 100644 >>> --- a/drivers/net/ethernet/renesas/ravb_main.c >>> +++ b/drivers/net/ethernet/renesas/ravb_main.c >>> @@ -771,12 +771,15 @@ static bool ravb_rx_gbeth(struct net_device *ndev, >> int *quota, int q) >>> int limit; >>> >>> entry = priv->cur_rx[q] % priv->num_rx_ring[q]; >>> + desc = &priv->gbeth_rx_ring[entry]; >>> + if (desc->die_dt == DT_FEMPTY) >>> + return false; >>> + >> >> I don't understand what this buys us, the following *while* loop will >> be skipped anyway, and the *for* loop as well, I think... And >> ravb_rx_rcar() doesn't have that anyway... >> >>> @@ -1279,25 +1282,16 @@ static int ravb_poll(struct napi_struct *napi, >> int budget) >>> struct net_device *ndev = napi->dev; >>> struct ravb_private *priv = netdev_priv(ndev); >>> const struct ravb_hw_info *info = priv->info; >>> - bool gptp = info->gptp || info->ccc_gac; >>> - struct ravb_rx_desc *desc; >>> unsigned long flags; >>> int q = napi - priv->napi; >>> int mask = BIT(q); >>> int quota = budget; >>> - unsigned int entry; >>> >>> - if (!gptp) { >>> - entry = priv->cur_rx[q] % priv->num_rx_ring[q]; >>> - desc = &priv->gbeth_rx_ring[entry]; >>> - } >>> /* Processing RX Descriptor Ring */ >>> /* Clear RX interrupt */ >>> ravb_write(ndev, ~(mask | RIS0_RESERVED), RIS0); >>> - if (gptp || desc->die_dt != DT_FEMPTY) { >>> - if (ravb_rx(ndev, "a, q)) >>> - goto out; >>> - } >> >> I don't really understand this code (despite I've AKCed it)... >> Biju, could you explain this (well, you tried already but I don't buy it >> anymore)? > > It was initial version of the driver. Now Claudiu optimized. I fail to understand why you had (GBEth-specific) pre-conditions here to call ravb_rx()... and involving gPTP only further confused things... > Cheers, > Biju [...] MBR, Sergey