On 03/04/2024 04:39, Ratheesh Kannoth wrote: > On 2024-04-02 at 20:23:04, Paul Barker (paul.barker.ct@xxxxxxxxxxxxxx) wrote: >> The TX queue should be serviced each time the poll function is called, >> even if the full RX work budget has been consumed. This prevents >> starvation of the TX queue when RX bandwidth usage is high. >> >> Fixes: c156633f1353 ("Renesas Ethernet AVB driver proper") >> Signed-off-by: Paul Barker <paul.barker.ct@xxxxxxxxxxxxxx> >> --- >> Changes from v1: >> * Use the correct 'Fixes' tag. >> * Call the new variable 'unmask' and drop the unnecessary initializer, >> as requested by Sergey. >> >> drivers/net/ethernet/renesas/ravb_main.c | 7 +++++-- >> 1 file changed, 5 insertions(+), 2 deletions(-) >> >> diff --git a/drivers/net/ethernet/renesas/ravb_main.c b/drivers/net/ethernet/renesas/ravb_main.c >> index d1be030c8848..48803050abdb 100644 >> --- a/drivers/net/ethernet/renesas/ravb_main.c >> +++ b/drivers/net/ethernet/renesas/ravb_main.c >> @@ -1324,12 +1324,12 @@ static int ravb_poll(struct napi_struct *napi, int budget) >> int q = napi - priv->napi; >> int mask = BIT(q); >> int quota = budget; >> + bool unmask; >> >> /* Processing RX Descriptor Ring */ >> /* Clear RX interrupt */ >> ravb_write(ndev, ~(mask | RIS0_RESERVED), RIS0); >> - if (ravb_rx(ndev, "a, q)) >> - goto out; >> + unmask = !ravb_rx(ndev, "a, q); >> >> /* Processing TX Descriptor Ring */ > AFAIU, TX is processed without any budget. This wont result in rx work starvation if > TX traffic is more ? Quoting the docs in Documentation/networking/napi.rst: The method takes a ``budget`` argument - drivers can process completions for any number of Tx packets but should only process up to ``budget`` number of Rx packets. skb Tx processing should happen regardless of the ``budget`` I take that to mean that the RX work budget running out should not stop processing of TX packets. Other drivers with a combined TX/RX poll function follow the same pattern of processing TX packets regardless of RX budget exhaustion, for example see ixgbe_poll() which processes TX packets first (in drivers/net/ethernet/intel/ixgbe/ixgbe_main.c). Thanks, -- Paul Barker
Attachment:
OpenPGP_0x27F4B3459F002257.asc
Description: OpenPGP public key
Attachment:
OpenPGP_signature.asc
Description: OpenPGP digital signature