All of lore.kernel.org
 help / color / mirror / Atom feed
From: Vladimir Oltean <olteanv@gmail.com>
To: Jakub Kicinski <kuba@kernel.org>,
	"David S. Miller" <davem@davemloft.net>,
	netdev@vger.kernel.org, Po Liu <po.liu@nxp.com>
Cc: "Claudiu Manoil" <claudiu.manoil@nxp.com>,
	"Alex Marginean" <alexandru.marginean@nxp.com>,
	"Yangbo Lu" <yangbo.lu@nxp.com>,
	"Toke Høiland-Jørgensen" <toke@redhat.com>,
	"Vladimir Oltean" <vladimir.oltean@nxp.com>
Subject: [PATCH net-next 04/10] net: enetc: stop XDP NAPI processing when build_skb() fails
Date: Sat, 17 Apr 2021 00:22:19 +0300	[thread overview]
Message-ID: <20210416212225.3576792-5-olteanv@gmail.com> (raw)
In-Reply-To: <20210416212225.3576792-1-olteanv@gmail.com>

From: Vladimir Oltean <vladimir.oltean@nxp.com>

When the code path below fails:

enetc_clean_rx_ring_xdp // XDP_PASS
-> enetc_build_skb
   -> enetc_map_rx_buff_to_skb
      -> build_skb

enetc_clean_rx_ring_xdp will 'break', but that 'break' instruction isn't
strong enough to actually break the NAPI poll loop, just the switch/case
statement for XDP actions. So we increment rx_frm_cnt and go to the next
frames minding our own business.

Instead let's do what the skb NAPI poll function does, and break the
loop now, waiting for the memory pressure to go away. Otherwise the next
calls to build_skb() are likely to fail too.

Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
---
 drivers/net/ethernet/freescale/enetc/enetc.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/freescale/enetc/enetc.c b/drivers/net/ethernet/freescale/enetc/enetc.c
index c6f984473337..469170076efa 100644
--- a/drivers/net/ethernet/freescale/enetc/enetc.c
+++ b/drivers/net/ethernet/freescale/enetc/enetc.c
@@ -1275,8 +1275,7 @@ static int enetc_clean_rx_ring_xdp(struct enetc_bdr *rx_ring,
 					      &i, &cleaned_cnt,
 					      ENETC_RXB_DMA_SIZE_XDP);
 			if (unlikely(!skb))
-				/* Exit the switch/case, not the loop */
-				break;
+				goto out;
 
 			napi_gro_receive(napi, skb);
 			break;
@@ -1338,6 +1337,7 @@ static int enetc_clean_rx_ring_xdp(struct enetc_bdr *rx_ring,
 		rx_frm_cnt++;
 	}
 
+out:
 	rx_ring->next_to_clean = i;
 
 	rx_ring->stats.packets += rx_frm_cnt;
-- 
2.25.1


  parent reply	other threads:[~2021-04-16 21:23 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-04-16 21:22 [PATCH net-next 00/10] Fixups for XDP on NXP ENETC Vladimir Oltean
2021-04-16 21:22 ` [PATCH net-next 01/10] net: enetc: remove redundant clearing of skb/xdp_frame pointer in TX conf path Vladimir Oltean
2021-04-16 21:22 ` [PATCH net-next 02/10] net: enetc: rename the buffer reuse helpers Vladimir Oltean
2021-04-16 21:22 ` [PATCH net-next 03/10] net: enetc: recycle buffers for frames with RX errors Vladimir Oltean
2021-04-16 21:22 ` Vladimir Oltean [this message]
2021-04-16 21:22 ` [PATCH net-next 05/10] net: enetc: remove unneeded xdp_do_flush_map() Vladimir Oltean
2021-04-16 21:22 ` [PATCH net-next 06/10] net: enetc: increase TX ring size Vladimir Oltean
2021-04-16 21:22 ` [PATCH net-next 07/10] net: enetc: use dedicated TX rings for XDP Vladimir Oltean
2021-04-16 21:22 ` [PATCH net-next 08/10] net: enetc: handle the invalid XDP action the same way as XDP_DROP Vladimir Oltean
2021-04-16 21:22 ` [PATCH net-next 09/10] net: enetc: fix buffer leaks with XDP_TX enqueue rejections Vladimir Oltean
2021-04-16 21:22 ` [PATCH net-next 10/10] net: enetc: apply the MDIO workaround for XDP_REDIRECT too Vladimir Oltean
2021-04-17  0:20 ` [PATCH net-next 00/10] Fixups for XDP on NXP ENETC patchwork-bot+netdevbpf

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210416212225.3576792-5-olteanv@gmail.com \
    --to=olteanv@gmail.com \
    --cc=alexandru.marginean@nxp.com \
    --cc=claudiu.manoil@nxp.com \
    --cc=davem@davemloft.net \
    --cc=kuba@kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=po.liu@nxp.com \
    --cc=toke@redhat.com \
    --cc=vladimir.oltean@nxp.com \
    --cc=yangbo.lu@nxp.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.