DPDK patches and discussions
 help / color / Atom feed
* [dpdk-dev] [PATCH v1 0/2] refactor and clean FDIR
@ 2020-09-08  7:39 Zhirun Yan
  2020-09-08  7:39 ` [dpdk-dev] [PATCH v1 1/2] net/ice: refactor FDIR set conf function Zhirun Yan
                   ` (3 more replies)
  0 siblings, 4 replies; 16+ messages in thread
From: Zhirun Yan @ 2020-09-08  7:39 UTC (permalink / raw)
  To: qi.z.zhang, dev; +Cc: yahui.cao, xiao.w.wang, simei.su, junfeng.guo, Zhirun Yan

main changes:

1. Refactor FDIR configure function.
2. Merge flow seg info for tun/non-tun, distinguish inner/outer input_set.
3. Remove redundant segment info.


Zhirun Yan (2):
  net/ice: refactor FDIR set conf function
  net/ice: merge inner/outer flow seg info for FDIR

 drivers/net/ice/ice_ethdev.h      |  1 +
 drivers/net/ice/ice_fdir_filter.c | 99 ++++++++++++++++++-------------
 2 files changed, 58 insertions(+), 42 deletions(-)

-- 
2.25.1


^ permalink raw reply	[flat|nested] 16+ messages in thread

* [dpdk-dev] [PATCH v1 1/2] net/ice: refactor FDIR set conf function
  2020-09-08  7:39 [dpdk-dev] [PATCH v1 0/2] refactor and clean FDIR Zhirun Yan
@ 2020-09-08  7:39 ` Zhirun Yan
  2020-09-08  7:39 ` [dpdk-dev] [PATCH v1 2/2] net/ice: merge inner/outer flow seg info for FDIR Zhirun Yan
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 16+ messages in thread
From: Zhirun Yan @ 2020-09-08  7:39 UTC (permalink / raw)
  To: qi.z.zhang, dev; +Cc: yahui.cao, xiao.w.wang, simei.su, junfeng.guo, Zhirun Yan

The original set conf function in FDIR was very long. Refactor to
increase readability to make it clearer and allow for more convenient
further changes.

No functional change here.

Signed-off-by: Zhirun Yan <zhirun.yan@intel.com>
---
 drivers/net/ice/ice_fdir_filter.c | 54 ++++++++++++++++++-------------
 1 file changed, 31 insertions(+), 23 deletions(-)

diff --git a/drivers/net/ice/ice_fdir_filter.c b/drivers/net/ice/ice_fdir_filter.c
index 88c9bb03d..593dfd0e2 100644
--- a/drivers/net/ice/ice_fdir_filter.c
+++ b/drivers/net/ice/ice_fdir_filter.c
@@ -964,30 +964,10 @@ ice_fdir_input_set_parse(uint64_t inset, enum ice_flow_field *field)
 	}
 }
 
-static int
-ice_fdir_input_set_conf(struct ice_pf *pf, enum ice_fltr_ptype flow,
-			uint64_t input_set, enum ice_fdir_tunnel_type ttype)
+static void
+ice_fdir_input_set_hdrs(enum ice_fltr_ptype flow, struct ice_flow_seg_info *seg,
+			enum ice_fdir_tunnel_type ttype)
 {
-	struct ice_flow_seg_info *seg;
-	struct ice_flow_seg_info *seg_tun = NULL;
-	enum ice_flow_field field[ICE_FLOW_FIELD_IDX_MAX];
-	bool is_tunnel;
-	int i, ret;
-
-	if (!input_set)
-		return -EINVAL;
-
-	seg = (struct ice_flow_seg_info *)
-		ice_malloc(hw, sizeof(*seg));
-	if (!seg) {
-		PMD_DRV_LOG(ERR, "No memory can be allocated");
-		return -ENOMEM;
-	}
-
-	for (i = 0; i < ICE_FLOW_FIELD_IDX_MAX; i++)
-		field[i] = ICE_FLOW_FIELD_IDX_MAX;
-	ice_fdir_input_set_parse(input_set, field);
-
 	switch (flow) {
 	case ICE_FLTR_PTYPE_NONF_IPV4_UDP:
 		ICE_FLOW_SET_HDRS(seg, ICE_FLOW_SEG_HDR_UDP |
@@ -1063,6 +1043,34 @@ ice_fdir_input_set_conf(struct ice_pf *pf, enum ice_fltr_ptype flow,
 		PMD_DRV_LOG(ERR, "not supported filter type.");
 		break;
 	}
+}
+
+static int
+ice_fdir_input_set_conf(struct ice_pf *pf, enum ice_fltr_ptype flow,
+			uint64_t input_set, enum ice_fdir_tunnel_type ttype)
+{
+	struct ice_flow_seg_info *seg;
+	struct ice_flow_seg_info *seg_tun = NULL;
+	enum ice_flow_field field[ICE_FLOW_FIELD_IDX_MAX];
+	bool is_tunnel;
+	int i, ret;
+
+	if (!input_set)
+		return -EINVAL;
+
+	seg = (struct ice_flow_seg_info *)
+		ice_malloc(hw, sizeof(*seg));
+	if (!seg) {
+		PMD_DRV_LOG(ERR, "No memory can be allocated");
+		return -ENOMEM;
+	}
+
+	for (i = 0; i < ICE_FLOW_FIELD_IDX_MAX; i++)
+		field[i] = ICE_FLOW_FIELD_IDX_MAX;
+
+	ice_fdir_input_set_parse(input_set, field);
+
+	ice_fdir_input_set_hdrs(flow, seg, ttype);
 
 	for (i = 0; field[i] != ICE_FLOW_FIELD_IDX_MAX; i++) {
 		ice_flow_set_fld(seg, field[i],
-- 
2.25.1


^ permalink raw reply	[flat|nested] 16+ messages in thread

* [dpdk-dev] [PATCH v1 2/2] net/ice: merge inner/outer flow seg info for FDIR
  2020-09-08  7:39 [dpdk-dev] [PATCH v1 0/2] refactor and clean FDIR Zhirun Yan
  2020-09-08  7:39 ` [dpdk-dev] [PATCH v1 1/2] net/ice: refactor FDIR set conf function Zhirun Yan
@ 2020-09-08  7:39 ` Zhirun Yan
  2020-09-11  5:53   ` Zhang, Qi Z
  2020-09-14  3:05 ` [dpdk-dev] [PATCH v1 0/2] refactor and clean FDIR Zhirun Yan
  2020-09-15  5:27 ` [dpdk-dev] [PATCH v3 " Zhirun Yan
  3 siblings, 1 reply; 16+ messages in thread
From: Zhirun Yan @ 2020-09-08  7:39 UTC (permalink / raw)
  To: qi.z.zhang, dev; +Cc: yahui.cao, xiao.w.wang, simei.su, junfeng.guo, Zhirun Yan

For tunnel and non-tunnel packets, it can share the same seg_tun info.
seg_tun[1] can be used for supporting inner fields with tunnel flow rule
or for non-tunnel packets, seg_tun[0] only used for tunnel outer part.
Add outer_input_set to distinguish inner/outer input set. So we can
identify different fields in outer or inner part.

Signed-off-by: Zhirun Yan <zhirun.yan@intel.com>
---
 drivers/net/ice/ice_ethdev.h      |  1 +
 drivers/net/ice/ice_fdir_filter.c | 65 +++++++++++++++++--------------
 2 files changed, 37 insertions(+), 29 deletions(-)

diff --git a/drivers/net/ice/ice_ethdev.h b/drivers/net/ice/ice_ethdev.h
index 393dfeab1..6bc6dfbfb 100644
--- a/drivers/net/ice/ice_ethdev.h
+++ b/drivers/net/ice/ice_ethdev.h
@@ -285,6 +285,7 @@ struct ice_fdir_filter_conf {
 	struct rte_flow_action_count act_count;
 
 	uint64_t input_set;
+	uint64_t outer_input_set; /* only for tunnel packets outer fields */
 };
 
 #define ICE_MAX_FDIR_FILTER_NUM		(1024 * 16)
diff --git a/drivers/net/ice/ice_fdir_filter.c b/drivers/net/ice/ice_fdir_filter.c
index 593dfd0e2..24fbcdd60 100644
--- a/drivers/net/ice/ice_fdir_filter.c
+++ b/drivers/net/ice/ice_fdir_filter.c
@@ -1047,51 +1047,59 @@ ice_fdir_input_set_hdrs(enum ice_fltr_ptype flow, struct ice_flow_seg_info *seg,
 
 static int
 ice_fdir_input_set_conf(struct ice_pf *pf, enum ice_fltr_ptype flow,
-			uint64_t input_set, enum ice_fdir_tunnel_type ttype)
+			uint64_t inner_input_set, uint64_t outer_input_set,
+			enum ice_fdir_tunnel_type ttype)
 {
 	struct ice_flow_seg_info *seg;
 	struct ice_flow_seg_info *seg_tun = NULL;
 	enum ice_flow_field field[ICE_FLOW_FIELD_IDX_MAX];
+	uint64_t input_set;
 	bool is_tunnel;
-	int i, ret;
+	int k, i, ret = 0;
 
-	if (!input_set)
+	if (!(inner_input_set | outer_input_set))
 		return -EINVAL;
 
-	seg = (struct ice_flow_seg_info *)
-		ice_malloc(hw, sizeof(*seg));
-	if (!seg) {
+	seg_tun = (struct ice_flow_seg_info *)
+		ice_malloc(hw, sizeof(*seg_tun) * ICE_FD_HW_SEG_MAX);
+	if (!seg_tun) {
 		PMD_DRV_LOG(ERR, "No memory can be allocated");
 		return -ENOMEM;
 	}
 
-	for (i = 0; i < ICE_FLOW_FIELD_IDX_MAX; i++)
-		field[i] = ICE_FLOW_FIELD_IDX_MAX;
+	/* use seg_tun[1] to record tunnel inner part or non-tunnel */
+	for (k = ICE_FD_HW_SEG_TUN; k >= 0; k--) {
+		seg = &seg_tun[k];
+		if (k == ICE_FD_HW_SEG_TUN) {
+			if (inner_input_set == 0)
+				continue;
+			input_set = inner_input_set;
+		} else {
+			if (outer_input_set == 0)
+				break;
+			input_set = outer_input_set;
+		}
+
+		for (i = 0; i < ICE_FLOW_FIELD_IDX_MAX; i++)
+			field[i] = ICE_FLOW_FIELD_IDX_MAX;
 
-	ice_fdir_input_set_parse(input_set, field);
+		ice_fdir_input_set_parse(input_set, field);
 
-	ice_fdir_input_set_hdrs(flow, seg, ttype);
+		ice_fdir_input_set_hdrs(flow, seg, ttype);
 
-	for (i = 0; field[i] != ICE_FLOW_FIELD_IDX_MAX; i++) {
-		ice_flow_set_fld(seg, field[i],
-				 ICE_FLOW_FLD_OFF_INVAL,
-				 ICE_FLOW_FLD_OFF_INVAL,
-				 ICE_FLOW_FLD_OFF_INVAL, false);
+		for (i = 0; field[i] != ICE_FLOW_FIELD_IDX_MAX; i++) {
+			ice_flow_set_fld(seg, field[i],
+					 ICE_FLOW_FLD_OFF_INVAL,
+					 ICE_FLOW_FLD_OFF_INVAL,
+					 ICE_FLOW_FLD_OFF_INVAL, false);
+		}
 	}
 
 	is_tunnel = ice_fdir_is_tunnel_profile(ttype);
 	if (!is_tunnel) {
 		ret = ice_fdir_hw_tbl_conf(pf, pf->main_vsi, pf->fdir.fdir_vsi,
-					   seg, flow, false);
+					   seg_tun + 1, flow, false);
 	} else {
-		seg_tun = (struct ice_flow_seg_info *)
-			ice_malloc(hw, sizeof(*seg) * ICE_FD_HW_SEG_MAX);
-		if (!seg_tun) {
-			PMD_DRV_LOG(ERR, "No memory can be allocated");
-			rte_free(seg);
-			return -ENOMEM;
-		}
-		rte_memcpy(&seg_tun[1], seg, sizeof(*seg));
 		ret = ice_fdir_hw_tbl_conf(pf, pf->main_vsi, pf->fdir.fdir_vsi,
 					   seg_tun, flow, true);
 	}
@@ -1099,9 +1107,7 @@ ice_fdir_input_set_conf(struct ice_pf *pf, enum ice_fltr_ptype flow,
 	if (!ret) {
 		return ret;
 	} else if (ret < 0) {
-		rte_free(seg);
-		if (is_tunnel)
-			rte_free(seg_tun);
+		rte_free(seg_tun);
 		return (ret == -EEXIST) ? 0 : ret;
 	} else {
 		return ret;
@@ -1311,7 +1317,8 @@ ice_fdir_create_filter(struct ice_adapter *ad,
 	is_tun = ice_fdir_is_tunnel_profile(filter->tunnel_type);
 
 	ret = ice_fdir_input_set_conf(pf, filter->input.flow_type,
-			filter->input_set, filter->tunnel_type);
+				      filter->input_set, filter->outer_input_set,
+				      filter->tunnel_type);
 	if (ret) {
 		rte_flow_error_set(error, -ret,
 				   RTE_FLOW_ERROR_TYPE_HANDLE, NULL,
@@ -2106,7 +2113,7 @@ ice_fdir_parse(struct ice_adapter *ad,
 	ret = ice_fdir_parse_pattern(ad, pattern, error, filter);
 	if (ret)
 		goto error;
-	input_set = filter->input_set;
+	input_set = filter->input_set | filter->outer_input_set;
 	if (!input_set || input_set & ~item->input_set_mask) {
 		rte_flow_error_set(error, EINVAL,
 				   RTE_FLOW_ERROR_TYPE_ITEM_SPEC,
-- 
2.25.1


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [dpdk-dev] [PATCH v1 2/2] net/ice: merge inner/outer flow seg info for FDIR
  2020-09-08  7:39 ` [dpdk-dev] [PATCH v1 2/2] net/ice: merge inner/outer flow seg info for FDIR Zhirun Yan
@ 2020-09-11  5:53   ` Zhang, Qi Z
  0 siblings, 0 replies; 16+ messages in thread
From: Zhang, Qi Z @ 2020-09-11  5:53 UTC (permalink / raw)
  To: Yan, Zhirun, dev; +Cc: Cao, Yahui, Wang, Xiao W, Su, Simei, Guo, Junfeng



> -----Original Message-----
> From: Yan, Zhirun <zhirun.yan@intel.com>
> Sent: Tuesday, September 8, 2020 3:40 PM
> To: Zhang, Qi Z <qi.z.zhang@intel.com>; dev@dpdk.org
> Cc: Cao, Yahui <yahui.cao@intel.com>; Wang, Xiao W
> <xiao.w.wang@intel.com>; Su, Simei <simei.su@intel.com>; Guo, Junfeng
> <junfeng.guo@intel.com>; Yan, Zhirun <zhirun.yan@intel.com>
> Subject: [PATCH v1 2/2] net/ice: merge inner/outer flow seg info for FDIR
> 
> For tunnel and non-tunnel packets, it can share the same seg_tun info.
> seg_tun[1] can be used for supporting inner fields with tunnel flow rule or for
> non-tunnel packets, seg_tun[0] only used for tunnel outer part.
> Add outer_input_set to distinguish inner/outer input set. So we can identify
> different fields in outer or inner part.
> 
> Signed-off-by: Zhirun Yan <zhirun.yan@intel.com>
> ---
>  drivers/net/ice/ice_ethdev.h      |  1 +
>  drivers/net/ice/ice_fdir_filter.c | 65 +++++++++++++++++--------------
>  2 files changed, 37 insertions(+), 29 deletions(-)
> 
> diff --git a/drivers/net/ice/ice_ethdev.h b/drivers/net/ice/ice_ethdev.h index
> 393dfeab1..6bc6dfbfb 100644
> --- a/drivers/net/ice/ice_ethdev.h
> +++ b/drivers/net/ice/ice_ethdev.h
> @@ -285,6 +285,7 @@ struct ice_fdir_filter_conf {
>  	struct rte_flow_action_count act_count;
> 
>  	uint64_t input_set;
> +	uint64_t outer_input_set; /* only for tunnel packets outer fields */
>  };
> 
>  #define ICE_MAX_FDIR_FILTER_NUM		(1024 * 16)
> diff --git a/drivers/net/ice/ice_fdir_filter.c b/drivers/net/ice/ice_fdir_filter.c
> index 593dfd0e2..24fbcdd60 100644
> --- a/drivers/net/ice/ice_fdir_filter.c
> +++ b/drivers/net/ice/ice_fdir_filter.c
> @@ -1047,51 +1047,59 @@ ice_fdir_input_set_hdrs(enum ice_fltr_ptype
> flow, struct ice_flow_seg_info *seg,
> 
>  static int
>  ice_fdir_input_set_conf(struct ice_pf *pf, enum ice_fltr_ptype flow,
> -			uint64_t input_set, enum ice_fdir_tunnel_type ttype)
> +			uint64_t inner_input_set, uint64_t outer_input_set,
> +			enum ice_fdir_tunnel_type ttype)
>  {
>  	struct ice_flow_seg_info *seg;
>  	struct ice_flow_seg_info *seg_tun = NULL;
>  	enum ice_flow_field field[ICE_FLOW_FIELD_IDX_MAX];
> +	uint64_t input_set;
>  	bool is_tunnel;
> -	int i, ret;
> +	int k, i, ret = 0;
> 
> -	if (!input_set)
> +	if (!(inner_input_set | outer_input_set))
>  		return -EINVAL;
> 
> -	seg = (struct ice_flow_seg_info *)
> -		ice_malloc(hw, sizeof(*seg));
> -	if (!seg) {
> +	seg_tun = (struct ice_flow_seg_info *)
> +		ice_malloc(hw, sizeof(*seg_tun) * ICE_FD_HW_SEG_MAX);
> +	if (!seg_tun) {
>  		PMD_DRV_LOG(ERR, "No memory can be allocated");
>  		return -ENOMEM;
>  	}
> 
> -	for (i = 0; i < ICE_FLOW_FIELD_IDX_MAX; i++)
> -		field[i] = ICE_FLOW_FIELD_IDX_MAX;
> +	/* use seg_tun[1] to record tunnel inner part or non-tunnel */
> +	for (k = ICE_FD_HW_SEG_TUN; k >= 0; k--) {

Why we have to iterate in inverse order, can we start from 0?

> +		seg = &seg_tun[k];
> +		if (k == ICE_FD_HW_SEG_TUN) {
> +			if (inner_input_set == 0)
> +				continue;
> +			input_set = inner_input_set;
> +		} else {
> +			if (outer_input_set == 0)
> +				break;
> +			input_set = outer_input_set;
> +		}

above code can be simplified as below?

	for (....) {
		inputset = (k == ICE_FD_HW_SEG_TUN) ? inner_input_set : outer_input_set;
		if (inputset == 0)
			continue;
		....
	

Btw, and I'm ok with all other changes.


> +
> +		for (i = 0; i < ICE_FLOW_FIELD_IDX_MAX; i++)
> +			field[i] = ICE_FLOW_FIELD_IDX_MAX;
> 
> -	ice_fdir_input_set_parse(input_set, field);
> +		ice_fdir_input_set_parse(input_set, field);
> 
> -	ice_fdir_input_set_hdrs(flow, seg, ttype);
> +		ice_fdir_input_set_hdrs(flow, seg, ttype);
> 
> -	for (i = 0; field[i] != ICE_FLOW_FIELD_IDX_MAX; i++) {
> -		ice_flow_set_fld(seg, field[i],
> -				 ICE_FLOW_FLD_OFF_INVAL,
> -				 ICE_FLOW_FLD_OFF_INVAL,
> -				 ICE_FLOW_FLD_OFF_INVAL, false);
> +		for (i = 0; field[i] != ICE_FLOW_FIELD_IDX_MAX; i++) {
> +			ice_flow_set_fld(seg, field[i],
> +					 ICE_FLOW_FLD_OFF_INVAL,
> +					 ICE_FLOW_FLD_OFF_INVAL,
> +					 ICE_FLOW_FLD_OFF_INVAL, false);
> +		}
>  	}
> 
>  	is_tunnel = ice_fdir_is_tunnel_profile(ttype);
>  	if (!is_tunnel) {
>  		ret = ice_fdir_hw_tbl_conf(pf, pf->main_vsi, pf->fdir.fdir_vsi,
> -					   seg, flow, false);
> +					   seg_tun + 1, flow, false);
>  	} else {
> -		seg_tun = (struct ice_flow_seg_info *)
> -			ice_malloc(hw, sizeof(*seg) * ICE_FD_HW_SEG_MAX);
> -		if (!seg_tun) {
> -			PMD_DRV_LOG(ERR, "No memory can be allocated");
> -			rte_free(seg);
> -			return -ENOMEM;
> -		}
> -		rte_memcpy(&seg_tun[1], seg, sizeof(*seg));
>  		ret = ice_fdir_hw_tbl_conf(pf, pf->main_vsi, pf->fdir.fdir_vsi,
>  					   seg_tun, flow, true);
>  	}
> @@ -1099,9 +1107,7 @@ ice_fdir_input_set_conf(struct ice_pf *pf, enum
> ice_fltr_ptype flow,
>  	if (!ret) {
>  		return ret;
>  	} else if (ret < 0) {
> -		rte_free(seg);
> -		if (is_tunnel)
> -			rte_free(seg_tun);
> +		rte_free(seg_tun);
>  		return (ret == -EEXIST) ? 0 : ret;
>  	} else {
>  		return ret;
> @@ -1311,7 +1317,8 @@ ice_fdir_create_filter(struct ice_adapter *ad,
>  	is_tun = ice_fdir_is_tunnel_profile(filter->tunnel_type);
> 
>  	ret = ice_fdir_input_set_conf(pf, filter->input.flow_type,
> -			filter->input_set, filter->tunnel_type);
> +				      filter->input_set, filter->outer_input_set,
> +				      filter->tunnel_type);
>  	if (ret) {
>  		rte_flow_error_set(error, -ret,
>  				   RTE_FLOW_ERROR_TYPE_HANDLE, NULL, @@ -2106,7
> +2113,7 @@ ice_fdir_parse(struct ice_adapter *ad,
>  	ret = ice_fdir_parse_pattern(ad, pattern, error, filter);
>  	if (ret)
>  		goto error;
> -	input_set = filter->input_set;
> +	input_set = filter->input_set | filter->outer_input_set;
>  	if (!input_set || input_set & ~item->input_set_mask) {
>  		rte_flow_error_set(error, EINVAL,
>  				   RTE_FLOW_ERROR_TYPE_ITEM_SPEC,
> --
> 2.25.1


^ permalink raw reply	[flat|nested] 16+ messages in thread

* [dpdk-dev] [PATCH v1 0/2] refactor and clean FDIR
  2020-09-08  7:39 [dpdk-dev] [PATCH v1 0/2] refactor and clean FDIR Zhirun Yan
  2020-09-08  7:39 ` [dpdk-dev] [PATCH v1 1/2] net/ice: refactor FDIR set conf function Zhirun Yan
  2020-09-08  7:39 ` [dpdk-dev] [PATCH v1 2/2] net/ice: merge inner/outer flow seg info for FDIR Zhirun Yan
@ 2020-09-14  3:05 ` Zhirun Yan
  2020-09-14  3:05   ` [dpdk-dev] [PATCH v2 1/2] net/ice: refactor FDIR set conf function Zhirun Yan
                     ` (2 more replies)
  2020-09-15  5:27 ` [dpdk-dev] [PATCH v3 " Zhirun Yan
  3 siblings, 3 replies; 16+ messages in thread
From: Zhirun Yan @ 2020-09-14  3:05 UTC (permalink / raw)
  To: qi.z.zhang, dev; +Cc: yahui.cao, xiao.w.wang, simei.su, junfeng.guo, Zhirun Yan

V2:
Simplified code.

Zhirun Yan (2):
  net/ice: refactor FDIR set conf function
  net/ice: merge inner/outer flow seg info for FDIR

 drivers/net/ice/ice_ethdev.h      |  1 +
 drivers/net/ice/ice_fdir_filter.c | 93 +++++++++++++++++--------------
 2 files changed, 52 insertions(+), 42 deletions(-)

-- 
2.25.1


^ permalink raw reply	[flat|nested] 16+ messages in thread

* [dpdk-dev] [PATCH v2 1/2] net/ice: refactor FDIR set conf function
  2020-09-14  3:05 ` [dpdk-dev] [PATCH v1 0/2] refactor and clean FDIR Zhirun Yan
@ 2020-09-14  3:05   ` Zhirun Yan
  2020-09-14 10:54     ` Ferruh Yigit
  2020-09-14  3:05   ` [dpdk-dev] [PATCH v2 2/2] net/ice: merge inner/outer flow seg info for FDIR Zhirun Yan
  2020-09-14  5:23   ` [dpdk-dev] [PATCH v1 0/2] refactor and clean FDIR Zhang, Qi Z
  2 siblings, 1 reply; 16+ messages in thread
From: Zhirun Yan @ 2020-09-14  3:05 UTC (permalink / raw)
  To: qi.z.zhang, dev; +Cc: yahui.cao, xiao.w.wang, simei.su, junfeng.guo, Zhirun Yan

The original set conf function in FDIR was very long. Refactor to
increase readability to make it clearer and allow for more convenient
further changes.

No functional change here.

Signed-off-by: Zhirun Yan <zhirun.yan@intel.com>
---
 drivers/net/ice/ice_fdir_filter.c | 54 ++++++++++++++++++-------------
 1 file changed, 31 insertions(+), 23 deletions(-)

diff --git a/drivers/net/ice/ice_fdir_filter.c b/drivers/net/ice/ice_fdir_filter.c
index 88c9bb03d..593dfd0e2 100644
--- a/drivers/net/ice/ice_fdir_filter.c
+++ b/drivers/net/ice/ice_fdir_filter.c
@@ -964,30 +964,10 @@ ice_fdir_input_set_parse(uint64_t inset, enum ice_flow_field *field)
 	}
 }
 
-static int
-ice_fdir_input_set_conf(struct ice_pf *pf, enum ice_fltr_ptype flow,
-			uint64_t input_set, enum ice_fdir_tunnel_type ttype)
+static void
+ice_fdir_input_set_hdrs(enum ice_fltr_ptype flow, struct ice_flow_seg_info *seg,
+			enum ice_fdir_tunnel_type ttype)
 {
-	struct ice_flow_seg_info *seg;
-	struct ice_flow_seg_info *seg_tun = NULL;
-	enum ice_flow_field field[ICE_FLOW_FIELD_IDX_MAX];
-	bool is_tunnel;
-	int i, ret;
-
-	if (!input_set)
-		return -EINVAL;
-
-	seg = (struct ice_flow_seg_info *)
-		ice_malloc(hw, sizeof(*seg));
-	if (!seg) {
-		PMD_DRV_LOG(ERR, "No memory can be allocated");
-		return -ENOMEM;
-	}
-
-	for (i = 0; i < ICE_FLOW_FIELD_IDX_MAX; i++)
-		field[i] = ICE_FLOW_FIELD_IDX_MAX;
-	ice_fdir_input_set_parse(input_set, field);
-
 	switch (flow) {
 	case ICE_FLTR_PTYPE_NONF_IPV4_UDP:
 		ICE_FLOW_SET_HDRS(seg, ICE_FLOW_SEG_HDR_UDP |
@@ -1063,6 +1043,34 @@ ice_fdir_input_set_conf(struct ice_pf *pf, enum ice_fltr_ptype flow,
 		PMD_DRV_LOG(ERR, "not supported filter type.");
 		break;
 	}
+}
+
+static int
+ice_fdir_input_set_conf(struct ice_pf *pf, enum ice_fltr_ptype flow,
+			uint64_t input_set, enum ice_fdir_tunnel_type ttype)
+{
+	struct ice_flow_seg_info *seg;
+	struct ice_flow_seg_info *seg_tun = NULL;
+	enum ice_flow_field field[ICE_FLOW_FIELD_IDX_MAX];
+	bool is_tunnel;
+	int i, ret;
+
+	if (!input_set)
+		return -EINVAL;
+
+	seg = (struct ice_flow_seg_info *)
+		ice_malloc(hw, sizeof(*seg));
+	if (!seg) {
+		PMD_DRV_LOG(ERR, "No memory can be allocated");
+		return -ENOMEM;
+	}
+
+	for (i = 0; i < ICE_FLOW_FIELD_IDX_MAX; i++)
+		field[i] = ICE_FLOW_FIELD_IDX_MAX;
+
+	ice_fdir_input_set_parse(input_set, field);
+
+	ice_fdir_input_set_hdrs(flow, seg, ttype);
 
 	for (i = 0; field[i] != ICE_FLOW_FIELD_IDX_MAX; i++) {
 		ice_flow_set_fld(seg, field[i],
-- 
2.25.1


^ permalink raw reply	[flat|nested] 16+ messages in thread

* [dpdk-dev] [PATCH v2 2/2] net/ice: merge inner/outer flow seg info for FDIR
  2020-09-14  3:05 ` [dpdk-dev] [PATCH v1 0/2] refactor and clean FDIR Zhirun Yan
  2020-09-14  3:05   ` [dpdk-dev] [PATCH v2 1/2] net/ice: refactor FDIR set conf function Zhirun Yan
@ 2020-09-14  3:05   ` Zhirun Yan
  2020-09-14  5:23   ` [dpdk-dev] [PATCH v1 0/2] refactor and clean FDIR Zhang, Qi Z
  2 siblings, 0 replies; 16+ messages in thread
From: Zhirun Yan @ 2020-09-14  3:05 UTC (permalink / raw)
  To: qi.z.zhang, dev; +Cc: yahui.cao, xiao.w.wang, simei.su, junfeng.guo, Zhirun Yan

For tunnel and non-tunnel packets, it can share the same seg_tun info.
seg_tun[1] can be used for supporting inner fields with tunnel flow rule
or for non-tunnel packets, seg_tun[0] only used for tunnel outer part.
Add outer_input_set to distinguish inner/outer input set. So we can
identify different fields in outer or inner part.

Signed-off-by: Zhirun Yan <zhirun.yan@intel.com>
---
 drivers/net/ice/ice_ethdev.h      |  1 +
 drivers/net/ice/ice_fdir_filter.c | 59 ++++++++++++++++---------------
 2 files changed, 31 insertions(+), 29 deletions(-)

diff --git a/drivers/net/ice/ice_ethdev.h b/drivers/net/ice/ice_ethdev.h
index 393dfeab1..6bc6dfbfb 100644
--- a/drivers/net/ice/ice_ethdev.h
+++ b/drivers/net/ice/ice_ethdev.h
@@ -285,6 +285,7 @@ struct ice_fdir_filter_conf {
 	struct rte_flow_action_count act_count;
 
 	uint64_t input_set;
+	uint64_t outer_input_set; /* only for tunnel packets outer fields */
 };
 
 #define ICE_MAX_FDIR_FILTER_NUM		(1024 * 16)
diff --git a/drivers/net/ice/ice_fdir_filter.c b/drivers/net/ice/ice_fdir_filter.c
index 593dfd0e2..9caab05e3 100644
--- a/drivers/net/ice/ice_fdir_filter.c
+++ b/drivers/net/ice/ice_fdir_filter.c
@@ -1047,51 +1047,53 @@ ice_fdir_input_set_hdrs(enum ice_fltr_ptype flow, struct ice_flow_seg_info *seg,
 
 static int
 ice_fdir_input_set_conf(struct ice_pf *pf, enum ice_fltr_ptype flow,
-			uint64_t input_set, enum ice_fdir_tunnel_type ttype)
+			uint64_t inner_input_set, uint64_t outer_input_set,
+			enum ice_fdir_tunnel_type ttype)
 {
 	struct ice_flow_seg_info *seg;
 	struct ice_flow_seg_info *seg_tun = NULL;
 	enum ice_flow_field field[ICE_FLOW_FIELD_IDX_MAX];
+	uint64_t input_set;
 	bool is_tunnel;
-	int i, ret;
+	int k, i, ret = 0;
 
-	if (!input_set)
+	if (!(inner_input_set | outer_input_set))
 		return -EINVAL;
 
-	seg = (struct ice_flow_seg_info *)
-		ice_malloc(hw, sizeof(*seg));
-	if (!seg) {
+	seg_tun = (struct ice_flow_seg_info *)
+		ice_malloc(hw, sizeof(*seg_tun) * ICE_FD_HW_SEG_MAX);
+	if (!seg_tun) {
 		PMD_DRV_LOG(ERR, "No memory can be allocated");
 		return -ENOMEM;
 	}
 
-	for (i = 0; i < ICE_FLOW_FIELD_IDX_MAX; i++)
-		field[i] = ICE_FLOW_FIELD_IDX_MAX;
+	/* use seg_tun[1] to record tunnel inner part or non-tunnel */
+	for (k = 0; k <= ICE_FD_HW_SEG_TUN; k++) {
+		seg = &seg_tun[k];
+		input_set = (k == ICE_FD_HW_SEG_TUN) ? inner_input_set : outer_input_set;
+		if (input_set == 0)
+			continue;
+
+		for (i = 0; i < ICE_FLOW_FIELD_IDX_MAX; i++)
+			field[i] = ICE_FLOW_FIELD_IDX_MAX;
 
-	ice_fdir_input_set_parse(input_set, field);
+		ice_fdir_input_set_parse(input_set, field);
 
-	ice_fdir_input_set_hdrs(flow, seg, ttype);
+		ice_fdir_input_set_hdrs(flow, seg, ttype);
 
-	for (i = 0; field[i] != ICE_FLOW_FIELD_IDX_MAX; i++) {
-		ice_flow_set_fld(seg, field[i],
-				 ICE_FLOW_FLD_OFF_INVAL,
-				 ICE_FLOW_FLD_OFF_INVAL,
-				 ICE_FLOW_FLD_OFF_INVAL, false);
+		for (i = 0; field[i] != ICE_FLOW_FIELD_IDX_MAX; i++) {
+			ice_flow_set_fld(seg, field[i],
+					 ICE_FLOW_FLD_OFF_INVAL,
+					 ICE_FLOW_FLD_OFF_INVAL,
+					 ICE_FLOW_FLD_OFF_INVAL, false);
+		}
 	}
 
 	is_tunnel = ice_fdir_is_tunnel_profile(ttype);
 	if (!is_tunnel) {
 		ret = ice_fdir_hw_tbl_conf(pf, pf->main_vsi, pf->fdir.fdir_vsi,
-					   seg, flow, false);
+					   seg_tun + 1, flow, false);
 	} else {
-		seg_tun = (struct ice_flow_seg_info *)
-			ice_malloc(hw, sizeof(*seg) * ICE_FD_HW_SEG_MAX);
-		if (!seg_tun) {
-			PMD_DRV_LOG(ERR, "No memory can be allocated");
-			rte_free(seg);
-			return -ENOMEM;
-		}
-		rte_memcpy(&seg_tun[1], seg, sizeof(*seg));
 		ret = ice_fdir_hw_tbl_conf(pf, pf->main_vsi, pf->fdir.fdir_vsi,
 					   seg_tun, flow, true);
 	}
@@ -1099,9 +1101,7 @@ ice_fdir_input_set_conf(struct ice_pf *pf, enum ice_fltr_ptype flow,
 	if (!ret) {
 		return ret;
 	} else if (ret < 0) {
-		rte_free(seg);
-		if (is_tunnel)
-			rte_free(seg_tun);
+		rte_free(seg_tun);
 		return (ret == -EEXIST) ? 0 : ret;
 	} else {
 		return ret;
@@ -1311,7 +1311,8 @@ ice_fdir_create_filter(struct ice_adapter *ad,
 	is_tun = ice_fdir_is_tunnel_profile(filter->tunnel_type);
 
 	ret = ice_fdir_input_set_conf(pf, filter->input.flow_type,
-			filter->input_set, filter->tunnel_type);
+				      filter->input_set, filter->outer_input_set,
+				      filter->tunnel_type);
 	if (ret) {
 		rte_flow_error_set(error, -ret,
 				   RTE_FLOW_ERROR_TYPE_HANDLE, NULL,
@@ -2106,7 +2107,7 @@ ice_fdir_parse(struct ice_adapter *ad,
 	ret = ice_fdir_parse_pattern(ad, pattern, error, filter);
 	if (ret)
 		goto error;
-	input_set = filter->input_set;
+	input_set = filter->input_set | filter->outer_input_set;
 	if (!input_set || input_set & ~item->input_set_mask) {
 		rte_flow_error_set(error, EINVAL,
 				   RTE_FLOW_ERROR_TYPE_ITEM_SPEC,
-- 
2.25.1


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [dpdk-dev] [PATCH v1 0/2] refactor and clean FDIR
  2020-09-14  3:05 ` [dpdk-dev] [PATCH v1 0/2] refactor and clean FDIR Zhirun Yan
  2020-09-14  3:05   ` [dpdk-dev] [PATCH v2 1/2] net/ice: refactor FDIR set conf function Zhirun Yan
  2020-09-14  3:05   ` [dpdk-dev] [PATCH v2 2/2] net/ice: merge inner/outer flow seg info for FDIR Zhirun Yan
@ 2020-09-14  5:23   ` Zhang, Qi Z
  2 siblings, 0 replies; 16+ messages in thread
From: Zhang, Qi Z @ 2020-09-14  5:23 UTC (permalink / raw)
  To: Yan, Zhirun, dev; +Cc: Cao, Yahui, Wang, Xiao W, Su, Simei, Guo, Junfeng



> -----Original Message-----
> From: Yan, Zhirun <zhirun.yan@intel.com>
> Sent: Monday, September 14, 2020 11:05 AM
> To: Zhang, Qi Z <qi.z.zhang@intel.com>; dev@dpdk.org
> Cc: Cao, Yahui <yahui.cao@intel.com>; Wang, Xiao W
> <xiao.w.wang@intel.com>; Su, Simei <simei.su@intel.com>; Guo, Junfeng
> <junfeng.guo@intel.com>; Yan, Zhirun <zhirun.yan@intel.com>
> Subject: [PATCH v1 0/2] refactor and clean FDIR
> 
> V2:
> Simplified code.
> 
> Zhirun Yan (2):
>   net/ice: refactor FDIR set conf function
>   net/ice: merge inner/outer flow seg info for FDIR
> 
>  drivers/net/ice/ice_ethdev.h      |  1 +
>  drivers/net/ice/ice_fdir_filter.c | 93 +++++++++++++++++--------------
>  2 files changed, 52 insertions(+), 42 deletions(-)
> 
> --
> 2.25.1

Acked-by: Qi Zhang <qi.z.zhang@intel.com>

Applied to dpdk-next-net-intel.

Thanks
Qi


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [dpdk-dev] [PATCH v2 1/2] net/ice: refactor FDIR set conf function
  2020-09-14  3:05   ` [dpdk-dev] [PATCH v2 1/2] net/ice: refactor FDIR set conf function Zhirun Yan
@ 2020-09-14 10:54     ` Ferruh Yigit
  2020-09-15  5:30       ` Yan, Zhirun
  0 siblings, 1 reply; 16+ messages in thread
From: Ferruh Yigit @ 2020-09-14 10:54 UTC (permalink / raw)
  To: Zhirun Yan, qi.z.zhang, dev; +Cc: yahui.cao, xiao.w.wang, simei.su, junfeng.guo

On 9/14/2020 4:05 AM, Zhirun Yan wrote:
> The original set conf function in FDIR was very long. Refactor to
> increase readability to make it clearer and allow for more convenient
> further changes.
> 
> No functional change here.
> 
> Signed-off-by: Zhirun Yan <zhirun.yan@intel.com>
> ---
>  drivers/net/ice/ice_fdir_filter.c | 54 ++++++++++++++++++-------------
>  1 file changed, 31 insertions(+), 23 deletions(-)
> 
> diff --git a/drivers/net/ice/ice_fdir_filter.c b/drivers/net/ice/ice_fdir_filter.c
> index 88c9bb03d..593dfd0e2 100644
> --- a/drivers/net/ice/ice_fdir_filter.c
> +++ b/drivers/net/ice/ice_fdir_filter.c
> @@ -964,30 +964,10 @@ ice_fdir_input_set_parse(uint64_t inset, enum ice_flow_field *field)
>  	}
>  }
>  
> -static int
> -ice_fdir_input_set_conf(struct ice_pf *pf, enum ice_fltr_ptype flow,
> -			uint64_t input_set, enum ice_fdir_tunnel_type ttype)
> +static void
> +ice_fdir_input_set_hdrs(enum ice_fltr_ptype flow, struct ice_flow_seg_info *seg,
> +			enum ice_fdir_tunnel_type ttype)
>  {

Hi Zhirun,

'ttype' variable is not used in this function at all, what do you think
removing it?

^ permalink raw reply	[flat|nested] 16+ messages in thread

* [dpdk-dev] [PATCH v3 0/2] refactor and clean FDIR
  2020-09-08  7:39 [dpdk-dev] [PATCH v1 0/2] refactor and clean FDIR Zhirun Yan
                   ` (2 preceding siblings ...)
  2020-09-14  3:05 ` [dpdk-dev] [PATCH v1 0/2] refactor and clean FDIR Zhirun Yan
@ 2020-09-15  5:27 ` " Zhirun Yan
  2020-09-15  5:27   ` [dpdk-dev] [PATCH v3 1/2] net/ice: refactor FDIR set conf function Zhirun Yan
                     ` (2 more replies)
  3 siblings, 3 replies; 16+ messages in thread
From: Zhirun Yan @ 2020-09-15  5:27 UTC (permalink / raw)
  To: qi.z.zhang, dev; +Cc: yahui.cao, xiao.w.wang, simei.su, junfeng.guo, Zhirun Yan

V3:
fix complie warning.


V2:
Simplified code.


main changes:

1. Refactor FDIR configure function.
2. Merge flow seg info for tun/non-tun, distinguish inner/outer
input_set.
3. Remove redundant segment info.


Zhirun Yan (2):
  net/ice: refactor FDIR set conf function
  net/ice: merge inner/outer flow seg info for FDIR

 drivers/net/ice/ice_ethdev.h      |  1 +
 drivers/net/ice/ice_fdir_filter.c | 92 +++++++++++++++++--------------
 2 files changed, 51 insertions(+), 42 deletions(-)

-- 
2.25.1


^ permalink raw reply	[flat|nested] 16+ messages in thread

* [dpdk-dev] [PATCH v3 1/2] net/ice: refactor FDIR set conf function
  2020-09-15  5:27 ` [dpdk-dev] [PATCH v3 " Zhirun Yan
@ 2020-09-15  5:27   ` Zhirun Yan
  2020-09-18  9:28     ` Cao, Yahui
  2020-09-15  5:27   ` [dpdk-dev] [PATCH v3 2/2] net/ice: merge inner/outer flow seg info for FDIR Zhirun Yan
  2020-09-15  5:38   ` [dpdk-dev] [PATCH v3 0/2] refactor and clean FDIR Zhang, Qi Z
  2 siblings, 1 reply; 16+ messages in thread
From: Zhirun Yan @ 2020-09-15  5:27 UTC (permalink / raw)
  To: qi.z.zhang, dev; +Cc: yahui.cao, xiao.w.wang, simei.su, junfeng.guo, Zhirun Yan

The original set conf function in FDIR was very long. Refactor to
increase readability to make it clearer and allow for more convenient
further changes.

No functional change here.

Signed-off-by: Zhirun Yan <zhirun.yan@intel.com>
---
 drivers/net/ice/ice_fdir_filter.c | 53 +++++++++++++++++--------------
 1 file changed, 30 insertions(+), 23 deletions(-)

diff --git a/drivers/net/ice/ice_fdir_filter.c b/drivers/net/ice/ice_fdir_filter.c
index c4b7265ce..a65523781 100644
--- a/drivers/net/ice/ice_fdir_filter.c
+++ b/drivers/net/ice/ice_fdir_filter.c
@@ -943,30 +943,9 @@ ice_fdir_input_set_parse(uint64_t inset, enum ice_flow_field *field)
 	}
 }
 
-static int
-ice_fdir_input_set_conf(struct ice_pf *pf, enum ice_fltr_ptype flow,
-			uint64_t input_set, enum ice_fdir_tunnel_type ttype)
+static void
+ice_fdir_input_set_hdrs(enum ice_fltr_ptype flow, struct ice_flow_seg_info *seg)
 {
-	struct ice_flow_seg_info *seg;
-	struct ice_flow_seg_info *seg_tun = NULL;
-	enum ice_flow_field field[ICE_FLOW_FIELD_IDX_MAX];
-	bool is_tunnel;
-	int i, ret;
-
-	if (!input_set)
-		return -EINVAL;
-
-	seg = (struct ice_flow_seg_info *)
-		ice_malloc(hw, sizeof(*seg));
-	if (!seg) {
-		PMD_DRV_LOG(ERR, "No memory can be allocated");
-		return -ENOMEM;
-	}
-
-	for (i = 0; i < ICE_FLOW_FIELD_IDX_MAX; i++)
-		field[i] = ICE_FLOW_FIELD_IDX_MAX;
-	ice_fdir_input_set_parse(input_set, field);
-
 	switch (flow) {
 	case ICE_FLTR_PTYPE_NONF_IPV4_UDP:
 		ICE_FLOW_SET_HDRS(seg, ICE_FLOW_SEG_HDR_UDP |
@@ -1038,6 +1017,34 @@ ice_fdir_input_set_conf(struct ice_pf *pf, enum ice_fltr_ptype flow,
 		PMD_DRV_LOG(ERR, "not supported filter type.");
 		break;
 	}
+}
+
+static int
+ice_fdir_input_set_conf(struct ice_pf *pf, enum ice_fltr_ptype flow,
+			uint64_t input_set, enum ice_fdir_tunnel_type ttype)
+{
+	struct ice_flow_seg_info *seg;
+	struct ice_flow_seg_info *seg_tun = NULL;
+	enum ice_flow_field field[ICE_FLOW_FIELD_IDX_MAX];
+	bool is_tunnel;
+	int i, ret;
+
+	if (!input_set)
+		return -EINVAL;
+
+	seg = (struct ice_flow_seg_info *)
+		ice_malloc(hw, sizeof(*seg));
+	if (!seg) {
+		PMD_DRV_LOG(ERR, "No memory can be allocated");
+		return -ENOMEM;
+	}
+
+	for (i = 0; i < ICE_FLOW_FIELD_IDX_MAX; i++)
+		field[i] = ICE_FLOW_FIELD_IDX_MAX;
+
+	ice_fdir_input_set_parse(input_set, field);
+
+	ice_fdir_input_set_hdrs(flow, seg);
 
 	for (i = 0; field[i] != ICE_FLOW_FIELD_IDX_MAX; i++) {
 		ice_flow_set_fld(seg, field[i],
-- 
2.25.1


^ permalink raw reply	[flat|nested] 16+ messages in thread

* [dpdk-dev] [PATCH v3 2/2] net/ice: merge inner/outer flow seg info for FDIR
  2020-09-15  5:27 ` [dpdk-dev] [PATCH v3 " Zhirun Yan
  2020-09-15  5:27   ` [dpdk-dev] [PATCH v3 1/2] net/ice: refactor FDIR set conf function Zhirun Yan
@ 2020-09-15  5:27   ` Zhirun Yan
  2020-09-18  9:30     ` Cao, Yahui
  2020-09-15  5:38   ` [dpdk-dev] [PATCH v3 0/2] refactor and clean FDIR Zhang, Qi Z
  2 siblings, 1 reply; 16+ messages in thread
From: Zhirun Yan @ 2020-09-15  5:27 UTC (permalink / raw)
  To: qi.z.zhang, dev; +Cc: yahui.cao, xiao.w.wang, simei.su, junfeng.guo, Zhirun Yan

For tunnel and non-tunnel packets, it can share the same seg_tun info.
seg_tun[1] can be used for supporting inner fields with tunnel flow rule
or for non-tunnel packets, seg_tun[0] only used for tunnel outer part.
Add outer_input_set to distinguish inner/outer input set. So we can
identify different fields in outer or inner part.

Signed-off-by: Zhirun Yan <zhirun.yan@intel.com>
---
 drivers/net/ice/ice_ethdev.h      |  1 +
 drivers/net/ice/ice_fdir_filter.c | 59 ++++++++++++++++---------------
 2 files changed, 31 insertions(+), 29 deletions(-)

diff --git a/drivers/net/ice/ice_ethdev.h b/drivers/net/ice/ice_ethdev.h
index 758caa8b4..243a023e6 100644
--- a/drivers/net/ice/ice_ethdev.h
+++ b/drivers/net/ice/ice_ethdev.h
@@ -287,6 +287,7 @@ struct ice_fdir_filter_conf {
 	struct rte_flow_action_count act_count;
 
 	uint64_t input_set;
+	uint64_t outer_input_set; /* only for tunnel packets outer fields */
 };
 
 #define ICE_MAX_FDIR_FILTER_NUM		(1024 * 16)
diff --git a/drivers/net/ice/ice_fdir_filter.c b/drivers/net/ice/ice_fdir_filter.c
index a65523781..e0ce1efb0 100644
--- a/drivers/net/ice/ice_fdir_filter.c
+++ b/drivers/net/ice/ice_fdir_filter.c
@@ -1021,51 +1021,53 @@ ice_fdir_input_set_hdrs(enum ice_fltr_ptype flow, struct ice_flow_seg_info *seg)
 
 static int
 ice_fdir_input_set_conf(struct ice_pf *pf, enum ice_fltr_ptype flow,
-			uint64_t input_set, enum ice_fdir_tunnel_type ttype)
+			uint64_t inner_input_set, uint64_t outer_input_set,
+			enum ice_fdir_tunnel_type ttype)
 {
 	struct ice_flow_seg_info *seg;
 	struct ice_flow_seg_info *seg_tun = NULL;
 	enum ice_flow_field field[ICE_FLOW_FIELD_IDX_MAX];
+	uint64_t input_set;
 	bool is_tunnel;
-	int i, ret;
+	int k, i, ret = 0;
 
-	if (!input_set)
+	if (!(inner_input_set | outer_input_set))
 		return -EINVAL;
 
-	seg = (struct ice_flow_seg_info *)
-		ice_malloc(hw, sizeof(*seg));
-	if (!seg) {
+	seg_tun = (struct ice_flow_seg_info *)
+		ice_malloc(hw, sizeof(*seg_tun) * ICE_FD_HW_SEG_MAX);
+	if (!seg_tun) {
 		PMD_DRV_LOG(ERR, "No memory can be allocated");
 		return -ENOMEM;
 	}
 
-	for (i = 0; i < ICE_FLOW_FIELD_IDX_MAX; i++)
-		field[i] = ICE_FLOW_FIELD_IDX_MAX;
+	/* use seg_tun[1] to record tunnel inner part or non-tunnel */
+	for (k = 0; k <= ICE_FD_HW_SEG_TUN; k++) {
+		seg = &seg_tun[k];
+		input_set = (k == ICE_FD_HW_SEG_TUN) ? inner_input_set : outer_input_set;
+		if (input_set == 0)
+			continue;
+
+		for (i = 0; i < ICE_FLOW_FIELD_IDX_MAX; i++)
+			field[i] = ICE_FLOW_FIELD_IDX_MAX;
 
-	ice_fdir_input_set_parse(input_set, field);
+		ice_fdir_input_set_parse(input_set, field);
 
-	ice_fdir_input_set_hdrs(flow, seg);
+		ice_fdir_input_set_hdrs(flow, seg);
 
-	for (i = 0; field[i] != ICE_FLOW_FIELD_IDX_MAX; i++) {
-		ice_flow_set_fld(seg, field[i],
-				 ICE_FLOW_FLD_OFF_INVAL,
-				 ICE_FLOW_FLD_OFF_INVAL,
-				 ICE_FLOW_FLD_OFF_INVAL, false);
+		for (i = 0; field[i] != ICE_FLOW_FIELD_IDX_MAX; i++) {
+			ice_flow_set_fld(seg, field[i],
+					 ICE_FLOW_FLD_OFF_INVAL,
+					 ICE_FLOW_FLD_OFF_INVAL,
+					 ICE_FLOW_FLD_OFF_INVAL, false);
+		}
 	}
 
 	is_tunnel = ice_fdir_is_tunnel_profile(ttype);
 	if (!is_tunnel) {
 		ret = ice_fdir_hw_tbl_conf(pf, pf->main_vsi, pf->fdir.fdir_vsi,
-					   seg, flow, false);
+					   seg_tun + 1, flow, false);
 	} else {
-		seg_tun = (struct ice_flow_seg_info *)
-			ice_malloc(hw, sizeof(*seg) * ICE_FD_HW_SEG_MAX);
-		if (!seg_tun) {
-			PMD_DRV_LOG(ERR, "No memory can be allocated");
-			rte_free(seg);
-			return -ENOMEM;
-		}
-		rte_memcpy(&seg_tun[1], seg, sizeof(*seg));
 		ret = ice_fdir_hw_tbl_conf(pf, pf->main_vsi, pf->fdir.fdir_vsi,
 					   seg_tun, flow, true);
 	}
@@ -1073,9 +1075,7 @@ ice_fdir_input_set_conf(struct ice_pf *pf, enum ice_fltr_ptype flow,
 	if (!ret) {
 		return ret;
 	} else if (ret < 0) {
-		rte_free(seg);
-		if (is_tunnel)
-			rte_free(seg_tun);
+		rte_free(seg_tun);
 		return (ret == -EEXIST) ? 0 : ret;
 	} else {
 		return ret;
@@ -1285,7 +1285,8 @@ ice_fdir_create_filter(struct ice_adapter *ad,
 	is_tun = ice_fdir_is_tunnel_profile(filter->tunnel_type);
 
 	ret = ice_fdir_input_set_conf(pf, filter->input.flow_type,
-			filter->input_set, filter->tunnel_type);
+				      filter->input_set, filter->outer_input_set,
+				      filter->tunnel_type);
 	if (ret) {
 		rte_flow_error_set(error, -ret,
 				   RTE_FLOW_ERROR_TYPE_HANDLE, NULL,
@@ -2038,7 +2039,7 @@ ice_fdir_parse(struct ice_adapter *ad,
 	ret = ice_fdir_parse_pattern(ad, pattern, error, filter);
 	if (ret)
 		goto error;
-	input_set = filter->input_set;
+	input_set = filter->input_set | filter->outer_input_set;
 	if (!input_set || input_set & ~item->input_set_mask) {
 		rte_flow_error_set(error, EINVAL,
 				   RTE_FLOW_ERROR_TYPE_ITEM_SPEC,
-- 
2.25.1


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [dpdk-dev] [PATCH v2 1/2] net/ice: refactor FDIR set conf function
  2020-09-14 10:54     ` Ferruh Yigit
@ 2020-09-15  5:30       ` Yan, Zhirun
  0 siblings, 0 replies; 16+ messages in thread
From: Yan, Zhirun @ 2020-09-15  5:30 UTC (permalink / raw)
  To: Yigit, Ferruh, Zhang, Qi Z, dev
  Cc: Cao, Yahui, Wang, Xiao W, Su, Simei, Guo, Junfeng



> -----Original Message-----
> From: Ferruh Yigit [mailto:ferruh.yigit@intel.com]
> Sent: Monday, September 14, 2020 6:55 PM
> To: Yan, Zhirun <zhirun.yan@intel.com>; Zhang, Qi Z <qi.z.zhang@intel.com>;
> dev@dpdk.org
> Cc: Cao, Yahui <yahui.cao@intel.com>; Wang, Xiao W
> <xiao.w.wang@intel.com>; Su, Simei <simei.su@intel.com>; Guo, Junfeng
> <junfeng.guo@intel.com>
> Subject: Re: [dpdk-dev] [PATCH v2 1/2] net/ice: refactor FDIR set conf
> function
> 
> On 9/14/2020 4:05 AM, Zhirun Yan wrote:
> > The original set conf function in FDIR was very long. Refactor to
> > increase readability to make it clearer and allow for more convenient
> > further changes.
> >
> > No functional change here.
> >
> > Signed-off-by: Zhirun Yan <zhirun.yan@intel.com>
> > ---
> >  drivers/net/ice/ice_fdir_filter.c | 54
> > ++++++++++++++++++-------------
> >  1 file changed, 31 insertions(+), 23 deletions(-)
> >
> > diff --git a/drivers/net/ice/ice_fdir_filter.c
> > b/drivers/net/ice/ice_fdir_filter.c
> > index 88c9bb03d..593dfd0e2 100644
> > --- a/drivers/net/ice/ice_fdir_filter.c
> > +++ b/drivers/net/ice/ice_fdir_filter.c
> > @@ -964,30 +964,10 @@ ice_fdir_input_set_parse(uint64_t inset, enum
> ice_flow_field *field)
> >  	}
> >  }
> >
> > -static int
> > -ice_fdir_input_set_conf(struct ice_pf *pf, enum ice_fltr_ptype flow,
> > -			uint64_t input_set, enum ice_fdir_tunnel_type ttype)
> > +static void
> > +ice_fdir_input_set_hdrs(enum ice_fltr_ptype flow, struct
> ice_flow_seg_info *seg,
> > +			enum ice_fdir_tunnel_type ttype)
> >  {
> 
> Hi Zhirun,
> 
> 'ttype' variable is not used in this function at all, what do you think removing
> it?

Hi Ferruh,

Yes. I will fix it in V3. Thanks.

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [dpdk-dev] [PATCH v3 0/2] refactor and clean FDIR
  2020-09-15  5:27 ` [dpdk-dev] [PATCH v3 " Zhirun Yan
  2020-09-15  5:27   ` [dpdk-dev] [PATCH v3 1/2] net/ice: refactor FDIR set conf function Zhirun Yan
  2020-09-15  5:27   ` [dpdk-dev] [PATCH v3 2/2] net/ice: merge inner/outer flow seg info for FDIR Zhirun Yan
@ 2020-09-15  5:38   ` Zhang, Qi Z
  2 siblings, 0 replies; 16+ messages in thread
From: Zhang, Qi Z @ 2020-09-15  5:38 UTC (permalink / raw)
  To: Yan, Zhirun, dev; +Cc: Cao, Yahui, Wang, Xiao W, Su, Simei, Guo, Junfeng



> -----Original Message-----
> From: Yan, Zhirun <zhirun.yan@intel.com>
> Sent: Tuesday, September 15, 2020 1:27 PM
> To: Zhang, Qi Z <qi.z.zhang@intel.com>; dev@dpdk.org
> Cc: Cao, Yahui <yahui.cao@intel.com>; Wang, Xiao W
> <xiao.w.wang@intel.com>; Su, Simei <simei.su@intel.com>; Guo, Junfeng
> <junfeng.guo@intel.com>; Yan, Zhirun <zhirun.yan@intel.com>
> Subject: [PATCH v3 0/2] refactor and clean FDIR
> 
> V3:
> fix complie warning.
> 
> 
> V2:
> Simplified code.
> 
> 
> main changes:
> 
> 1. Refactor FDIR configure function.
> 2. Merge flow seg info for tun/non-tun, distinguish inner/outer input_set.
> 3. Remove redundant segment info.
> 
> 
> Zhirun Yan (2):
>   net/ice: refactor FDIR set conf function
>   net/ice: merge inner/outer flow seg info for FDIR
> 
>  drivers/net/ice/ice_ethdev.h      |  1 +
>  drivers/net/ice/ice_fdir_filter.c | 92 +++++++++++++++++--------------
>  2 files changed, 51 insertions(+), 42 deletions(-)
> 
> --
> 2.25.1

V2 is reverted and v3 is applied to dpdk-next-net-intel.



^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [dpdk-dev] [PATCH v3 1/2] net/ice: refactor FDIR set conf function
  2020-09-15  5:27   ` [dpdk-dev] [PATCH v3 1/2] net/ice: refactor FDIR set conf function Zhirun Yan
@ 2020-09-18  9:28     ` Cao, Yahui
  0 siblings, 0 replies; 16+ messages in thread
From: Cao, Yahui @ 2020-09-18  9:28 UTC (permalink / raw)
  To: Yan, Zhirun, Zhang, Qi Z, dev; +Cc: Wang, Xiao W, Su, Simei, Guo, Junfeng



> -----Original Message-----
> From: Yan, Zhirun <zhirun.yan@intel.com>
> Sent: Tuesday, September 15, 2020 1:27 PM
> To: Zhang, Qi Z <qi.z.zhang@intel.com>; dev@dpdk.org
> Cc: Cao, Yahui <yahui.cao@intel.com>; Wang, Xiao W
> <xiao.w.wang@intel.com>; Su, Simei <simei.su@intel.com>; Guo, Junfeng
> <junfeng.guo@intel.com>; Yan, Zhirun <zhirun.yan@intel.com>
> Subject: [PATCH v3 1/2] net/ice: refactor FDIR set conf function
> 
> The original set conf function in FDIR was very long. Refactor to increase
> readability to make it clearer and allow for more convenient further changes.
> 
> No functional change here.
> 
> Signed-off-by: Zhirun Yan <zhirun.yan@intel.com>
> ---
>  drivers/net/ice/ice_fdir_filter.c | 53 +++++++++++++++++--------------
>  1 file changed, 30 insertions(+), 23 deletions(-)
> 
> diff --git a/drivers/net/ice/ice_fdir_filter.c b/drivers/net/ice/ice_fdir_filter.c
> index c4b7265ce..a65523781 100644
> --- a/drivers/net/ice/ice_fdir_filter.c
> +++ b/drivers/net/ice/ice_fdir_filter.c
> @@ -943,30 +943,9 @@ ice_fdir_input_set_parse(uint64_t inset, enum
> ice_flow_field *field)
>  	}
>  }
> 
> -static int
> -ice_fdir_input_set_conf(struct ice_pf *pf, enum ice_fltr_ptype flow,
> -			uint64_t input_set, enum ice_fdir_tunnel_type ttype)
> +static void
> +ice_fdir_input_set_hdrs(enum ice_fltr_ptype flow, struct ice_flow_seg_info *seg)
[Cao, Yahui] 
suggest to change function name from ice_fdir_input_set_hdrs to ice_fdir_input_set_segs,
and all seg related variable can be inited inside this function, so that this function init
seg header and seg field. And below function can be simplified as(see next comments)

>  {
> -	struct ice_flow_seg_info *seg;
> -	struct ice_flow_seg_info *seg_tun = NULL;
> -	enum ice_flow_field field[ICE_FLOW_FIELD_IDX_MAX];
> -	bool is_tunnel;
> -	int i, ret;
> -
> -	if (!input_set)
> -		return -EINVAL;
> -
> -	seg = (struct ice_flow_seg_info *)
> -		ice_malloc(hw, sizeof(*seg));
> -	if (!seg) {
> -		PMD_DRV_LOG(ERR, "No memory can be allocated");
> -		return -ENOMEM;
> -	}
> -
> -	for (i = 0; i < ICE_FLOW_FIELD_IDX_MAX; i++)
> -		field[i] = ICE_FLOW_FIELD_IDX_MAX;
> -	ice_fdir_input_set_parse(input_set, field);
> -
>  	switch (flow) {
>  	case ICE_FLTR_PTYPE_NONF_IPV4_UDP:
>  		ICE_FLOW_SET_HDRS(seg, ICE_FLOW_SEG_HDR_UDP | @@ -
> 1038,6 +1017,34 @@ ice_fdir_input_set_conf(struct ice_pf *pf, enum
> ice_fltr_ptype flow,
>  		PMD_DRV_LOG(ERR, "not supported filter type.");
>  		break;
>  	}
> +}
> +
> +static int
> +ice_fdir_input_set_conf(struct ice_pf *pf, enum ice_fltr_ptype flow,
> +			uint64_t input_set, enum ice_fdir_tunnel_type ttype)
> {
> +	struct ice_flow_seg_info *seg;
> +	struct ice_flow_seg_info *seg_tun = NULL;
> +	enum ice_flow_field field[ICE_FLOW_FIELD_IDX_MAX];
> +	bool is_tunnel;
> +	int i, ret;
> +
> +	if (!input_set)
> +		return -EINVAL;
> +
> +	seg = (struct ice_flow_seg_info *)
> +		ice_malloc(hw, sizeof(*seg));
> +	if (!seg) {
> +		PMD_DRV_LOG(ERR, "No memory can be allocated");
> +		return -ENOMEM;
> +	}
> +

[Cao, Yahui] 
> +	for (i = 0; i < ICE_FLOW_FIELD_IDX_MAX; i++)
> +		field[i] = ICE_FLOW_FIELD_IDX_MAX;
> +
> +	ice_fdir_input_set_parse(input_set, field);
> +
> +	ice_fdir_input_set_hdrs(flow, seg);
[Cao, Yahui] 
Function above can be replaced by ice_fdir_input_set_segs(seg, input_set, flow)
> 
>  	for (i = 0; field[i] != ICE_FLOW_FIELD_IDX_MAX; i++) {
>  		ice_flow_set_fld(seg, field[i],
> --
> 2.25.1


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [dpdk-dev] [PATCH v3 2/2] net/ice: merge inner/outer flow seg info for FDIR
  2020-09-15  5:27   ` [dpdk-dev] [PATCH v3 2/2] net/ice: merge inner/outer flow seg info for FDIR Zhirun Yan
@ 2020-09-18  9:30     ` Cao, Yahui
  0 siblings, 0 replies; 16+ messages in thread
From: Cao, Yahui @ 2020-09-18  9:30 UTC (permalink / raw)
  To: Yan, Zhirun, Zhang, Qi Z, dev; +Cc: Wang, Xiao W, Su, Simei, Guo, Junfeng



> -----Original Message-----
> From: Yan, Zhirun <zhirun.yan@intel.com>
> Sent: Tuesday, September 15, 2020 1:27 PM
> To: Zhang, Qi Z <qi.z.zhang@intel.com>; dev@dpdk.org
> Cc: Cao, Yahui <yahui.cao@intel.com>; Wang, Xiao W
> <xiao.w.wang@intel.com>; Su, Simei <simei.su@intel.com>; Guo, Junfeng
> <junfeng.guo@intel.com>; Yan, Zhirun <zhirun.yan@intel.com>
> Subject: [PATCH v3 2/2] net/ice: merge inner/outer flow seg info for FDIR
> 
> For tunnel and non-tunnel packets, it can share the same seg_tun info.
> seg_tun[1] can be used for supporting inner fields with tunnel flow rule or
> for non-tunnel packets, seg_tun[0] only used for tunnel outer part.
> Add outer_input_set to distinguish inner/outer input set. So we can identify
> different fields in outer or inner part.
> 
> Signed-off-by: Zhirun Yan <zhirun.yan@intel.com>
> ---
>  drivers/net/ice/ice_ethdev.h      |  1 +
>  drivers/net/ice/ice_fdir_filter.c | 59 ++++++++++++++++---------------
>  2 files changed, 31 insertions(+), 29 deletions(-)
> 
> diff --git a/drivers/net/ice/ice_ethdev.h b/drivers/net/ice/ice_ethdev.h index
> 758caa8b4..243a023e6 100644
> --- a/drivers/net/ice/ice_ethdev.h
> +++ b/drivers/net/ice/ice_ethdev.h
> @@ -287,6 +287,7 @@ struct ice_fdir_filter_conf {
>  	struct rte_flow_action_count act_count;
> 
>  	uint64_t input_set;
> +	uint64_t outer_input_set; /* only for tunnel packets outer fields */
>  };
> 
>  #define ICE_MAX_FDIR_FILTER_NUM		(1024 * 16)
> diff --git a/drivers/net/ice/ice_fdir_filter.c b/drivers/net/ice/ice_fdir_filter.c
> index a65523781..e0ce1efb0 100644
> --- a/drivers/net/ice/ice_fdir_filter.c
> +++ b/drivers/net/ice/ice_fdir_filter.c
> @@ -1021,51 +1021,53 @@ ice_fdir_input_set_hdrs(enum ice_fltr_ptype
> flow, struct ice_flow_seg_info *seg)
> 
>  static int
>  ice_fdir_input_set_conf(struct ice_pf *pf, enum ice_fltr_ptype flow,
> -			uint64_t input_set, enum ice_fdir_tunnel_type ttype)
> +			uint64_t inner_input_set, uint64_t outer_input_set,
> +			enum ice_fdir_tunnel_type ttype)
>  {
>  	struct ice_flow_seg_info *seg;
>  	struct ice_flow_seg_info *seg_tun = NULL;
>  	enum ice_flow_field field[ICE_FLOW_FIELD_IDX_MAX];
> +	uint64_t input_set;
>  	bool is_tunnel;
> -	int i, ret;
> +	int k, i, ret = 0;
> 
> -	if (!input_set)
> +	if (!(inner_input_set | outer_input_set))
>  		return -EINVAL;
> 
> -	seg = (struct ice_flow_seg_info *)
> -		ice_malloc(hw, sizeof(*seg));
> -	if (!seg) {
> +	seg_tun = (struct ice_flow_seg_info *)
> +		ice_malloc(hw, sizeof(*seg_tun) * ICE_FD_HW_SEG_MAX);
> +	if (!seg_tun) {
>  		PMD_DRV_LOG(ERR, "No memory can be allocated");
>  		return -ENOMEM;
>  	}
> 
> -	for (i = 0; i < ICE_FLOW_FIELD_IDX_MAX; i++)
> -		field[i] = ICE_FLOW_FIELD_IDX_MAX;
> +	/* use seg_tun[1] to record tunnel inner part or non-tunnel */
> +	for (k = 0; k <= ICE_FD_HW_SEG_TUN; k++) {
[Cao, Yahui]
According to the comments on the previous patch, inside for loop:
Only  ice_fdir_input_set_segs(seg, input_set, flow) is needed.
This may reduce lots of line tabbing operations and make patch more reviewer friendly.

> +		seg = &seg_tun[k];
> +		input_set = (k == ICE_FD_HW_SEG_TUN) ? inner_input_set :
> outer_input_set;
> +		if (input_set == 0)
> +			continue;
> +
> +		for (i = 0; i < ICE_FLOW_FIELD_IDX_MAX; i++)
> +			field[i] = ICE_FLOW_FIELD_IDX_MAX;
> 
> -	ice_fdir_input_set_parse(input_set, field);
> +		ice_fdir_input_set_parse(input_set, field);
> 
> -	ice_fdir_input_set_hdrs(flow, seg);
> +		ice_fdir_input_set_hdrs(flow, seg);
> 
> -	for (i = 0; field[i] != ICE_FLOW_FIELD_IDX_MAX; i++) {
> -		ice_flow_set_fld(seg, field[i],
> -				 ICE_FLOW_FLD_OFF_INVAL,
> -				 ICE_FLOW_FLD_OFF_INVAL,
> -				 ICE_FLOW_FLD_OFF_INVAL, false);
> +		for (i = 0; field[i] != ICE_FLOW_FIELD_IDX_MAX; i++) {
> +			ice_flow_set_fld(seg, field[i],
> +					 ICE_FLOW_FLD_OFF_INVAL,
> +					 ICE_FLOW_FLD_OFF_INVAL,
> +					 ICE_FLOW_FLD_OFF_INVAL, false);
> +		}
>  	}
> 
>  	is_tunnel = ice_fdir_is_tunnel_profile(ttype);
>  	if (!is_tunnel) {
>  		ret = ice_fdir_hw_tbl_conf(pf, pf->main_vsi, pf->fdir.fdir_vsi,
> -					   seg, flow, false);
> +					   seg_tun + 1, flow, false);
>  	} else {
> -		seg_tun = (struct ice_flow_seg_info *)
> -			ice_malloc(hw, sizeof(*seg) * ICE_FD_HW_SEG_MAX);
> -		if (!seg_tun) {
> -			PMD_DRV_LOG(ERR, "No memory can be allocated");
> -			rte_free(seg);
> -			return -ENOMEM;
> -		}
> -		rte_memcpy(&seg_tun[1], seg, sizeof(*seg));
>  		ret = ice_fdir_hw_tbl_conf(pf, pf->main_vsi, pf->fdir.fdir_vsi,
>  					   seg_tun, flow, true);
>  	}
> @@ -1073,9 +1075,7 @@ ice_fdir_input_set_conf(struct ice_pf *pf, enum
> ice_fltr_ptype flow,
>  	if (!ret) {
>  		return ret;
>  	} else if (ret < 0) {
> -		rte_free(seg);
> -		if (is_tunnel)
> -			rte_free(seg_tun);
> +		rte_free(seg_tun);
>  		return (ret == -EEXIST) ? 0 : ret;
>  	} else {
>  		return ret;
> @@ -1285,7 +1285,8 @@ ice_fdir_create_filter(struct ice_adapter *ad,
>  	is_tun = ice_fdir_is_tunnel_profile(filter->tunnel_type);
> 
>  	ret = ice_fdir_input_set_conf(pf, filter->input.flow_type,
> -			filter->input_set, filter->tunnel_type);
> +				      filter->input_set, filter->outer_input_set,
> +				      filter->tunnel_type);
>  	if (ret) {
>  		rte_flow_error_set(error, -ret,
>  				   RTE_FLOW_ERROR_TYPE_HANDLE, NULL,
> @@ -2038,7 +2039,7 @@ ice_fdir_parse(struct ice_adapter *ad,
>  	ret = ice_fdir_parse_pattern(ad, pattern, error, filter);
>  	if (ret)
>  		goto error;
> -	input_set = filter->input_set;
> +	input_set = filter->input_set | filter->outer_input_set;
>  	if (!input_set || input_set & ~item->input_set_mask) {
>  		rte_flow_error_set(error, EINVAL,
>  				   RTE_FLOW_ERROR_TYPE_ITEM_SPEC,
> --
> 2.25.1


^ permalink raw reply	[flat|nested] 16+ messages in thread

end of thread, back to index

Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-09-08  7:39 [dpdk-dev] [PATCH v1 0/2] refactor and clean FDIR Zhirun Yan
2020-09-08  7:39 ` [dpdk-dev] [PATCH v1 1/2] net/ice: refactor FDIR set conf function Zhirun Yan
2020-09-08  7:39 ` [dpdk-dev] [PATCH v1 2/2] net/ice: merge inner/outer flow seg info for FDIR Zhirun Yan
2020-09-11  5:53   ` Zhang, Qi Z
2020-09-14  3:05 ` [dpdk-dev] [PATCH v1 0/2] refactor and clean FDIR Zhirun Yan
2020-09-14  3:05   ` [dpdk-dev] [PATCH v2 1/2] net/ice: refactor FDIR set conf function Zhirun Yan
2020-09-14 10:54     ` Ferruh Yigit
2020-09-15  5:30       ` Yan, Zhirun
2020-09-14  3:05   ` [dpdk-dev] [PATCH v2 2/2] net/ice: merge inner/outer flow seg info for FDIR Zhirun Yan
2020-09-14  5:23   ` [dpdk-dev] [PATCH v1 0/2] refactor and clean FDIR Zhang, Qi Z
2020-09-15  5:27 ` [dpdk-dev] [PATCH v3 " Zhirun Yan
2020-09-15  5:27   ` [dpdk-dev] [PATCH v3 1/2] net/ice: refactor FDIR set conf function Zhirun Yan
2020-09-18  9:28     ` Cao, Yahui
2020-09-15  5:27   ` [dpdk-dev] [PATCH v3 2/2] net/ice: merge inner/outer flow seg info for FDIR Zhirun Yan
2020-09-18  9:30     ` Cao, Yahui
2020-09-15  5:38   ` [dpdk-dev] [PATCH v3 0/2] refactor and clean FDIR Zhang, Qi Z

DPDK patches and discussions

Archives are clonable:
	git clone --mirror https://inbox.dpdk.org/dev/0 dev/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 dev dev/ https://inbox.dpdk.org/dev \
		dev@dpdk.org
	public-inbox-index dev


Newsgroup available over NNTP:
	nntp://inbox.dpdk.org/inbox.dpdk.dev


AGPL code for this site: git clone https://public-inbox.org/ public-inbox