From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: 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 ; 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: 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 , , Thomas Monjalon , Andrew Rybchenko , Ori Kam CC: , , 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 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 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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 >> --- >> 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 */ > > .