lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID:
 <DS3PR21MB57355253303502B93595FA36CE87A@DS3PR21MB5735.namprd21.prod.outlook.com>
Date: Tue, 6 Jan 2026 22:10:03 +0000
From: Long Li <longli@...rosoft.com>
To: Haiyang Zhang <haiyangz@...ux.microsoft.com>,
	"linux-hyperv@...r.kernel.org" <linux-hyperv@...r.kernel.org>,
	"netdev@...r.kernel.org" <netdev@...r.kernel.org>, KY Srinivasan
	<kys@...rosoft.com>, Haiyang Zhang <haiyangz@...rosoft.com>, Wei Liu
	<wei.liu@...nel.org>, Dexuan Cui <DECUI@...rosoft.com>, Andrew Lunn
	<andrew+netdev@...n.ch>, "David S. Miller" <davem@...emloft.net>, Eric
 Dumazet <edumazet@...gle.com>, Jakub Kicinski <kuba@...nel.org>, Paolo Abeni
	<pabeni@...hat.com>, Konstantin Taranov <kotaranov@...rosoft.com>, Simon
 Horman <horms@...nel.org>, Erni Sri Satya Vennela
	<ernis@...ux.microsoft.com>, Shradha Gupta
	<shradhagupta@...ux.microsoft.com>, Saurabh Sengar
	<ssengar@...ux.microsoft.com>, Aditya Garg <gargaditya@...ux.microsoft.com>,
	Dipayaan Roy <dipayanroy@...ux.microsoft.com>, Shiraz Saleem
	<shirazsaleem@...rosoft.com>, "linux-kernel@...r.kernel.org"
	<linux-kernel@...r.kernel.org>, "linux-rdma@...r.kernel.org"
	<linux-rdma@...r.kernel.org>
CC: Paul Rosswurm <paulros@...rosoft.com>
Subject: RE: [PATCH V2,net-next, 2/2] net: mana: Add ethtool counters for RX
 CQEs in coalesced type

> Subject: [PATCH V2,net-next, 2/2] net: mana: Add ethtool counters for RX
> CQEs in coalesced type
> 
> From: Haiyang Zhang <haiyangz@...rosoft.com>
> 
> For RX CQEs with type CQE_RX_COALESCED_4, to measure the coalescing
> efficiency, add counters to count how many contains 2, 3, 4 packets
> respectively.
> Also, add a counter for the error case of first packet with length == 0.
> 
> Signed-off-by: Haiyang Zhang <haiyangz@...rosoft.com>

Reviewed-by: Long Li <longli@...rosoft.com>


> ---
>  drivers/net/ethernet/microsoft/mana/mana_en.c | 25
> +++++++++++++++++--
>  .../ethernet/microsoft/mana/mana_ethtool.c    | 17 ++++++++++---
>  include/net/mana/mana.h                       | 10 +++++---
>  3 files changed, 42 insertions(+), 10 deletions(-)
> 
> diff --git a/drivers/net/ethernet/microsoft/mana/mana_en.c
> b/drivers/net/ethernet/microsoft/mana/mana_en.c
> index a46a1adf83bc..78824567d80b 100644
> --- a/drivers/net/ethernet/microsoft/mana/mana_en.c
> +++ b/drivers/net/ethernet/microsoft/mana/mana_en.c
> @@ -2083,8 +2083,22 @@ static void mana_process_rx_cqe(struct
> mana_rxq *rxq, struct mana_cq *cq,
> 
>  nextpkt:
>  	pktlen = oob->ppi[i].pkt_len;
> -	if (pktlen == 0)
> +	if (pktlen == 0) {
> +		/* Collect coalesced CQE count based on packets processed.
> +		 * Coalesced CQEs have at least 2 packets, so index is i - 2.
> +		 */
> +		if (i > 1) {
> +			u64_stats_update_begin(&rxq->stats.syncp);
> +			rxq->stats.coalesced_cqe[i - 2]++;
> +			u64_stats_update_end(&rxq->stats.syncp);
> +		} else if (i == 0) {
> +			/* Error case stat */
> +			u64_stats_update_begin(&rxq->stats.syncp);
> +			rxq->stats.pkt_len0_err++;
> +			u64_stats_update_end(&rxq->stats.syncp);
> +		}
>  		return;
> +	}
> 
>  	curr = rxq->buf_index;
>  	rxbuf_oob = &rxq->rx_oobs[curr];
> @@ -2102,8 +2116,15 @@ static void mana_process_rx_cqe(struct
> mana_rxq *rxq, struct mana_cq *cq,
> 
>  	mana_post_pkt_rxq(rxq);
> 
> -	if (coalesced && (++i < MANA_RXCOMP_OOB_NUM_PPI))
> +	if (!coalesced)
> +		return;
> +
> +	if (++i < MANA_RXCOMP_OOB_NUM_PPI)
>  		goto nextpkt;
> +
> +	u64_stats_update_begin(&rxq->stats.syncp);
> +	rxq->stats.coalesced_cqe[MANA_RXCOMP_OOB_NUM_PPI - 2]++;
> +	u64_stats_update_end(&rxq->stats.syncp);
>  }
> 
>  static void mana_poll_rx_cq(struct mana_cq *cq) diff --git
> a/drivers/net/ethernet/microsoft/mana/mana_ethtool.c
> b/drivers/net/ethernet/microsoft/mana/mana_ethtool.c
> index b2b9bfb50396..635796bfdaf1 100644
> --- a/drivers/net/ethernet/microsoft/mana/mana_ethtool.c
> +++ b/drivers/net/ethernet/microsoft/mana/mana_ethtool.c
> @@ -20,8 +20,6 @@ static const struct mana_stats_desc mana_eth_stats[] =
> {
>  					tx_cqe_unknown_type)},
>  	{"tx_linear_pkt_cnt", offsetof(struct mana_ethtool_stats,
>  				       tx_linear_pkt_cnt)},
> -	{"rx_coalesced_err", offsetof(struct mana_ethtool_stats,
> -					rx_coalesced_err)},
>  	{"rx_cqe_unknown_type", offsetof(struct mana_ethtool_stats,
>  					rx_cqe_unknown_type)},
>  };
> @@ -151,7 +149,7 @@ static void mana_get_strings(struct net_device *ndev,
> u32 stringset, u8 *data)  {
>  	struct mana_port_context *apc = netdev_priv(ndev);
>  	unsigned int num_queues = apc->num_queues;
> -	int i;
> +	int i, j;
> 
>  	if (stringset != ETH_SS_STATS)
>  		return;
> @@ -170,6 +168,9 @@ static void mana_get_strings(struct net_device *ndev,
> u32 stringset, u8 *data)
>  		ethtool_sprintf(&data, "rx_%d_xdp_drop", i);
>  		ethtool_sprintf(&data, "rx_%d_xdp_tx", i);
>  		ethtool_sprintf(&data, "rx_%d_xdp_redirect", i);
> +		ethtool_sprintf(&data, "rx_%d_pkt_len0_err", i);
> +		for (j = 0; j < MANA_RXCOMP_OOB_NUM_PPI - 1; j++)
> +			ethtool_sprintf(&data, "rx_%d_coalesced_cqe_%d", i,
> j + 2);
>  	}
> 
>  	for (i = 0; i < num_queues; i++) {
> @@ -203,6 +204,8 @@ static void mana_get_ethtool_stats(struct net_device
> *ndev,
>  	u64 xdp_xmit;
>  	u64 xdp_drop;
>  	u64 xdp_tx;
> +	u64 pkt_len0_err;
> +	u64 coalesced_cqe[MANA_RXCOMP_OOB_NUM_PPI - 1];
>  	u64 tso_packets;
>  	u64 tso_bytes;
>  	u64 tso_inner_packets;
> @@ -211,7 +214,7 @@ static void mana_get_ethtool_stats(struct net_device
> *ndev,
>  	u64 short_pkt_fmt;
>  	u64 csum_partial;
>  	u64 mana_map_err;
> -	int q, i = 0;
> +	int q, i = 0, j;
> 
>  	if (!apc->port_is_up)
>  		return;
> @@ -241,6 +244,9 @@ static void mana_get_ethtool_stats(struct net_device
> *ndev,
>  			xdp_drop = rx_stats->xdp_drop;
>  			xdp_tx = rx_stats->xdp_tx;
>  			xdp_redirect = rx_stats->xdp_redirect;
> +			pkt_len0_err = rx_stats->pkt_len0_err;
> +			for (j = 0; j < MANA_RXCOMP_OOB_NUM_PPI - 1;
> j++)
> +				coalesced_cqe[j] = rx_stats->coalesced_cqe[j];
>  		} while (u64_stats_fetch_retry(&rx_stats->syncp, start));
> 
>  		data[i++] = packets;
> @@ -248,6 +254,9 @@ static void mana_get_ethtool_stats(struct net_device
> *ndev,
>  		data[i++] = xdp_drop;
>  		data[i++] = xdp_tx;
>  		data[i++] = xdp_redirect;
> +		data[i++] = pkt_len0_err;
> +		for (j = 0; j < MANA_RXCOMP_OOB_NUM_PPI - 1; j++)
> +			data[i++] = coalesced_cqe[j];
>  	}
> 
>  	for (q = 0; q < num_queues; q++) {
> diff --git a/include/net/mana/mana.h b/include/net/mana/mana.h index
> 51d26ebeff6c..f8dd19860103 100644
> --- a/include/net/mana/mana.h
> +++ b/include/net/mana/mana.h
> @@ -61,8 +61,11 @@ enum TRI_STATE {
> 
>  #define MAX_PORTS_IN_MANA_DEV 256
> 
> +/* Maximum number of packets per coalesced CQE */ #define
> +MANA_RXCOMP_OOB_NUM_PPI 4
> +
>  /* Update this count whenever the respective structures are changed */ -
> #define MANA_STATS_RX_COUNT 5
> +#define MANA_STATS_RX_COUNT (6 + MANA_RXCOMP_OOB_NUM_PPI - 1)
>  #define MANA_STATS_TX_COUNT 11
> 
>  #define MANA_RX_FRAG_ALIGNMENT 64
> @@ -73,6 +76,8 @@ struct mana_stats_rx {
>  	u64 xdp_drop;
>  	u64 xdp_tx;
>  	u64 xdp_redirect;
> +	u64 pkt_len0_err;
> +	u64 coalesced_cqe[MANA_RXCOMP_OOB_NUM_PPI - 1];
>  	struct u64_stats_sync syncp;
>  };
> 
> @@ -227,8 +232,6 @@ struct mana_rxcomp_perpkt_info {
>  	u32 pkt_hash;
>  }; /* HW DATA */
> 
> -#define MANA_RXCOMP_OOB_NUM_PPI 4
> -
>  /* Receive completion OOB */
>  struct mana_rxcomp_oob {
>  	struct mana_cqe_header cqe_hdr;
> @@ -378,7 +381,6 @@ struct mana_ethtool_stats {
>  	u64 tx_cqe_err;
>  	u64 tx_cqe_unknown_type;
>  	u64 tx_linear_pkt_cnt;
> -	u64 rx_coalesced_err;
>  	u64 rx_cqe_unknown_type;
>  };
> 
> --
> 2.34.1


Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ