Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 38f38545 authored by Lorenzo Bianconi's avatar Lorenzo Bianconi Committed by Lee Jones
Browse files

UPSTREAM: net: socionext: netsec: fix xdp stats accounting



Increment netdev rx counters even for XDP_DROP verdict. Report even
tx bytes for xdp buffers (TYPE_NETSEC_XDP_TX or TYPE_NETSEC_XDP_NDO).
Moreover account pending buffer length in netsec_xdp_queue_one as it is
done for skb counterpart

Bug: 254441685
Tested-by: default avatarIlias Apalodimas <ilias.apalodimas@linaro.org>
Signed-off-by: default avatarLorenzo Bianconi <lorenzo@kernel.org>
Reviewed-by: default avatarIlias Apalodimas <ilias.apalodimas@linaro.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
[Lee: Back-ported to solve a dependency]
(cherry picked from commit 0c5378f9d5003334775ea0e5e9934976aa4a1b66)
Signed-off-by: default avatarLee Jones <joneslee@google.com>
Change-Id: Ia512f11529436aca74c23e70eb4edb8ee54e3fa3
parent 202bfe2b
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -252,7 +252,6 @@
#define NETSEC_XDP_CONSUMED      BIT(0)
#define NETSEC_XDP_TX            BIT(1)
#define NETSEC_XDP_REDIR         BIT(2)
#define NETSEC_XDP_RX_OK (NETSEC_XDP_PASS | NETSEC_XDP_TX | NETSEC_XDP_REDIR)

enum ring_id {
	NETSEC_RING_TX = 0,
@@ -661,6 +660,7 @@ static bool netsec_clean_tx_dring(struct netsec_priv *priv)
			bytes += desc->skb->len;
			dev_kfree_skb(desc->skb);
		} else {
			bytes += desc->xdpf->len;
			xdp_return_frame(desc->xdpf);
		}
next:
@@ -858,6 +858,7 @@ static u32 netsec_xdp_queue_one(struct netsec_priv *priv,
	tx_desc.addr = xdpf->data;
	tx_desc.len = xdpf->len;

	netdev_sent_queue(priv->ndev, xdpf->len);
	netsec_set_tx_de(priv, tx_ring, &tx_ctrl, &tx_desc, xdpf);

	return NETSEC_XDP_TX;
@@ -1030,7 +1031,7 @@ static int netsec_process_rx(struct netsec_priv *priv, int budget)

next:
		if ((skb && napi_gro_receive(&priv->napi, skb) != GRO_DROP) ||
		    xdp_result & NETSEC_XDP_RX_OK) {
		    xdp_result) {
			ndev->stats.rx_packets++;
			ndev->stats.rx_bytes += xdp.data_end - xdp.data;
		}