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 C1C2B43268;
	Thu,  2 Nov 2023 04:29:40 +0100 (CET)
Received: from mails.dpdk.org (localhost [127.0.0.1])
	by mails.dpdk.org (Postfix) with ESMTP id 4FB8140294;
	Thu,  2 Nov 2023 04:29:40 +0100 (CET)
Received: from szxga02-in.huawei.com (szxga02-in.huawei.com [45.249.212.188])
 by mails.dpdk.org (Postfix) with ESMTP id A71574028C
 for <dev@dpdk.org>; Thu,  2 Nov 2023 04:29:38 +0100 (CET)
Received: from kwepemi500020.china.huawei.com (unknown [172.30.72.55])
 by szxga02-in.huawei.com (SkyGuard) with ESMTP id 4SLTrX24lPzVk4P;
 Thu,  2 Nov 2023 11:29:32 +0800 (CST)
Received: from [10.67.121.175] (10.67.121.175) by
 kwepemi500020.china.huawei.com (7.221.188.8) with Microsoft SMTP Server
 (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id
 15.1.2507.31; Thu, 2 Nov 2023 11:29:34 +0800
Message-ID: <aca9fee5-f95d-7e46-99e8-009100cd0ae6@huawei.com>
Date: Thu, 2 Nov 2023 11:29:34 +0800
MIME-Version: 1.0
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101
 Thunderbird/91.9.1
Subject: Re: [PATCH v8 01/10] ethdev: overwrite some comment related to RSS
To: Ferruh Yigit <ferruh.yigit@amd.com>, <dev@dpdk.org>, Thomas Monjalon
 <thomas@monjalon.net>, Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>, Ori
 Kam <orika@nvidia.com>
CC: <lihuisong@huawei.com>, <fengchengwen@huawei.com>,
 <liudongdong3@huawei.com>
References: <20230315110033.30143-1-liudongdong3@huawei.com>
 <20231101074039.3088716-1-haijie1@huawei.com>
 <20231101074039.3088716-2-haijie1@huawei.com>
 <53497412-9211-47c1-a57a-27ee19ada312@amd.com>
From: Jie Hai <haijie1@huawei.com>
In-Reply-To: <53497412-9211-47c1-a57a-27ee19ada312@amd.com>
Content-Type: text/plain; charset="UTF-8"; format=flowed
Content-Transfer-Encoding: 7bit
X-Originating-IP: [10.67.121.175]
X-ClientProxiedBy: dggems703-chm.china.huawei.com (10.3.19.180) To
 kwepemi500020.china.huawei.com (7.221.188.8)
X-CFilter-Loop: Reflected
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

On 2023/11/1 21:13, Ferruh Yigit wrote:
> On 11/1/2023 7:40 AM, Jie Hai wrote:
>> 1. overwrite the comments of fields of 'rte_eth_rss_conf'.
>> 2. Add comments for RTE_ETH_HASH_FUNCTION_DEFAULT.
>>
>> Signed-off-by: Jie Hai <haijie1@huawei.com>
>> ---
>>   lib/ethdev/rte_ethdev.h | 34 +++++++++++++++++++---------------
>>   lib/ethdev/rte_flow.h   |  1 +
>>   2 files changed, 20 insertions(+), 15 deletions(-)
>>
>> diff --git a/lib/ethdev/rte_ethdev.h b/lib/ethdev/rte_ethdev.h
>> index a53dd5a1efec..343a134fdd12 100644
>> --- a/lib/ethdev/rte_ethdev.h
>> +++ b/lib/ethdev/rte_ethdev.h
>> @@ -448,24 +448,28 @@ struct rte_vlan_filter_conf {
>>   /**
>>    * A structure used to configure the Receive Side Scaling (RSS) feature
>>    * of an Ethernet port.
>> - * If not NULL, the *rss_key* pointer of the *rss_conf* structure points
>> - * to an array holding the RSS key to use for hashing specific header
>> - * fields of received packets. The length of this array should be indicated
>> - * by *rss_key_len* below. Otherwise, a default random hash key is used by
>> - * the device driver.
>> - *
>> - * The *rss_key_len* field of the *rss_conf* structure indicates the length
>> - * in bytes of the array pointed by *rss_key*. To be compatible, this length
>> - * will be checked in i40e only. Others assume 40 bytes to be used as before.
>> - *
>> - * The *rss_hf* field of the *rss_conf* structure indicates the different
>> - * types of IPv4/IPv6 packets to which the RSS hashing must be applied.
>> - * Supplying an *rss_hf* equal to zero disables the RSS feature.
>>    */
>>   struct rte_eth_rss_conf {
>> -	uint8_t *rss_key;    /**< If not NULL, 40-byte hash key. */
>> +	/**
>> +	 * In rte_eth_dev_rss_hash_conf_get(), the *rss_key_len* should be
>> +	 * greater than or equal to the *hash_key_size* which get from
>> +	 * rte_eth_dev_info_get() API. And the *rss_key* should contain at least
>> +	 * *hash_key_size* bytes. If not meet these requirements, the query
>> +	 * result is unreliable even if the operation returns success.
>> +	 *
>> +	 * In rte_eth_dev_rss_hash_update() or rte_eth_dev_configure(), if
>> +	 * *rss_key* is not NULL, the *rss_key_len* indicates the length of the
>> +	 * *rss_key* in bytes of the array pointed by *rss_key*,
>>
> 
> I think it is sufficient to say "length of the *rss_key* in bytes".
> 
> 
>>           and it should
>> +	 * be equal to *hash_key_size*.
>>
> 
> I don't know if we missed something here, first driver reports key size
> via 'rte_eth_dev_info_get()::hash_key_size', later other APIs require
> 'rss_key_len' parameter that should be same as 'hash_key_size', as
> driver already know this parameter why we are requesting it back from
> the application?
> 
To unify user behavior and verify user behavior at the ethdev level.

> 
>>>           Otherwise, drivers are free to use a
>> +	 * random or a default key or to ignore this configuration.
>> +	 */
>>
> 
> 
> I guess above clause describes when 'rss_key' is null, can you please
> clarify it as following, perhaps with a line break:
> "If *rss_key* is NULL, drivers are free to use a random or a default key."
> 
> 
> For the "Drivers are free to ignore the *rss_key_len* and assume key
> length is 40 bytes." part, as checks in ethdev layer now forces
> application to provide 'rss_key_len' as 'hash_key_size', I think we can
> remove above, as application will provide 40 bytes when it is the case.
> 
> My concern is this check now can break some applications, because
> 'rss_key_len' wasn't mandatory previously, but it became now.
> 
The testpmd already use 'rte_eth_dev_info_get()::hash_key_size' to
correct the rss_key_len.
If hash_key_size is zero or too big for user's rss_key, it report errors.
Otherwise, it use hash_key_size as rss_key_len.
If all drivers use this app to test rss configuration, the check has no 
problem.

The test_link_bonding_rssconf use 40 Bytes rss_key, we know that is 
valid for now.

> 
> Overall it becomes:
> "
> In rte_eth_dev_rss_hash_update() or rte_eth_dev_configure(), if
> *rss_key* is not NULL, the *rss_key_len* indicates the length of the
> *rss_key* in bytes and it should be equal to *hash_key_size*.
> If *rss_key* is NULL, drivers are free to use a random or a default key.
> "
> 
ok, thanks.
> 
> 
>> +	uint8_t *rss_key;
>>   	uint8_t rss_key_len; /**< hash key length in bytes. */
>> -	uint64_t rss_hf;     /**< Hash functions to apply - see below. */
>> +	/**
>> +	 * Indicates the type of packets or the specific part of packets to
>> +	 * which RSS hashing is to be applied.
>> +	 */
>> +	uint64_t rss_hf;
>>   };
>>   
>>   /*
>> diff --git a/lib/ethdev/rte_flow.h b/lib/ethdev/rte_flow.h
>> index c16fe8c21f2f..751c29a0f3f3 100644
>> --- a/lib/ethdev/rte_flow.h
>> +++ b/lib/ethdev/rte_flow.h
>> @@ -3226,6 +3226,7 @@ struct rte_flow_query_count {
>>    * Hash function types.
>>    */
>>   enum rte_eth_hash_function {
>> +	/** DEFAULT means driver decides which hash algorithm to pick. */
>>   	RTE_ETH_HASH_FUNCTION_DEFAULT = 0,
>>   	RTE_ETH_HASH_FUNCTION_TOEPLITZ, /**< Toeplitz */
>>   	RTE_ETH_HASH_FUNCTION_SIMPLE_XOR, /**< Simple XOR */
> 
> .