From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <dev-bounces@dpdk.org>
Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124])
	by inbox.dpdk.org (Postfix) with ESMTP id E3E9EA0524;
	Fri,  7 May 2021 18:47:37 +0200 (CEST)
Received: from [217.70.189.124] (localhost [127.0.0.1])
	by mails.dpdk.org (Postfix) with ESMTP id CF9CF410FB;
	Fri,  7 May 2021 18:47:37 +0200 (CEST)
Received: from mga07.intel.com (mga07.intel.com [134.134.136.100])
 by mails.dpdk.org (Postfix) with ESMTP id 684CE4110A;
 Fri,  7 May 2021 18:47:35 +0200 (CEST)
IronPort-SDR: XYWF6DnQdfKBwouEESwBDdzoANCISBTPQ51EPCOeaAN7+WBJbi1vTR9lIXvMfZX5o/Ly4rPH1o
 c8NzcmrCTM4Q==
X-IronPort-AV: E=McAfee;i="6200,9189,9977"; a="262703053"
X-IronPort-AV: E=Sophos;i="5.82,280,1613462400"; d="scan'208";a="262703053"
Received: from fmsmga008.fm.intel.com ([10.253.24.58])
 by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;
 07 May 2021 09:47:33 -0700
IronPort-SDR: 3V7MlEzKAaYqcp174noC5DHJyKxwbbk0o9jBeMrJhC+n6NzBsgLeKvNHmrxbICIgF0tn+19k3+
 66/AyG5Df7JA==
X-IronPort-AV: E=Sophos;i="5.82,281,1613462400"; d="scan'208";a="431442530"
Received: from fyigit-mobl1.ger.corp.intel.com (HELO [10.213.210.230])
 ([10.213.210.230])
 by fmsmga008-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;
 07 May 2021 09:47:31 -0700
To: Michal Krawczyk <mk@semihalf.com>, dev@dpdk.org
Cc: ndagan@amazon.com, gtzalik@amazon.com, igorch@amazon.com,
 upstream@semihalf.com, stable@dpdk.org, Amit Bernstein <amitbern@amazon.com>
References: <20210505073348.6394-1-mk@semihalf.com>
 <20210506142526.28245-1-mk@semihalf.com>
 <20210506142526.28245-15-mk@semihalf.com>
From: Ferruh Yigit <ferruh.yigit@intel.com>
X-User: ferruhy
Message-ID: <e2a76596-7ab5-a5c0-9f76-d634b462e3d6@intel.com>
Date: Fri, 7 May 2021 17:47:29 +0100
MIME-Version: 1.0
In-Reply-To: <20210506142526.28245-15-mk@semihalf.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
Subject: Re: [dpdk-dev] [dpdk-stable] [PATCH v3 14/22] net/ena: indicate Rx
 RSS hash presence
X-BeenThere: dev@dpdk.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: DPDK patches and discussions <dev.dpdk.org>
List-Unsubscribe: <https://mails.dpdk.org/options/dev>,
 <mailto:dev-request@dpdk.org?subject=unsubscribe>
List-Archive: <http://mails.dpdk.org/archives/dev/>
List-Post: <mailto:dev@dpdk.org>
List-Help: <mailto:dev-request@dpdk.org?subject=help>
List-Subscribe: <https://mails.dpdk.org/listinfo/dev>,
 <mailto:dev-request@dpdk.org?subject=subscribe>
Errors-To: dev-bounces@dpdk.org
Sender: "dev" <dev-bounces@dpdk.org>

On 5/6/2021 3:25 PM, Michal Krawczyk wrote:
> To make it possible to the app to determine if the hash was calculated
> for the packet or not, the PKT_RX_RSS_HASH should be set in the mbuf's
> ol_flags.
> 
> As the PMD wasn't setting that, the application couldn't check if there
> is a hash in a proper way.
> 
> The hash is valid only if it's UDP or TCP and the IP packet wasn't
> fragmented.
> 
> Fixes: e5df9f33db00 ("net/ena: fix passing RSS hash to mbuf")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Michal Krawczyk <mk@semihalf.com>
> Reviewed-by: Igor Chauskin <igorch@amazon.com>
> Reviewed-by: Amit Bernstein <amitbern@amazon.com>
> ---
>  drivers/net/ena/ena_ethdev.c | 9 +++++++--
>  1 file changed, 7 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/net/ena/ena_ethdev.c b/drivers/net/ena/ena_ethdev.c
> index 6092288239..5d107775f4 100644
> --- a/drivers/net/ena/ena_ethdev.c
> +++ b/drivers/net/ena/ena_ethdev.c
> @@ -51,6 +51,8 @@
>  
>  #define ENA_MIN_RING_DESC	128
>  
> +#define ENA_PTYPE_HAS_HASH	(RTE_PTYPE_L4_TCP | RTE_PTYPE_L4_UDP)
> +
>  enum ethtool_stringset {
>  	ETH_SS_TEST             = 0,
>  	ETH_SS_STATS,
> @@ -314,6 +316,11 @@ static inline void ena_rx_mbuf_prepare(struct rte_mbuf *mbuf,
>  		else
>  			ol_flags |= PKT_RX_L4_CKSUM_GOOD;
>  
> +	if (likely((packet_type & ENA_PTYPE_HAS_HASH) && !ena_rx_ctx->frag)) {
> +		ol_flags |= PKT_RX_RSS_HASH;
> +		mbuf->hash.rss = ena_rx_ctx->hash;
> +	}

The driver should announce the 'DEV_RX_OFFLOAD_RSS_HASH' offload capability
first, and should set 'PKT_RX_RSS_HASH' only if application requests the
'DEV_RX_OFFLOAD_RSS_HASH'.


Normally this is an optimization to not always update the 'mbuf->hash.rss' but
wait for explicit request from application for it.

But there is no practical performance gain for some PMDs and they enable it even
user does not ask for it [1] (of course if RSS is enabled), if this is same for
'ena' you can do the same.

[1]
https://git.dpdk.org/dpdk/tree/drivers/net/ixgbe/ixgbe_ethdev.c?h=v21.05-rc2#n2384

> +
>  	mbuf->ol_flags = ol_flags;
>  	mbuf->packet_type = packet_type;
>  }
> @@ -2245,8 +2252,6 @@ static uint16_t eth_ena_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts,
>  			++rx_ring->rx_stats.bad_csum;
>  		}
>  
> -		mbuf->hash.rss = ena_rx_ctx.hash;
> -
>  		rx_pkts[completed] = mbuf;
>  		rx_ring->rx_stats.bytes += mbuf->pkt_len;
>  	}
>