All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ye Xiaolong <xiaolong.ye@intel.com>
To: Simei Su <simei.su@intel.com>
Cc: qi.z.zhang@intel.com, qiming.yang@intel.com, dev@dpdk.org
Subject: Re: [dpdk-dev] [PATCH v2] net/ice: fix flow destroy issue for RSS
Date: Thu, 14 Nov 2019 14:25:17 +0800	[thread overview]
Message-ID: <20191114062517.GE66623@intel.com> (raw)
In-Reply-To: <1573610609-175412-1-git-send-email-simei.su@intel.com>

On 11/13, Simei Su wrote:
>In ice_hash_create(), whatever the hash_function is, the filter_ptr->symm
>is always 0 and when we destroy the flow, the ice_rem_rss_cfg() is never
>carried out. So the destroy function never works well. The patch fixes
>this issue and at the same time distinguishes semanteme between simple_xor
>and symmetric_toeplitz.
>
>To fix this issue, the patch adds a new structure to include a flag to
>indicate if it is a simple_xor flow so that it's easier to remove the
>config when destroying the flow. The patch also simplifies code
>implementation logic in ice_hash_create().
>
>Fixes: 5ad3db8d4bdd ("net/ice: enable advanced RSS")
>
>Signed-off-by: Simei Su <simei.su@intel.com>
>---
> drivers/net/ice/ice_hash.c | 42 +++++++++++++++++++++++-------------------
> 1 file changed, 23 insertions(+), 19 deletions(-)
>
>diff --git a/drivers/net/ice/ice_hash.c b/drivers/net/ice/ice_hash.c
>index 57e7d55..d884343 100644
>--- a/drivers/net/ice/ice_hash.c
>+++ b/drivers/net/ice/ice_hash.c
>@@ -41,6 +41,11 @@ struct rss_meta {
> 	uint8_t hash_function;
> };
> 
>+struct ice_hash_flow_cfg {
>+	bool simple_xor;
>+	struct ice_rss_cfg rss_cfg;
>+};
>+
> static int
> ice_hash_init(struct ice_adapter *ad);
> 
>@@ -452,14 +457,14 @@ struct ice_hash_match_type ice_hash_type_list[] = {
> 	struct ice_vsi *vsi = pf->main_vsi;
> 	int ret;
> 	uint32_t reg;
>-	struct ice_rss_cfg *filter_ptr;
>+	struct ice_hash_flow_cfg *filter_ptr;
> 
> 	uint32_t headermask = ((struct rss_meta *)meta)->pkt_hdr;
> 	uint64_t hash_field = ((struct rss_meta *)meta)->hash_flds;
> 	uint8_t hash_function = ((struct rss_meta *)meta)->hash_function;
> 
> 	filter_ptr = rte_zmalloc("ice_rss_filter",
>-				sizeof(struct ice_rss_cfg), 0);
>+				sizeof(struct ice_hash_flow_cfg), 0);
> 	if (!filter_ptr) {
> 		rte_flow_error_set(error, EINVAL,
> 				RTE_FLOW_ERROR_TYPE_HANDLE, NULL,
>@@ -474,19 +479,20 @@ struct ice_hash_match_type ice_hash_type_list[] = {
> 			(2 << VSIQF_HASH_CTL_HASH_SCHEME_S);
> 		ICE_WRITE_REG(hw, VSIQF_HASH_CTL(vsi->vsi_id), reg);
> 
>-		filter_ptr->symm = 0;
>+		filter_ptr->simple_xor = 1;
> 
> 		goto out;
>-	} else if (hash_function == RTE_ETH_HASH_FUNCTION_SYMMETRIC_TOEPLITZ) {
>-		ret = ice_add_rss_cfg(hw, vsi->idx, hash_field, headermask, 1);
>-		if (ret) {
>-			rte_flow_error_set(error, EINVAL,
>-					RTE_FLOW_ERROR_TYPE_HANDLE, NULL,
>-					"rss flow create fail");
>-			goto error;
>-		}
> 	} else {
>-		ret = ice_add_rss_cfg(hw, vsi->idx, hash_field, headermask, 0);
>+		filter_ptr->rss_cfg.packet_hdr = headermask;
>+		filter_ptr->rss_cfg.hashed_flds = hash_field;
>+		filter_ptr->rss_cfg.symm =
>+			(hash_function ==
>+				RTE_ETH_HASH_FUNCTION_SYMMETRIC_TOEPLITZ);
>+
>+		ret = ice_add_rss_cfg(hw, vsi->idx,
>+				filter_ptr->rss_cfg.hashed_flds,
>+				filter_ptr->rss_cfg.packet_hdr,
>+				filter_ptr->rss_cfg.symm);
> 		if (ret) {
> 			rte_flow_error_set(error, EINVAL,
> 					RTE_FLOW_ERROR_TYPE_HANDLE, NULL,
>@@ -495,9 +501,6 @@ struct ice_hash_match_type ice_hash_type_list[] = {
> 		}
> 	}
> 
>-	filter_ptr->packet_hdr = headermask;
>-	filter_ptr->hashed_flds = hash_field;
>-
> out:
> 	flow->rule = filter_ptr;
> 	rte_free(meta);
>@@ -519,11 +522,11 @@ struct ice_hash_match_type ice_hash_type_list[] = {
> 	struct ice_vsi *vsi = pf->main_vsi;
> 	int ret;
> 	uint32_t reg;
>-	struct ice_rss_cfg *filter_ptr;
>+	struct ice_hash_flow_cfg *filter_ptr;
> 
>-	filter_ptr = (struct ice_rss_cfg *)flow->rule;
>+	filter_ptr = (struct ice_hash_flow_cfg *)flow->rule;
> 
>-	if (filter_ptr->symm == 0) {
>+	if (filter_ptr->simple_xor == 1) {
> 		/* Return to symmetric_toeplitz state. */
> 		reg = ICE_READ_REG(hw, VSIQF_HASH_CTL(vsi->vsi_id));
> 		reg = (reg & (~VSIQF_HASH_CTL_HASH_SCHEME_M)) |
>@@ -531,7 +534,8 @@ struct ice_hash_match_type ice_hash_type_list[] = {
> 		ICE_WRITE_REG(hw, VSIQF_HASH_CTL(vsi->vsi_id), reg);
> 	} else {
> 		ret = ice_rem_rss_cfg(hw, vsi->idx,
>-			filter_ptr->hashed_flds, filter_ptr->packet_hdr);
>+				filter_ptr->rss_cfg.hashed_flds,
>+				filter_ptr->rss_cfg.packet_hdr);
> 		if (ret) {
> 			rte_flow_error_set(error, EINVAL,
> 					RTE_FLOW_ERROR_TYPE_HANDLE, NULL,
>-- 
>1.8.3.1
>

Applied to dpdk-next-net-intel, Thanks.

      parent reply	other threads:[~2019-11-14  6:28 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-11-12  8:12 [dpdk-dev] [PATCH] net/ice: add a structure for RSS Simei Su
2019-11-12 13:37 ` Zhang, Qi Z
2019-11-13  1:12   ` Su, Simei
2019-11-13  2:03 ` [dpdk-dev] [PATCH v2] net/ice: fix flow destroy issue " Simei Su
2019-11-14  4:52   ` Zhang, Qi Z
2019-11-14  6:25   ` Ye Xiaolong [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20191114062517.GE66623@intel.com \
    --to=xiaolong.ye@intel.com \
    --cc=dev@dpdk.org \
    --cc=qi.z.zhang@intel.com \
    --cc=qiming.yang@intel.com \
    --cc=simei.su@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.