Re: [PATCH net-next] net: mana: Extend RX CQE coalescing up to 8 packets

Joe Damato <[email protected]> Thu, 30 Jul 2026 08:54:48 -0700
Newsgroups org.kernel.vger.linux-hyperv,org.kernel.vger.linux-kernel,org.kernel.vger.linux-rdma,org.kernel.vger.netdev
Message-ID <amtzyNmcIIYy6/[email protected]>
On Wed, Jul 29, 2026 at 03:52:22PM -0700, Haiyang Zhang wrote:
> From: Haiyang Zhang <[email protected]>
> 
> To support up to 8 packets per CQE, put two packet lengths and
> hash values into one PPI entry by using the reserved fields.
> Update ethtool handlers to set this feature.
> Update per queue stat to show the coalesced CQE counters.
> This feature is supported on NIC hardware showing the relevant
> PF flag.
> 
> Signed-off-by: Haiyang Zhang <[email protected]>
> ---
>  drivers/net/ethernet/microsoft/mana/mana_en.c | 137 ++++++++++++------
>  .../ethernet/microsoft/mana/mana_ethtool.c    |  30 +++-
>  include/net/mana/gdma.h                       |   4 +
>  include/net/mana/mana.h                       |  43 ++++--
>  4 files changed, 150 insertions(+), 64 deletions(-)
> 
> diff --git a/drivers/net/ethernet/microsoft/mana/mana_en.c b/drivers/net/ethernet/microsoft/mana/mana_en.c
> index a8c329bdbacf..720d22e6aea9 100644
> --- a/drivers/net/ethernet/microsoft/mana/mana_en.c
> +++ b/drivers/net/ethernet/microsoft/mana/mana_en.c
> @@ -1241,6 +1241,9 @@ int mana_gd_query_device_cfg(struct gdma_context *gc, u32 proto_major_ver,

[...]

>  
> +static void mana_process_one_rx_pkt(struct device *dev, struct mana_rxq *rxq,
> +				    struct mana_rxcomp_oob *oob,
> +				    u32 pktlen, u32 pkt_hash)
> +{
> +	struct mana_recv_buf_oob *rxbuf_oob;
> +	struct net_device *ndev = rxq->ndev;
> +	void *old_buf = NULL;
> +	bool old_fp;
> +
> +	rxbuf_oob = &rxq->rx_oobs[rxq->buf_index];
> +	WARN_ON_ONCE(rxbuf_oob->wqe_inf.wqe_size_in_bu != 1);
> +
> +	if (unlikely(pktlen > rxq->datasize)) {
> +		/* Increase it even if mana_rx_skb() isn't called. */
> +		rxq->rx_cq.work_done++;
> +
> +		++ndev->stats.rx_dropped;

It looks like this code was moved from mana_process_rx_cqe, so this is prob
out of scope, but I saw this and was wondering if maybe rx_length_errors is more
appropriate?

from if_link.h:

 * @rx_length_errors: Number of packets dropped due to invalid length.
 *   Part of aggregate "frame" errors in `/proc/net/dev`.