Commit dee3b2d0 authored by Joshua Roys's avatar Joshua Roys Committed by David S. Miller
Browse files

net/mlx4_en: Add XDP_REDIRECT statistics



Add counters for XDP REDIRECT success and failure. This brings the
redirect path in line with metrics gathered via the other XDP paths.

Signed-off-by: default avatarJoshua Roys <roysjosh@gmail.com>
Reviewed-by: default avatarTariq Toukan <tariqt@nvidia.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 4fe81585
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -197,6 +197,8 @@ static const char main_strings[][ETH_GSTRING_LEN] = {

	/* xdp statistics */
	"rx_xdp_drop",
	"rx_xdp_redirect",
	"rx_xdp_redirect_fail",
	"rx_xdp_tx",
	"rx_xdp_tx_full",

@@ -428,6 +430,8 @@ static void mlx4_en_get_ethtool_stats(struct net_device *dev,
		data[index++] = priv->rx_ring[i]->bytes;
		data[index++] = priv->rx_ring[i]->dropped;
		data[index++] = priv->rx_ring[i]->xdp_drop;
		data[index++] = priv->rx_ring[i]->xdp_redirect;
		data[index++] = priv->rx_ring[i]->xdp_redirect_fail;
		data[index++] = priv->rx_ring[i]->xdp_tx;
		data[index++] = priv->rx_ring[i]->xdp_tx_full;
	}
@@ -519,6 +523,10 @@ static void mlx4_en_get_strings(struct net_device *dev,
				"rx%d_dropped", i);
			sprintf(data + (index++) * ETH_GSTRING_LEN,
				"rx%d_xdp_drop", i);
			sprintf(data + (index++) * ETH_GSTRING_LEN,
				"rx%d_xdp_redirect", i);
			sprintf(data + (index++) * ETH_GSTRING_LEN,
				"rx%d_xdp_redirect_fail", i);
			sprintf(data + (index++) * ETH_GSTRING_LEN,
				"rx%d_xdp_tx", i);
			sprintf(data + (index++) * ETH_GSTRING_LEN,
+4 −0
Original line number Diff line number Diff line
@@ -244,6 +244,8 @@ int mlx4_en_DUMP_ETH_STATS(struct mlx4_en_dev *mdev, u8 port, u8 reset)
	priv->port_stats.rx_chksum_complete = 0;
	priv->port_stats.rx_alloc_pages = 0;
	priv->xdp_stats.rx_xdp_drop    = 0;
	priv->xdp_stats.rx_xdp_redirect = 0;
	priv->xdp_stats.rx_xdp_redirect_fail = 0;
	priv->xdp_stats.rx_xdp_tx      = 0;
	priv->xdp_stats.rx_xdp_tx_full = 0;
	for (i = 0; i < priv->rx_ring_num; i++) {
@@ -255,6 +257,8 @@ int mlx4_en_DUMP_ETH_STATS(struct mlx4_en_dev *mdev, u8 port, u8 reset)
		priv->port_stats.rx_chksum_complete += READ_ONCE(ring->csum_complete);
		priv->port_stats.rx_alloc_pages += READ_ONCE(ring->rx_alloc_pages);
		priv->xdp_stats.rx_xdp_drop	+= READ_ONCE(ring->xdp_drop);
		priv->xdp_stats.rx_xdp_redirect += READ_ONCE(ring->xdp_redirect);
		priv->xdp_stats.rx_xdp_redirect_fail += READ_ONCE(ring->xdp_redirect_fail);
		priv->xdp_stats.rx_xdp_tx	+= READ_ONCE(ring->xdp_tx);
		priv->xdp_stats.rx_xdp_tx_full	+= READ_ONCE(ring->xdp_tx_full);
	}
+3 −1
Original line number Diff line number Diff line
@@ -793,11 +793,13 @@ int mlx4_en_process_rx_cq(struct net_device *dev, struct mlx4_en_cq *cq, int bud
			case XDP_PASS:
				break;
			case XDP_REDIRECT:
				if (xdp_do_redirect(dev, &xdp, xdp_prog) >= 0) {
				if (likely(!xdp_do_redirect(dev, &xdp, xdp_prog))) {
					ring->xdp_redirect++;
					xdp_redir_flush = true;
					frags[0].page = NULL;
					goto next;
				}
				ring->xdp_redirect_fail++;
				trace_xdp_exception(dev, xdp_prog, act);
				goto xdp_drop_no_cnt;
			case XDP_TX:
+2 −0
Original line number Diff line number Diff line
@@ -340,6 +340,8 @@ struct mlx4_en_rx_ring {
	unsigned long csum_complete;
	unsigned long rx_alloc_pages;
	unsigned long xdp_drop;
	unsigned long xdp_redirect;
	unsigned long xdp_redirect_fail;
	unsigned long xdp_tx;
	unsigned long xdp_tx_full;
	unsigned long dropped;
+3 −1
Original line number Diff line number Diff line
@@ -42,9 +42,11 @@ struct mlx4_en_port_stats {

struct mlx4_en_xdp_stats {
	unsigned long rx_xdp_drop;
	unsigned long rx_xdp_redirect;
	unsigned long rx_xdp_redirect_fail;
	unsigned long rx_xdp_tx;
	unsigned long rx_xdp_tx_full;
#define NUM_XDP_STATS		3
#define NUM_XDP_STATS		5
};

struct mlx4_en_phy_stats {