[v7,1/9] ethdev: overwrite some comment related to RSS
Checks
Commit Message
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 | 33 ++++++++++++++++++---------------
lib/ethdev/rte_flow.h | 1 +
2 files changed, 19 insertions(+), 15 deletions(-)
Comments
在 2023/10/28 9:46, Jie Hai 写道:
> 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 | 33 ++++++++++++++++++---------------
> lib/ethdev/rte_flow.h | 1 +
> 2 files changed, 19 insertions(+), 15 deletions(-)
>
> diff --git a/lib/ethdev/rte_ethdev.h b/lib/ethdev/rte_ethdev.h
> index 2fd3cd808dbf..37fd5afef48a 100644
> --- a/lib/ethdev/rte_ethdev.h
> +++ b/lib/ethdev/rte_ethdev.h
> @@ -448,24 +448,27 @@ 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
Is this added the new comment?
Suggest that the "rss_key_len" field should be equal to the
hash_key_size from dev_info_get().
Because many PMDs, like, hns3, i40e, ice and mlx5, check it in driver
based on the condition that the rss_key_len field must be equal to the
hash_key_size when the rss_key is not NULL.
IMO, it is better that this check should be added in ethdev layer.
> + * 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
here "rss_key_len" should be "hash_key_size", right?
> + * is unreliable even the operation returns success.
s/even/even if
> + *
> + * 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 modify the comment: "Drivers are free to ignore the *rss_key_len*
and assume key length is 40 bytes. "
Actually, most of PMDs, like, hns3, i40e, mlx, do not configure RSS hash
key if rss_key is NULL and treat it as not updating the hash key.
> + */
> + 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 edefa34c10da..25f1dffd1f30 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 */
On 10/28/2023 3:41 AM, lihuisong (C) wrote:
>
> 在 2023/10/28 9:46, Jie Hai 写道:
>> 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 | 33 ++++++++++++++++++---------------
>> lib/ethdev/rte_flow.h | 1 +
>> 2 files changed, 19 insertions(+), 15 deletions(-)
>>
>> diff --git a/lib/ethdev/rte_ethdev.h b/lib/ethdev/rte_ethdev.h
>> index 2fd3cd808dbf..37fd5afef48a 100644
>> --- a/lib/ethdev/rte_ethdev.h
>> +++ b/lib/ethdev/rte_ethdev.h
>> @@ -448,24 +448,27 @@ 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
>>
> Is this added the new comment?
> Suggest that the "rss_key_len" field should be equal to the
> hash_key_size from dev_info_get().
> Because many PMDs, like, hns3, i40e, ice and mlx5, check it in driver
> based on the condition that the rss_key_len field must be equal to the
> hash_key_size when the rss_key is not NULL.
> IMO, it is better that this check should be added in ethdev layer.
>
+1 to add check in ethdev layer
>> + * 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
>
> here "rss_key_len" should be "hash_key_size", right?
>
>> + * is unreliable even the operation returns success.
> s/even/even if
>> + *
>> + * 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 modify the comment: "Drivers are free to ignore the *rss_key_len*
> and assume key length is 40 bytes. "
> Actually, most of PMDs, like, hns3, i40e, mlx, do not configure RSS hash
> key if rss_key is NULL and treat it as not updating the hash key.
>
This is not for the case where rss_key is NULL, most driver use
hardcoded 40 bytes as rss key len, so they don't check the rss_key_len,
only some drivers use not 40 bytes length, that is why above comment is
correct I think.
>> + */
>> + 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 edefa34c10da..25f1dffd1f30 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 */
@@ -448,24 +448,27 @@ 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
+ * *rss_key_len* bytes. If not meet these requirements, the query result
+ * is unreliable even the operation returns success.
+ *
+ * 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.
+ */
+ 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;
};
/*
@@ -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 */