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

Commit 7d7bfc6a authored by Eric Dumazet's avatar Eric Dumazet Committed by David S. Miller
Browse files

mlx4: add rx_alloc_pages counter in ethtool -S



This new counter tracks number of pages that we allocated for one port.

lpaa24:~# ethtool -S eth0 | egrep 'rx_alloc_pages|rx_packets'
     rx_packets: 306755183
     rx_alloc_pages: 932897

Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
Acked-by: default avatarTariq Toukan <tariqt@mellanox.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 34db548b
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -117,7 +117,7 @@ static const char main_strings[][ETH_GSTRING_LEN] = {
	/* port statistics */
	"tso_packets",
	"xmit_more",
	"queue_stopped", "wake_queue", "tx_timeout", "rx_alloc_failed",
	"queue_stopped", "wake_queue", "tx_timeout", "rx_alloc_pages",
	"rx_csum_good", "rx_csum_none", "rx_csum_complete", "tx_chksum_offload",

	/* pf statistics */
+2 −0
Original line number Diff line number Diff line
@@ -213,6 +213,7 @@ int mlx4_en_DUMP_ETH_STATS(struct mlx4_en_dev *mdev, u8 port, u8 reset)
	priv->port_stats.rx_chksum_good = 0;
	priv->port_stats.rx_chksum_none = 0;
	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_tx      = 0;
	priv->xdp_stats.rx_xdp_tx_full = 0;
@@ -223,6 +224,7 @@ int mlx4_en_DUMP_ETH_STATS(struct mlx4_en_dev *mdev, u8 port, u8 reset)
		priv->port_stats.rx_chksum_good += READ_ONCE(ring->csum_ok);
		priv->port_stats.rx_chksum_none += READ_ONCE(ring->csum_none);
		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_tx	+= READ_ONCE(ring->xdp_tx);
		priv->xdp_stats.rx_xdp_tx_full	+= READ_ONCE(ring->xdp_tx_full);
+7 −4
Original line number Diff line number Diff line
@@ -72,6 +72,7 @@ static int mlx4_alloc_page(struct mlx4_en_priv *priv,
}

static int mlx4_en_alloc_frags(struct mlx4_en_priv *priv,
			       struct mlx4_en_rx_ring *ring,
			       struct mlx4_en_rx_desc *rx_desc,
			       struct mlx4_en_rx_alloc *frags,
			       gfp_t gfp)
@@ -79,8 +80,11 @@ static int mlx4_en_alloc_frags(struct mlx4_en_priv *priv,
	int i;

	for (i = 0; i < priv->num_frags; i++, frags++) {
		if (!frags->page && mlx4_alloc_page(priv, frags, gfp))
		if (!frags->page) {
			if (mlx4_alloc_page(priv, frags, gfp))
				return -ENOMEM;
			ring->rx_alloc_pages++;
		}
		rx_desc->data[i].addr = cpu_to_be64(frags->dma +
						    frags->page_offset);
	}
@@ -133,7 +137,6 @@ static int mlx4_en_prepare_rx_desc(struct mlx4_en_priv *priv,
	struct mlx4_en_rx_desc *rx_desc = ring->buf + (index * ring->stride);
	struct mlx4_en_rx_alloc *frags = ring->rx_info +
					(index << priv->log_rx_info);

	if (ring->page_cache.index > 0) {
		/* XDP uses a single page per frame */
		if (!frags->page) {
@@ -147,7 +150,7 @@ static int mlx4_en_prepare_rx_desc(struct mlx4_en_priv *priv,
		return 0;
	}

	return mlx4_en_alloc_frags(priv, rx_desc, frags, gfp);
	return mlx4_en_alloc_frags(priv, ring, rx_desc, frags, gfp);
}

static bool mlx4_en_is_ring_empty(const struct mlx4_en_rx_ring *ring)
+1 −0
Original line number Diff line number Diff line
@@ -346,6 +346,7 @@ struct mlx4_en_rx_ring {
	unsigned long csum_ok;
	unsigned long csum_none;
	unsigned long csum_complete;
	unsigned long rx_alloc_pages;
	unsigned long xdp_drop;
	unsigned long xdp_tx;
	unsigned long xdp_tx_full;
+1 −1
Original line number Diff line number Diff line
@@ -37,7 +37,7 @@ struct mlx4_en_port_stats {
	unsigned long queue_stopped;
	unsigned long wake_queue;
	unsigned long tx_timeout;
	unsigned long rx_alloc_failed;
	unsigned long rx_alloc_pages;
	unsigned long rx_chksum_good;
	unsigned long rx_chksum_none;
	unsigned long rx_chksum_complete;