[v5,01/40] ethdev: overwrite some comment related to RSS

Message ID 20231011092805.693171-2-haijie1@huawei.com (mailing list archive)
State Changes Requested, archived
Delegated to: Ferruh Yigit
Headers
Series support setting and querying RSS algorithms |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/loongarch-compilation warning apply patch failure

Commit Message

Jie Hai Oct. 11, 2023, 9:27 a.m. UTC
  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 | 29 ++++++++++++++---------------
 lib/ethdev/rte_flow.h   |  3 +++
 2 files changed, 17 insertions(+), 15 deletions(-)
  

Comments

Ferruh Yigit Oct. 11, 2023, 4:31 p.m. UTC | #1
On 10/11/2023 10:27 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 | 29 ++++++++++++++---------------
>  lib/ethdev/rte_flow.h   |  3 +++
>  2 files changed, 17 insertions(+), 15 deletions(-)
> 
> diff --git a/lib/ethdev/rte_ethdev.h b/lib/ethdev/rte_ethdev.h
> index 8542257721c9..b9e4e21189d2 100644
> --- a/lib/ethdev/rte_ethdev.h
> +++ b/lib/ethdev/rte_ethdev.h
> @@ -448,24 +448,23 @@ 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. */
> +	/**
> +	 * If used to query, the'rss_key_len' indicates the size of rss key of
> +	 * the hardware. And only when rss_key_len is not zero, the 'rss_key'
> +	 * is valid.
> +	 * If used to configure, rss_key_len indicates the length of the
> +	 * 'rss_key' if 'rss_key' is not empty.
>

Ahh, different APIs have different expectations :(
Can you please explicitly name the APIs, instead of "to query", "to
configure"?

And there is a note in original comment that *rss_key_len* is only
checked by i40e, rest assume this value as 40 bytes. New comment doesn't
have it.


> +	 */
> +	uint8_t *rss_key;
>  	uint8_t rss_key_len; /**< hash key length in bytes. */
> -	uint64_t rss_hf;     /**< Hash functions to apply - see below. */
> +	/**
> +	 * Indicating which type of packets and which part of the packets
> +	 * to apply for RSS hash, (see RTE_ETH_RSS_*).
>

There is something doesn't sound right from language perspective,
perhaps someone whose native language is English can help, what about:

"Indicates the type of packets or the specific part of packets to which
RSS hashing is to be applied."


> +	 * Setting *rss_hf* to zero disables the RSS feature.
> +	 */
> +	uint64_t rss_hf;
>  };
>  
>  /*
> diff --git a/lib/ethdev/rte_flow.h b/lib/ethdev/rte_flow.h
> index b385741fba6d..5d9e3c68af7b 100644
> --- a/lib/ethdev/rte_flow.h
> +++ b/lib/ethdev/rte_flow.h
> @@ -3227,6 +3227,9 @@ 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 */
  
Jie Hai Oct. 12, 2023, 2:03 a.m. UTC | #2
On 2023/10/12 0:31, Ferruh Yigit wrote:
> On 10/11/2023 10:27 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 | 29 ++++++++++++++---------------
>>   lib/ethdev/rte_flow.h   |  3 +++
>>   2 files changed, 17 insertions(+), 15 deletions(-)
>>
>> diff --git a/lib/ethdev/rte_ethdev.h b/lib/ethdev/rte_ethdev.h
>> index 8542257721c9..b9e4e21189d2 100644
>> --- a/lib/ethdev/rte_ethdev.h
>> +++ b/lib/ethdev/rte_ethdev.h
>> @@ -448,24 +448,23 @@ 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. */
>> +	/**
>> +	 * If used to query, the'rss_key_len' indicates the size of rss key of
>> +	 * the hardware. And only when rss_key_len is not zero, the 'rss_key'
>> +	 * is valid.
>> +	 * If used to configure, rss_key_len indicates the length of the
>> +	 * 'rss_key' if 'rss_key' is not empty.
>>
> 
> Ahh, different APIs have different expectations :(
> Can you please explicitly name the APIs, instead of "to query", "to
> configure"?
> 
> And there is a note in original comment that *rss_key_len* is only
> checked by i40e, rest assume this value as 40 bytes. New comment doesn't
> have it.
> 
A new version is show below:
   * In rte_eth_dev_rss_hash_conf_get(), the *rss_key_len* indicates the
   * size of rss key of the hardware. And only when *rss_key_len* is not
   * zero, the *rss_key* is valid.
   *
   * In rte_eth_dev_rss_hash_update() or rte_eth_dev_configure(), the
   * *rss_key_len* indicates the length of the *rss_key* in bytes of
   * the array pointed by *rss_key*. Drivers are free to ignore the
   * *rss_key_len* and assume key length is 40 bytes.

Please check it. 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. */
>> +	/**
>> +	 * Indicating which type of packets and which part of the packets
>> +	 * to apply for RSS hash, (see RTE_ETH_RSS_*).
>>
> 
> There is something doesn't sound right from language perspective,
> perhaps someone whose native language is English can help, what about:
> 
> "Indicates the type of packets or the specific part of packets to which
> RSS hashing is to be applied."
> 
> 
Better, I will change it.
>> +	 * Setting *rss_hf* to zero disables the RSS feature.
>> +	 */
>> +	uint64_t rss_hf;
>>   };
>>   
>>   /*
>> diff --git a/lib/ethdev/rte_flow.h b/lib/ethdev/rte_flow.h
>> index b385741fba6d..5d9e3c68af7b 100644
>> --- a/lib/ethdev/rte_flow.h
>> +++ b/lib/ethdev/rte_flow.h
>> @@ -3227,6 +3227,9 @@ 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 */
> 
> .
  
fengchengwen Oct. 12, 2023, 2:47 a.m. UTC | #3
On 2023/10/11 17:27, 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 | 29 ++++++++++++++---------------
>  lib/ethdev/rte_flow.h   |  3 +++
>  2 files changed, 17 insertions(+), 15 deletions(-)
> 
> diff --git a/lib/ethdev/rte_ethdev.h b/lib/ethdev/rte_ethdev.h
> index 8542257721c9..b9e4e21189d2 100644
> --- a/lib/ethdev/rte_ethdev.h
> +++ b/lib/ethdev/rte_ethdev.h
> @@ -448,24 +448,23 @@ 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. */
> +	/**
> +	 * If used to query, the'rss_key_len' indicates the size of rss key of

add one space in the'rss_key_len'

> +	 * the hardware. And only when rss_key_len is not zero, the 'rss_key'
> +	 * is valid.

Actually, there is another condition. When rss_key_len is greater than or equal to the actual key length,
the 'rss_key' is valid, most driver's return success even when rss_key_len lower than actual key length.

Suggest add there information, could be:
If used to query, the 'rss_key_len' should 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 'rss_key_len' bytes. If not meet these requirements, the query result is unreliable
even the query operation returns success.

> +	 * If used to configure, rss_key_len indicates the length of the
> +	 * 'rss_key' if 'rss_key' is not empty.
> +	 */
> +	uint8_t *rss_key;
>  	uint8_t rss_key_len; /**< hash key length in bytes. */
> -	uint64_t rss_hf;     /**< Hash functions to apply - see below. */
> +	/**
> +	 * Indicating which type of packets and which part of the packets
> +	 * to apply for RSS hash, (see RTE_ETH_RSS_*).
> +	 * Setting *rss_hf* to zero disables the RSS feature.
> +	 */
> +	uint64_t rss_hf;
>  };
>  
>  /*
> diff --git a/lib/ethdev/rte_flow.h b/lib/ethdev/rte_flow.h
> index b385741fba6d..5d9e3c68af7b 100644
> --- a/lib/ethdev/rte_flow.h
> +++ b/lib/ethdev/rte_flow.h
> @@ -3227,6 +3227,9 @@ struct rte_flow_query_count {
>   * Hash function types.
>   */
>  enum rte_eth_hash_function {
> +	/**
> +	 * DEFAULT means driver decides which hash algorithm to pick.
> +	 */

Suggest one line

>  	RTE_ETH_HASH_FUNCTION_DEFAULT = 0,
>  	RTE_ETH_HASH_FUNCTION_TOEPLITZ, /**< Toeplitz */
>  	RTE_ETH_HASH_FUNCTION_SIMPLE_XOR, /**< Simple XOR */
>
  

Patch

diff --git a/lib/ethdev/rte_ethdev.h b/lib/ethdev/rte_ethdev.h
index 8542257721c9..b9e4e21189d2 100644
--- a/lib/ethdev/rte_ethdev.h
+++ b/lib/ethdev/rte_ethdev.h
@@ -448,24 +448,23 @@  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. */
+	/**
+	 * If used to query, the'rss_key_len' indicates the size of rss key of
+	 * the hardware. And only when rss_key_len is not zero, the 'rss_key'
+	 * is valid.
+	 * If used to configure, rss_key_len indicates the length of the
+	 * 'rss_key' if 'rss_key' is not empty.
+	 */
+	uint8_t *rss_key;
 	uint8_t rss_key_len; /**< hash key length in bytes. */
-	uint64_t rss_hf;     /**< Hash functions to apply - see below. */
+	/**
+	 * Indicating which type of packets and which part of the packets
+	 * to apply for RSS hash, (see RTE_ETH_RSS_*).
+	 * Setting *rss_hf* to zero disables the RSS feature.
+	 */
+	uint64_t rss_hf;
 };
 
 /*
diff --git a/lib/ethdev/rte_flow.h b/lib/ethdev/rte_flow.h
index b385741fba6d..5d9e3c68af7b 100644
--- a/lib/ethdev/rte_flow.h
+++ b/lib/ethdev/rte_flow.h
@@ -3227,6 +3227,9 @@  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 */