DPDK patches and discussions
 help / color / mirror / Atom feed
From: Jiawei Wang <jiaweiw@nvidia.com>
To: orika@nvidia.com, viacheslavo@nvidia.com, matan@nvidia.com,
	thomas@monjalon.net, ferruh.yigit@intel.com,
	marko.kovacevic@intel.com, arybchenko@solarflare.com
Cc: dev@dpdk.org, rasland@nvidia.com, ian.stokes@intel.com,
	fbl@redhat.com, asafp@nvidia.com
Subject: [dpdk-dev] [PATCH v6 05/12] net/mlx5: split sample flow into two sub flows
Date: Wed,  9 Sep 2020 09:48:27 +0300	[thread overview]
Message-ID: <1599634114-148013-6-git-send-email-jiaweiw@nvidia.com> (raw)
In-Reply-To: <1599634114-148013-1-git-send-email-jiaweiw@nvidia.com>

Add the sampler action resource structs definition.

The flow with sample action will be splited into two sub flows,
the prefix flow with sample action, the suffix flow with the left
actions.

For the prefix flow, add the extra the tag action with unique id
to metadata register, and suffix flow will add the extra tag item
to match that unique id.

Signed-off-by: Jiawei Wang <jiaweiw@nvidia.com>
---
 drivers/net/mlx5/mlx5.c      |  11 ++
 drivers/net/mlx5/mlx5.h      |   3 +
 drivers/net/mlx5/mlx5_flow.c | 306 ++++++++++++++++++++++++++++++++++++++++---
 drivers/net/mlx5/mlx5_flow.h |  37 ++++++
 4 files changed, 341 insertions(+), 16 deletions(-)

diff --git a/drivers/net/mlx5/mlx5.c b/drivers/net/mlx5/mlx5.c
index 4a807fb..8d5f517 100644
--- a/drivers/net/mlx5/mlx5.c
+++ b/drivers/net/mlx5/mlx5.c
@@ -241,6 +241,17 @@ static LIST_HEAD(, mlx5_dev_ctx_shared) mlx5_dev_ctx_list =
 		.free = mlx5_free,
 		.type = "mlx5_jump_ipool",
 	},
+	{
+		.size = sizeof(struct mlx5_flow_dv_sample_resource),
+		.trunk_size = 64,
+		.grow_trunk = 3,
+		.grow_shift = 2,
+		.need_lock = 0,
+		.release_mem_en = 1,
+		.malloc = mlx5_malloc,
+		.free = mlx5_free,
+		.type = "mlx5_sample_ipool",
+	},
 #endif
 	{
 		.size = sizeof(struct mlx5_flow_meter),
diff --git a/drivers/net/mlx5/mlx5.h b/drivers/net/mlx5/mlx5.h
index 8e42483..9115391 100644
--- a/drivers/net/mlx5/mlx5.h
+++ b/drivers/net/mlx5/mlx5.h
@@ -39,6 +39,7 @@ enum mlx5_ipool_index {
 	MLX5_IPOOL_TAG, /* Pool for tag resource. */
 	MLX5_IPOOL_PORT_ID, /* Pool for port id resource. */
 	MLX5_IPOOL_JUMP, /* Pool for jump resource. */
+	MLX5_IPOOL_SAMPLE, /* Pool for sample resource. */
 #endif
 	MLX5_IPOOL_MTR, /* Pool for meter resource. */
 	MLX5_IPOOL_MCP, /* Pool for metadata resource. */
@@ -512,6 +513,7 @@ struct mlx5_flow_tbl_resource {
 /* Tables for metering splits should be added here. */
 #define MLX5_MAX_TABLES_EXTERNAL (MLX5_MAX_TABLES - 3)
 #define MLX5_MAX_TABLES_FDB UINT16_MAX
+#define MLX5_FLOW_TABLE_FACTOR 10
 
 /* ID generation structure. */
 struct mlx5_flow_id_pool {
@@ -640,6 +642,7 @@ struct mlx5_dev_ctx_shared {
 	struct mlx5_hlist *tag_table;
 	uint32_t port_id_action_list; /* List of port ID actions. */
 	uint32_t push_vlan_action_list; /* List of push VLAN actions. */
+	uint32_t sample_action_list; /* List of sample actions. */
 	struct mlx5_flow_counter_mng cmng; /* Counters management structure. */
 	struct mlx5_flow_default_miss_resource default_miss;
 	/* Default miss action resource structure. */
diff --git a/drivers/net/mlx5/mlx5_flow.c b/drivers/net/mlx5/mlx5_flow.c
index 4c29898..b5eec48 100644
--- a/drivers/net/mlx5/mlx5_flow.c
+++ b/drivers/net/mlx5/mlx5_flow.c
@@ -3543,6 +3543,8 @@ struct mlx5_flow_tunnel_info {
  *   Pointer to return the created subflow, may be NULL.
  * @param[in] prefix_layers
  *   Prefix subflow layers, may be 0.
+ * @param[in] prefix_mark
+ *   Prefix subflow mark flag, may be 0.
  * @param[in] attr
  *   Flow rule attributes.
  * @param[in] items
@@ -3563,6 +3565,7 @@ struct mlx5_flow_tunnel_info {
 			struct rte_flow *flow,
 			struct mlx5_flow **sub_flow,
 			uint64_t prefix_layers,
+			uint32_t prefix_mark,
 			const struct rte_flow_attr *attr,
 			const struct rte_flow_item items[],
 			const struct rte_flow_action actions[],
@@ -3582,10 +3585,13 @@ struct mlx5_flow_tunnel_info {
 		      dev_flow->handle, next);
 	/*
 	 * If dev_flow is as one of the suffix flow, some actions in suffix
-	 * flow may need some user defined item layer flags.
+	 * flow may need some user defined item layer flags, and pass the
+	 * Metadate rxq mark flag to suffix flow as well.
 	 */
 	if (prefix_layers)
 		dev_flow->handle->layers = prefix_layers;
+	if (prefix_mark)
+		dev_flow->handle->mark = 1;
 	if (sub_flow)
 		*sub_flow = dev_flow;
 	return flow_drv_translate(dev, dev_flow, attr, items, actions, error);
@@ -3915,6 +3921,143 @@ struct mlx5_flow_tunnel_info {
 	return 0;
 }
 
+
+/**
+ * Check the match action from the action list.
+ *
+ * @param[in] actions
+ *   Pointer to the list of actions.
+ * @param[in] action
+ *   The action to be check if exist.
+ *
+ * @return
+ *   > 0 the total number of actions.
+ *   0 if not found match action in action list.
+ */
+static int
+flow_check_match_action(const struct rte_flow_action actions[],
+					enum rte_flow_action_type action)
+{
+	int actions_n = 0;
+	int flag = 0;
+
+	for (; actions->type != RTE_FLOW_ACTION_TYPE_END; actions++) {
+		if (actions->type == action)
+			flag = 1;
+		actions_n++;
+	}
+	/* Count RTE_FLOW_ACTION_TYPE_END. */
+	return flag ? actions_n + 1 : 0;
+}
+
+/**
+ * Split the sample flow.
+ *
+ * As sample flow will split to two sub flow, sample flow with
+ * sample action, the other actions will move to new suffix flow.
+ *
+ * Also add unique tag id with tag action in the sample flow,
+ * the same tag id will be as match in the suffix flow.
+ *
+ * @param dev
+ *   Pointer to Ethernet device.
+ * @param[in] attr
+ *   Flow rule attributes.
+ * @param[out] sfx_items
+ *   Suffix flow match items (list terminated by the END pattern item).
+ * @param[in] actions
+ *   Associated actions (list terminated by the END action).
+ * @param[out] actions_sfx
+ *   Suffix flow actions.
+ * @param[out] actions_pre
+ *   Prefix flow actions.
+ *
+ * @return
+ *   0 on success, or unique flow_id, a negative errno value
+ *   otherwise and rte_errno is set.
+ */
+static int
+flow_sample_split_prep(struct rte_eth_dev *dev,
+		 const struct rte_flow_attr *attr,
+		 struct rte_flow_item sfx_items[],
+		 const struct rte_flow_action actions[],
+		 struct rte_flow_action actions_sfx[],
+		 struct rte_flow_action actions_pre[])
+{
+	struct mlx5_rte_flow_action_set_tag *set_tag;
+	struct mlx5_rte_flow_item_tag *tag_spec;
+	struct mlx5_rte_flow_item_tag *tag_mask;
+	struct rte_flow_item *tag_item;
+	struct rte_flow_action *tag_action = NULL;
+	bool pre_sample = true;
+	struct rte_flow_error error;
+	uint32_t tag_id = 0;
+	int ret;
+
+	/* Prepare the actions for prefix and suffix flow. */
+	for (; actions->type != RTE_FLOW_ACTION_TYPE_END; actions++) {
+		struct rte_flow_action **action_cur = NULL;
+
+		switch (actions->type) {
+		case RTE_FLOW_ACTION_TYPE_SAMPLE:
+			if (!attr->transfer) {
+				/* Add the extra tag action first for NIC-RX. */
+				tag_action = actions_pre;
+				tag_action->type = (enum rte_flow_action_type)
+						MLX5_RTE_FLOW_ACTION_TYPE_TAG;
+				actions_pre++;
+			}
+			break;
+		case RTE_FLOW_ACTION_TYPE_JUMP:
+		case RTE_FLOW_ACTION_TYPE_METER:
+		case RTE_FLOW_ACTION_TYPE_QUEUE:
+			action_cur = &actions_sfx;
+			break;
+		default:
+			break;
+		}
+		if (pre_sample && !action_cur)
+			action_cur = &actions_pre;
+		else
+			action_cur = &actions_sfx;
+		memcpy(*action_cur, actions, sizeof(struct rte_flow_action));
+		(*action_cur)++;
+		if (actions->type == RTE_FLOW_ACTION_TYPE_SAMPLE)
+			pre_sample = false;
+	}
+	/* Add end action to the actions. */
+	actions_sfx->type = RTE_FLOW_ACTION_TYPE_END;
+	actions_pre->type = RTE_FLOW_ACTION_TYPE_END;
+	if (!attr->transfer) {
+		actions_pre++;
+		/* Set the tag. */
+		set_tag = (void *)actions_pre;
+		ret = mlx5_flow_get_reg_id(dev, MLX5_APP_TAG, 0, &error);
+		if (ret < 0)
+			return ret;
+		set_tag->id = ret;
+		tag_id = flow_qrss_get_id(dev);
+		set_tag->data = tag_id;
+		assert(tag_action);
+		tag_action->conf = set_tag;
+		/* Prepare the suffix subflow items. */
+		tag_item = sfx_items++;
+		sfx_items->type = RTE_FLOW_ITEM_TYPE_END;
+		sfx_items++;
+		tag_spec = (struct mlx5_rte_flow_item_tag *)sfx_items;
+		tag_spec->data = tag_id;
+		tag_spec->id = set_tag->id;
+		tag_mask = tag_spec + 1;
+		tag_mask->data = UINT32_MAX;
+		tag_item->type = (enum rte_flow_item_type)
+				MLX5_RTE_FLOW_ITEM_TYPE_TAG;
+		tag_item->spec = tag_spec;
+		tag_item->last = NULL;
+		tag_item->mask = tag_mask;
+	}
+	return tag_id;
+}
+
 /**
  * The splitting for metadata feature.
  *
@@ -3931,6 +4074,8 @@ struct mlx5_flow_tunnel_info {
  *   Parent flow structure pointer.
  * @param[in] prefix_layers
  *   Prefix flow layer flags.
+ * @param[in] prefix_mark
+ *   Prefix subflow mark flag, may be 0.
  * @param[in] attr
  *   Flow rule attributes.
  * @param[in] items
@@ -3950,6 +4095,7 @@ struct mlx5_flow_tunnel_info {
 flow_create_split_metadata(struct rte_eth_dev *dev,
 			   struct rte_flow *flow,
 			   uint64_t prefix_layers,
+			   uint32_t prefix_mark,
 			   const struct rte_flow_attr *attr,
 			   const struct rte_flow_item items[],
 			   const struct rte_flow_action actions[],
@@ -3973,8 +4119,9 @@ struct mlx5_flow_tunnel_info {
 	    config->dv_xmeta_en == MLX5_XMETA_MODE_LEGACY ||
 	    !mlx5_flow_ext_mreg_supported(dev))
 		return flow_create_split_inner(dev, flow, NULL, prefix_layers,
-					       attr, items, actions, external,
-					       flow_idx, error);
+					       prefix_mark, attr, items,
+					       actions, external, flow_idx,
+					       error);
 	actions_n = flow_parse_metadata_split_actions_info(actions, &qrss,
 							   &encap_idx);
 	if (qrss) {
@@ -4059,7 +4206,8 @@ struct mlx5_flow_tunnel_info {
 			goto exit;
 	}
 	/* Add the unmodified original or prefix subflow. */
-	ret = flow_create_split_inner(dev, flow, &dev_flow, prefix_layers, attr,
+	ret = flow_create_split_inner(dev, flow, &dev_flow, prefix_layers,
+				      prefix_mark, attr,
 				      items, ext_actions ? ext_actions :
 				      actions, external, flow_idx, error);
 	if (ret < 0)
@@ -4122,7 +4270,7 @@ struct mlx5_flow_tunnel_info {
 		}
 		dev_flow = NULL;
 		/* Add suffix subflow to execute Q/RSS. */
-		ret = flow_create_split_inner(dev, flow, &dev_flow, layers,
+		ret = flow_create_split_inner(dev, flow, &dev_flow, layers, 0,
 					      &q_attr, mtr_sfx ? items :
 					      q_items, q_actions,
 					      external, flow_idx, error);
@@ -4158,6 +4306,10 @@ struct mlx5_flow_tunnel_info {
  *   Pointer to Ethernet device.
  * @param[in] flow
  *   Parent flow structure pointer.
+ * @param[in] prefix_layers
+ *   Prefix subflow layers, may be 0.
+ * @param[in] prefix_mark
+ *   Prefix subflow mark flag, may be 0.
  * @param[in] attr
  *   Flow rule attributes.
  * @param[in] items
@@ -4175,12 +4327,14 @@ struct mlx5_flow_tunnel_info {
  */
 static int
 flow_create_split_meter(struct rte_eth_dev *dev,
-			   struct rte_flow *flow,
-			   const struct rte_flow_attr *attr,
-			   const struct rte_flow_item items[],
-			   const struct rte_flow_action actions[],
-			   bool external, uint32_t flow_idx,
-			   struct rte_flow_error *error)
+			struct rte_flow *flow,
+			uint64_t prefix_layers,
+			uint32_t prefix_mark,
+			const struct rte_flow_attr *attr,
+			const struct rte_flow_item items[],
+			const struct rte_flow_action actions[],
+			bool external, uint32_t flow_idx,
+			struct rte_flow_error *error)
 {
 	struct mlx5_priv *priv = dev->data->dev_private;
 	struct rte_flow_action *sfx_actions = NULL;
@@ -4223,8 +4377,10 @@ struct mlx5_flow_tunnel_info {
 			goto exit;
 		}
 		/* Add the prefix subflow. */
-		ret = flow_create_split_inner(dev, flow, &dev_flow, 0, attr,
-					      items, pre_actions, external,
+		ret = flow_create_split_inner(dev, flow, &dev_flow,
+					      prefix_layers, 0,
+					      attr, items,
+					      pre_actions, external,
 					      flow_idx, error);
 		if (ret) {
 			ret = -rte_errno;
@@ -4239,8 +4395,10 @@ struct mlx5_flow_tunnel_info {
 	/* Add the prefix subflow. */
 	ret = flow_create_split_metadata(dev, flow, dev_flow ?
 					 flow_get_prefix_layer_flags(dev_flow) :
-					 0, &sfx_attr,
-					 sfx_items ? sfx_items : items,
+					 prefix_layers, dev_flow ?
+					 dev_flow->handle->mark : prefix_mark,
+					 &sfx_attr, sfx_items ?
+					 sfx_items : items,
 					 sfx_actions ? sfx_actions : actions,
 					 external, flow_idx, error);
 exit:
@@ -4250,6 +4408,122 @@ struct mlx5_flow_tunnel_info {
 }
 
 /**
+ * The splitting for sample feature.
+ *
+ * The sample flow will be split to two flows as prefix and
+ * suffix flow.
+ *
+ * @param dev
+ *   Pointer to Ethernet device.
+ * @param[in] flow
+ *   Parent flow structure pointer.
+ * @param[in] attr
+ *   Flow rule attributes.
+ * @param[in] items
+ *   Pattern specification (list terminated by the END pattern item).
+ * @param[in] actions
+ *   Associated actions (list terminated by the END action).
+ * @param[in] external
+ *   This flow rule is created by request external to PMD.
+ * @param[in] flow_idx
+ *   This memory pool index to the flow.
+ * @param[out] error
+ *   Perform verbose error reporting if not NULL.
+ * @return
+ *   0 on success, negative value otherwise
+ */
+static int
+flow_create_split_sample(struct rte_eth_dev *dev,
+			   struct rte_flow *flow,
+			   const struct rte_flow_attr *attr,
+			   const struct rte_flow_item items[],
+			   const struct rte_flow_action actions[],
+			   bool external, uint32_t flow_idx,
+			   struct rte_flow_error *error)
+{
+	struct mlx5_priv *priv = dev->data->dev_private;
+	struct rte_flow_action *sfx_actions = NULL;
+	struct rte_flow_action *pre_actions = NULL;
+	struct rte_flow_item *sfx_items = NULL;
+	struct mlx5_flow *dev_flow = NULL;
+	struct rte_flow_attr sfx_attr = *attr;
+#ifdef HAVE_IBV_FLOW_DV_SUPPORT
+	struct mlx5_flow_dv_sample_resource *sample_res;
+	struct mlx5_flow_tbl_data_entry *sfx_tbl_data;
+	struct mlx5_flow_tbl_resource *sfx_tbl;
+	union mlx5_flow_tbl_key sfx_table_key;
+#endif
+	size_t act_size;
+	size_t item_size;
+	int32_t tag_id = 0;
+	int actions_n = 0;
+	int ret = 0;
+
+	if (priv->sampler_en)
+		actions_n = flow_check_match_action(actions,
+					RTE_FLOW_ACTION_TYPE_SAMPLE);
+	if (actions_n) {
+		/* The prefix actions must includes sample, tag, end. */
+		act_size = sizeof(struct rte_flow_action) * (actions_n * 2 + 1)
+			   + sizeof(struct mlx5_rte_flow_action_set_tag);
+		/* tag, end. */
+#define SAMPLE_SUFFIX_ITEM 2
+		item_size = sizeof(struct rte_flow_item) * SAMPLE_SUFFIX_ITEM +
+			    sizeof(struct mlx5_rte_flow_item_tag) * 2;
+		sfx_actions = rte_zmalloc(__func__, (act_size + item_size), 0);
+		if (!sfx_actions)
+			return rte_flow_error_set(error, ENOMEM,
+						  RTE_FLOW_ERROR_TYPE_ACTION,
+						  NULL, "no memory to split "
+						  "sample flow");
+		if (!attr->transfer)
+			sfx_items = (struct rte_flow_item *)((char *)sfx_actions
+					+ act_size);
+		pre_actions = sfx_actions + actions_n;
+		tag_id = flow_sample_split_prep(dev, attr, sfx_items,
+						actions, sfx_actions,
+						pre_actions);
+		if (tag_id < 0 || (!attr->transfer && !tag_id)) {
+			ret = -rte_errno;
+			goto exit;
+		}
+		/* Add the prefix subflow. */
+		ret = flow_create_split_inner(dev, flow, &dev_flow, 0, 0, attr,
+					      items, pre_actions, external,
+					      flow_idx, error);
+		if (ret) {
+			ret = -rte_errno;
+			goto exit;
+		}
+		dev_flow->handle->split_flow_id = tag_id;
+#ifdef HAVE_IBV_FLOW_DV_SUPPORT
+		/* Set the sfx group attr. */
+		sample_res = (struct mlx5_flow_dv_sample_resource *)
+					dev_flow->dv.sample_res;
+		sfx_tbl = (struct mlx5_flow_tbl_resource *)
+					sample_res->normal_path_tbl;
+		sfx_tbl_data = container_of(sfx_tbl,
+					struct mlx5_flow_tbl_data_entry, tbl);
+		sfx_table_key.v64 = sfx_tbl_data->entry.key;
+		sfx_attr.group = sfx_attr.transfer ?
+					(sfx_table_key.table_id - 1) :
+					sfx_table_key.table_id;
+#endif
+	}
+	/* Add the suffix subflow. */
+	ret = flow_create_split_meter(dev, flow, dev_flow ?
+				 flow_get_prefix_layer_flags(dev_flow) : 0,
+				 dev_flow ? dev_flow->handle->mark : 0,
+				 &sfx_attr, sfx_items ? sfx_items : items,
+				 sfx_actions ? sfx_actions : actions,
+				 external, flow_idx, error);
+exit:
+	if (sfx_actions)
+		rte_free(sfx_actions);
+	return ret;
+}
+
+/**
  * Split the flow to subflow set. The splitters might be linked
  * in the chain, like this:
  * flow_create_split_outer() calls:
@@ -4297,7 +4571,7 @@ struct mlx5_flow_tunnel_info {
 {
 	int ret;
 
-	ret = flow_create_split_meter(dev, flow, attr, items,
+	ret = flow_create_split_sample(dev, flow, attr, items,
 					 actions, external, flow_idx, error);
 	MLX5_ASSERT(ret <= 0);
 	return ret;
diff --git a/drivers/net/mlx5/mlx5_flow.h b/drivers/net/mlx5/mlx5_flow.h
index 41404de..9c609cb 100644
--- a/drivers/net/mlx5/mlx5_flow.h
+++ b/drivers/net/mlx5/mlx5_flow.h
@@ -507,6 +507,39 @@ struct mlx5_flow_tbl_data_entry {
 	uint32_t idx; /**< index for the indexed mempool. */
 };
 
+/* Sub rdma-core actions list. */
+struct mlx5_flow_sub_actions_list {
+	uint32_t actions_num; /**< Number of sample actions. */
+	uint64_t action_flags;
+	void *dr_queue_action;
+	void *dr_tag_action;
+	void *dr_cnt_action;
+};
+
+/* Sample sub-actions resource list. */
+struct mlx5_flow_sub_actions_idx {
+	uint32_t rix_hrxq; /**< Hash Rx queue object index. */
+	uint32_t rix_tag; /**< Index to the tag action. */
+	uint32_t cnt;
+};
+
+/* Sample action resource structure. */
+struct mlx5_flow_dv_sample_resource {
+	ILIST_ENTRY(uint32_t)next; /**< Pointer to next element. */
+	rte_atomic32_t refcnt; /**< Reference counter. */
+	void *verbs_action; /**< Verbs sample action object. */
+	uint8_t ft_type; /** Flow Table Type */
+	uint32_t ft_id; /** Flow Table Level */
+	uint32_t ratio;   /** Sample Ratio */
+	uint64_t set_action; /** Restore reg_c0 value */
+	void *normal_path_tbl; /** Flow Table pointer */
+	void *default_miss; /** default_miss dr_action. */
+	struct mlx5_flow_sub_actions_idx sample_idx;
+	/**< Action index resources. */
+	struct mlx5_flow_sub_actions_list sample_act;
+	/**< Action resources. */
+};
+
 /* Verbs specification header. */
 struct ibv_spec_header {
 	enum ibv_flow_spec_type type;
@@ -539,6 +572,8 @@ struct mlx5_flow_handle_dv {
 	/**< Index to push VLAN action resource in cache. */
 	uint32_t rix_tag;
 	/**< Index to the tag action. */
+	uint32_t rix_sample;
+	/**< Index to sample action resource in cache. */
 } __rte_packed;
 
 /** Device flow handle structure: used both for creating & destroying. */
@@ -604,6 +639,8 @@ struct mlx5_flow_dv_workspace {
 	/**< Pointer to the jump action resource. */
 	struct mlx5_flow_dv_match_params value;
 	/**< Holds the value that the packet is compared to. */
+	struct mlx5_flow_dv_sample_resource *sample_res;
+	/**< Pointer to the sample action resource. */
 };
 
 /*
-- 
1.8.3.1


  parent reply	other threads:[~2020-09-09  6:49 UTC|newest]

Thread overview: 186+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-06-25 16:26 [dpdk-dev] [PATCH 0/8] support the flow-based traffic sampling Jiawei Wang
2020-06-25 16:26 ` [dpdk-dev] [PATCH 1/8] ethdev: introduce sample action for rte flow Jiawei Wang
2020-06-25 17:55   ` Jerin Jacob
2020-06-25 19:29     ` Thomas Monjalon
2020-06-26 10:35       ` Jerin Jacob
2020-06-26 10:45         ` Thomas Monjalon
2020-06-26 11:10           ` Jerin Jacob
2020-06-28  8:14             ` Andrew Rybchenko
2020-06-28 13:16             ` Jiawei(Jonny) Wang
2020-06-28 13:37               ` Jerin Jacob
2020-06-28 15:52                 ` Jiawei(Jonny) Wang
2020-07-02  0:18                   ` Stephen Hemminger
2020-07-02  7:16                     ` Ori Kam
2020-06-28  8:27   ` Andrew Rybchenko
2020-06-28 16:16     ` Jiawei(Jonny) Wang
2020-06-28 16:18       ` Andrew Rybchenko
2020-06-29 11:40         ` Ori Kam
2020-06-29 13:11           ` Andrew Rybchenko
2020-06-29 14:29             ` Ori Kam
2020-06-30 16:42               ` Ori Kam
2020-07-01  9:37   ` Ori Kam
2020-06-25 16:26 ` [dpdk-dev] [PATCH 2/8] common/mlx5: glue for default miss and sample action Jiawei Wang
2020-06-30 15:25   ` Ori Kam
2020-06-25 16:26 ` [dpdk-dev] [PATCH 3/8] common/mlx5: query sampler object capability via DevX Jiawei Wang
2020-06-30 17:38   ` Ori Kam
2020-06-25 16:26 ` [dpdk-dev] [PATCH 4/8] net/mlx5: add the validate sample action Jiawei Wang
2020-06-30 17:59   ` Ori Kam
2020-07-01 13:55     ` Jiawei(Jonny) Wang
2020-06-25 16:26 ` [dpdk-dev] [PATCH 5/8] net/mlx5: split sample flow into two sub flows Jiawei Wang
2020-06-30 18:18   ` Ori Kam
2020-06-25 16:26 ` [dpdk-dev] [PATCH 6/8] net/mlx5: update translate function for sample action Jiawei Wang
2020-06-30 19:54   ` Ori Kam
2020-07-01 15:06     ` Jiawei(Jonny) Wang
2020-06-25 16:26 ` [dpdk-dev] [PATCH 7/8] net/mlx5: update the metadata register c0 support Jiawei Wang
2020-06-25 16:26 ` [dpdk-dev] [PATCH 8/8] app/testpmd: add testpmd command for sample action Jiawei Wang
2020-06-30 15:23   ` Ori Kam
2020-07-02 17:43 ` [dpdk-dev] [PATCH 0/7] support the flow-based traffic sampling Jiawei Wang
2020-07-02 17:43   ` [dpdk-dev] [PATCH 1/7] ethdev: introduce sample action for rte flow Jiawei Wang
2020-07-02 17:43   ` [dpdk-dev] [PATCH 2/7] common/mlx5: glue for sample action Jiawei Wang
2020-07-02 17:43   ` [dpdk-dev] [PATCH 3/7] common/mlx5: query sampler object capability via DevX Jiawei Wang
2020-07-02 17:43   ` [dpdk-dev] [PATCH 4/7] net/mlx5: add the validate sample action Jiawei Wang
2020-07-02 17:43   ` [dpdk-dev] [PATCH 5/7] net/mlx5: split sample flow into two sub flows Jiawei Wang
2020-07-02 17:43   ` [dpdk-dev] [PATCH 6/7] net/mlx5: update translate function for sample action Jiawei Wang
2020-07-02 17:43   ` [dpdk-dev] [PATCH 7/7] app/testpmd: add testpmd command " Jiawei Wang
2020-07-02 18:43 ` [dpdk-dev] [PATCH v2 0/7] [v2] support the flow-based traffic sampling Jiawei Wang
2020-07-02 18:43   ` [dpdk-dev] [PATCH v2 1/7] ethdev: introduce sample action for rte flow Jiawei Wang
2020-07-03  6:39     ` Jerin Jacob
2020-07-03 14:55       ` Matan Azrad
2020-07-03 15:08         ` Jerin Jacob
2020-07-03 15:27           ` Matan Azrad
2020-07-03 15:27           ` Thomas Monjalon
2020-07-03 15:36             ` Jerin Jacob
2020-07-04 19:26               ` Matan Azrad
2020-07-05  1:21                 ` Jerin Jacob
2020-07-05  4:52                   ` Matan Azrad
2020-07-06  8:37                     ` Jerin Jacob
2020-07-04 14:35             ` Ajit Khaparde
2020-07-04 14:44       ` Ajit Khaparde
2020-07-05  8:55         ` Thomas Monjalon
2020-07-05 23:54           ` Ajit Khaparde
2020-07-04 13:04     ` Andrew Rybchenko
2020-07-05 10:18       ` Ori Kam
2020-07-05 23:54         ` Ajit Khaparde
2020-07-06  6:53         ` Jiawei(Jonny) Wang
2020-07-02 18:43   ` [dpdk-dev] [PATCH v2 2/7] common/mlx5: glue for sample action Jiawei Wang
2020-07-02 18:43   ` [dpdk-dev] [PATCH v2 3/7] common/mlx5: query sampler object capability via DevX Jiawei Wang
2020-07-02 18:43   ` [dpdk-dev] [PATCH v2 4/7] net/mlx5: add the validate sample action Jiawei Wang
2020-07-05 19:30     ` Ori Kam
2020-07-02 18:43   ` [dpdk-dev] [PATCH v2 5/7] net/mlx5: split sample flow into two sub flows Jiawei Wang
2020-07-02 18:43   ` [dpdk-dev] [PATCH v2 6/7] net/mlx5: update translate function for sample action Jiawei Wang
2020-07-05 19:32     ` Ori Kam
2020-07-02 18:43   ` [dpdk-dev] [PATCH v2 7/7] app/testpmd: add testpmd command " Jiawei Wang
2020-07-06 17:51   ` [dpdk-dev] [PATCH v3 0/7] support the flow-based traffic sampling Jiawei Wang
2020-07-06 17:51     ` [dpdk-dev] [PATCH v3 1/7] ethdev: introduce sample action for rte flow Jiawei Wang
2020-07-07 10:26       ` Andrew Rybchenko
2020-07-06 17:51     ` [dpdk-dev] [PATCH v3 2/7] common/mlx5: glue for sample action Jiawei Wang
2020-07-06 17:51     ` [dpdk-dev] [PATCH v3 3/7] common/mlx5: query sampler object capability via DevX Jiawei Wang
2020-07-06 17:51     ` [dpdk-dev] [PATCH v3 4/7] net/mlx5: add the validate sample action Jiawei Wang
2020-07-06 17:51     ` [dpdk-dev] [PATCH v3 5/7] net/mlx5: split sample flow into two sub flows Jiawei Wang
2020-07-06 17:51     ` [dpdk-dev] [PATCH v3 6/7] net/mlx5: update translate function for sample action Jiawei Wang
2020-07-06 17:51     ` [dpdk-dev] [PATCH v3 7/7] app/testpmd: add testpmd command " Jiawei Wang
2020-07-06 18:23     ` [dpdk-dev] [PATCH v3 0/7] support the flow-based traffic sampling Stephen Hemminger
2020-07-06 19:14       ` Ori Kam
2020-08-26 16:01     ` [dpdk-dev] [PATCH v4 " Jiawei Wang
2020-08-26 16:01       ` [dpdk-dev] [PATCH v4 1/7] ethdev: introduce sample action for rte flow Jiawei Wang
2020-08-26 16:02       ` [dpdk-dev] [PATCH v4 2/7] common/mlx5: glue for sample action Jiawei Wang
2020-08-26 16:02       ` [dpdk-dev] [PATCH v4 3/7] common/mlx5: query sampler object capability via DevX Jiawei Wang
2020-08-26 16:02       ` [dpdk-dev] [PATCH v4 4/7] net/mlx5: add the validate sample action Jiawei Wang
2020-08-26 16:02       ` [dpdk-dev] [PATCH v4 5/7] net/mlx5: split sample flow into two sub flows Jiawei Wang
2020-08-26 16:02       ` [dpdk-dev] [PATCH v4 6/7] net/mlx5: update translate function for sample action Jiawei Wang
2020-08-26 16:02       ` [dpdk-dev] [PATCH v4 7/7] app/testpmd: add testpmd command " Jiawei Wang
2020-08-27 15:01       ` [dpdk-dev] [PATCH v5 0/7] support the flow-based traffic sampling Jiawei Wang
2020-08-27 15:01         ` [dpdk-dev] [PATCH v5 1/7] ethdev: introduce sample action for rte flow Jiawei Wang
2020-09-04  4:17           ` Ajit Khaparde
2020-09-08 14:38             ` Ori Kam
2020-08-27 15:01         ` [dpdk-dev] [PATCH v5 2/7] common/mlx5: glue for sample action Jiawei Wang
2020-08-27 15:01         ` [dpdk-dev] [PATCH v5 3/7] common/mlx5: query sampler object capability via DevX Jiawei Wang
2020-08-27 15:01         ` [dpdk-dev] [PATCH v5 4/7] net/mlx5: add the validate sample action Jiawei Wang
2020-08-27 15:01         ` [dpdk-dev] [PATCH v5 5/7] net/mlx5: split sample flow into two sub flows Jiawei Wang
2020-08-27 15:01         ` [dpdk-dev] [PATCH v5 6/7] net/mlx5: update translate function for sample action Jiawei Wang
2020-08-27 15:01         ` [dpdk-dev] [PATCH v5 7/7] app/testpmd: add testpmd command " Jiawei Wang
2020-09-09  6:48         ` [dpdk-dev] [PATCH v6 00/12] support the flow-based traffic sampling Jiawei Wang
2020-09-09  6:48           ` [dpdk-dev] [PATCH v6 01/12] ethdev: introduce sample action for rte flow Jiawei Wang
2020-09-09  6:48           ` [dpdk-dev] [PATCH v6 02/12] common/mlx5: glue for sample action Jiawei Wang
2020-09-09  6:48           ` [dpdk-dev] [PATCH v6 03/12] common/mlx5: query sampler object capability via DevX Jiawei Wang
2020-09-09  6:48           ` [dpdk-dev] [PATCH v6 04/12] net/mlx5: add the validate sample action Jiawei Wang
2020-09-09  6:48           ` Jiawei Wang [this message]
2020-09-09  6:48           ` [dpdk-dev] [PATCH v6 06/12] net/mlx5: update translate function for " Jiawei Wang
2020-09-09  6:48           ` [dpdk-dev] [PATCH v6 07/12] app/testpmd: add testpmd command " Jiawei Wang
2020-09-09  6:48           ` [dpdk-dev] [PATCH v6 08/12] common/mlx5: add glue function for mirroring Jiawei Wang
2020-09-09  6:48           ` [dpdk-dev] [PATCH v6 09/12] net/mlx5: update validation for mirroring flow Jiawei Wang
2020-09-09  6:48           ` [dpdk-dev] [PATCH v6 10/12] net/mlx5: update translate function for mirror Jiawei Wang
2020-09-09  6:48           ` [dpdk-dev] [PATCH v6 11/12] app/testpmd: add port and encap support for sample action Jiawei Wang
2020-09-21 22:27             ` Ajit Khaparde
2020-09-22 12:32               ` Jiawei(Jonny) Wang
2020-09-09  6:48           ` [dpdk-dev] [PATCH v6 12/12] net/mlx5: support the native port id actions for mirroring Jiawei Wang
2020-09-22 17:19           ` [dpdk-dev] [PATCH v7 00/12] support the flow-based traffic sampling Jiawei Wang
2020-09-22 17:19             ` [dpdk-dev] [PATCH v7 01/12] ethdev: introduce sample action for rte flow Jiawei Wang
2020-09-22 17:19             ` [dpdk-dev] [PATCH v7 02/12] common/mlx5: glue for sample action Jiawei Wang
2020-09-22 17:19             ` [dpdk-dev] [PATCH v7 03/12] common/mlx5: query sampler object capability via DevX Jiawei Wang
2020-09-22 17:19             ` [dpdk-dev] [PATCH v7 04/12] net/mlx5: add the validate sample action Jiawei Wang
2020-09-22 17:19             ` [dpdk-dev] [PATCH v7 05/12] net/mlx5: split sample flow into two sub flows Jiawei Wang
2020-09-22 17:19             ` [dpdk-dev] [PATCH v7 06/12] net/mlx5: update translate function for sample action Jiawei Wang
2020-09-22 17:19             ` [dpdk-dev] [PATCH v7 07/12] app/testpmd: add testpmd command " Jiawei Wang
2020-09-22 17:19             ` [dpdk-dev] [PATCH v7 08/12] common/mlx5: add glue function for mirroring Jiawei Wang
2020-09-22 17:19             ` [dpdk-dev] [PATCH v7 09/12] net/mlx5: update validation for mirroring flow Jiawei Wang
2020-09-22 17:19             ` [dpdk-dev] [PATCH v7 10/12] net/mlx5: update translate function for mirror Jiawei Wang
2020-09-22 17:19             ` [dpdk-dev] [PATCH v7 11/12] app/testpmd: add port and encap support for sample action Jiawei Wang
2020-09-22 17:19             ` [dpdk-dev] [PATCH v7 12/12] doc: add E-Switch sample flow limitation description Jiawei Wang
2020-09-27  6:18             ` [dpdk-dev] [PATCH v8 00/13] support the flow-based traffic sampling Jiawei Wang
2020-09-27  6:18               ` [dpdk-dev] [PATCH v8 01/13] ethdev: introduce sample action for rte flow Jiawei Wang
2020-10-01 20:51                 ` Ajit Khaparde
2020-09-27  6:18               ` [dpdk-dev] [PATCH v8 02/13] common/mlx5: glue for sample action Jiawei Wang
2020-09-27  6:18               ` [dpdk-dev] [PATCH v8 03/13] common/mlx5: query sampler object capability via DevX Jiawei Wang
2020-09-27  6:18               ` [dpdk-dev] [PATCH v8 04/13] net/mlx5: add the validate sample action Jiawei Wang
2020-09-27  6:18               ` [dpdk-dev] [PATCH v8 05/13] net/mlx5: split sample flow into two sub flows Jiawei Wang
2020-09-27  6:18               ` [dpdk-dev] [PATCH v8 06/13] net/mlx5: update translate function for sample action Jiawei Wang
2020-09-27  6:18               ` [dpdk-dev] [PATCH v8 07/13] app/testpmd: add testpmd command " Jiawei Wang
2020-09-27  6:18               ` [dpdk-dev] [PATCH v8 08/13] common/mlx5: add glue function for mirroring Jiawei Wang
2020-09-27  6:18               ` [dpdk-dev] [PATCH v8 09/13] net/mlx5: update validation for mirroring flow Jiawei Wang
2020-09-27  6:18               ` [dpdk-dev] [PATCH v8 10/13] net/mlx5: update translate function for mirror Jiawei Wang
2020-09-27  6:18               ` [dpdk-dev] [PATCH v8 11/13] app/testpmd: add port and encap support for sample action Jiawei Wang
2020-09-27  6:18               ` [dpdk-dev] [PATCH v8 12/13] doc: add the sample flow limitation description Jiawei Wang
2020-09-27  6:18               ` [dpdk-dev] [PATCH v8 13/13] doc: update offload dependencies document Jiawei Wang
2020-09-27  6:30                 ` Asaf Penso
2020-10-09 13:46               ` [dpdk-dev] [PATCH v9 0/3] support the flow-based traffic sampling Jiawei Wang
2020-10-09 13:46                 ` [dpdk-dev] [PATCH v9 1/3] ethdev: introduce sample action for rte flow Jiawei Wang
2020-10-09 22:07                   ` Ajit Khaparde
2020-10-09 13:46                 ` [dpdk-dev] [PATCH v9 2/3] app/testpmd: add testpmd command for sample action Jiawei Wang
2020-10-09 13:46                 ` [dpdk-dev] [PATCH v9 3/3] app/testpmd: add port and encap support " Jiawei Wang
2020-10-09 13:55                 ` [dpdk-dev] [PATCH v9 0/3] support the flow-based traffic sampling Jiawei(Jonny) Wang
2020-10-12 18:18                 ` Ferruh Yigit
2020-10-09 13:50               ` [dpdk-dev] [PATCH 00/10] Add sampling and mirroring support in MLX5 PMD Jiawei Wang
2020-10-09 13:50                 ` [dpdk-dev] [PATCH 01/10] common/mlx5: glue for sample action Jiawei Wang
2020-10-09 13:50                 ` [dpdk-dev] [PATCH 02/10] common/mlx5: query sampler object capability via DevX Jiawei Wang
2020-10-09 13:50                 ` [dpdk-dev] [PATCH 03/10] net/mlx5: add the validate sample action Jiawei Wang
2020-10-09 13:50                 ` [dpdk-dev] [PATCH 04/10] net/mlx5: split sample flow into two sub flows Jiawei Wang
2020-10-09 13:50                 ` [dpdk-dev] [PATCH 05/10] net/mlx5: update translate function for sample action Jiawei Wang
2020-10-09 13:50                 ` [dpdk-dev] [PATCH 06/10] common/mlx5: add glue function for mirroring Jiawei Wang
2020-10-09 13:50                 ` [dpdk-dev] [PATCH 07/10] net/mlx5: update validation for mirroring flow Jiawei Wang
2020-10-09 13:50                 ` [dpdk-dev] [PATCH 08/10] net/mlx5: update translate function for mirror Jiawei Wang
2020-10-09 13:50                 ` [dpdk-dev] [PATCH 09/10] doc: add the sample flow limitation description Jiawei Wang
2020-10-09 13:50                 ` [dpdk-dev] [PATCH 10/10] doc: update offload dependencies document Jiawei Wang
2020-10-13  8:17                 ` [dpdk-dev] [PATCH v2 00/10] Add sampling and mirroring support in MLX5 PMD Jiawei Wang
2020-10-13  8:17                   ` [dpdk-dev] [PATCH v2 01/10] common/mlx5: glue for sample action Jiawei Wang
2020-10-13  8:17                   ` [dpdk-dev] [PATCH v2 02/10] common/mlx5: query sampler object capability via DevX Jiawei Wang
2020-10-13  8:17                   ` [dpdk-dev] [PATCH v2 03/10] net/mlx5: add the validate sample action Jiawei Wang
2020-10-13  8:17                   ` [dpdk-dev] [PATCH v2 04/10] net/mlx5: split sample flow into two sub flows Jiawei Wang
2020-10-13  8:17                   ` [dpdk-dev] [PATCH v2 05/10] net/mlx5: update translate function for sample action Jiawei Wang
2020-10-13  8:17                   ` [dpdk-dev] [PATCH v2 06/10] common/mlx5: add glue function for mirroring Jiawei Wang
2020-10-13  8:17                   ` [dpdk-dev] [PATCH v2 07/10] net/mlx5: update validation for mirroring flow Jiawei Wang
2020-10-13  8:17                   ` [dpdk-dev] [PATCH v2 08/10] net/mlx5: update translate function for mirror Jiawei Wang
2020-10-13  8:17                   ` [dpdk-dev] [PATCH v2 09/10] doc: add the sample flow limitation description Jiawei Wang
2020-10-13  8:17                   ` [dpdk-dev] [PATCH v2 10/10] doc: update offload dependencies document Jiawei Wang
2020-10-13 14:11                   ` [dpdk-dev] [PATCH v3 00/10] Add sampling and mirroring support in MLX5 PMD Jiawei Wang
2020-10-13 14:11                     ` [dpdk-dev] [PATCH v3 01/10] common/mlx5: glue for sample action Jiawei Wang
2020-10-13 14:11                     ` [dpdk-dev] [PATCH v3 02/10] common/mlx5: query sampler object capability via DevX Jiawei Wang
2020-10-13 14:11                     ` [dpdk-dev] [PATCH v3 03/10] net/mlx5: add the validate sample action Jiawei Wang
2020-10-13 14:11                     ` [dpdk-dev] [PATCH v3 04/10] net/mlx5: split sample flow into two sub flows Jiawei Wang
2020-10-13 14:11                     ` [dpdk-dev] [PATCH v3 05/10] net/mlx5: update translate function for sample action Jiawei Wang
2020-10-13 14:11                     ` [dpdk-dev] [PATCH v3 06/10] common/mlx5: add glue function for mirroring Jiawei Wang
2020-10-13 14:11                     ` [dpdk-dev] [PATCH v3 07/10] net/mlx5: update validation for mirroring flow Jiawei Wang
2020-10-13 14:11                     ` [dpdk-dev] [PATCH v3 08/10] net/mlx5: update translate function for mirror Jiawei Wang
2020-10-13 14:11                     ` [dpdk-dev] [PATCH v3 09/10] doc: add the sample flow limitation description Jiawei Wang
2020-10-13 14:11                     ` [dpdk-dev] [PATCH v3 10/10] doc: update offload dependencies document Jiawei Wang
2020-10-14 11:06                     ` [dpdk-dev] [PATCH v3 00/10] Add sampling and mirroring support in MLX5 PMD Raslan Darawsheh

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=1599634114-148013-6-git-send-email-jiaweiw@nvidia.com \
    --to=jiaweiw@nvidia.com \
    --cc=arybchenko@solarflare.com \
    --cc=asafp@nvidia.com \
    --cc=dev@dpdk.org \
    --cc=fbl@redhat.com \
    --cc=ferruh.yigit@intel.com \
    --cc=ian.stokes@intel.com \
    --cc=marko.kovacevic@intel.com \
    --cc=matan@nvidia.com \
    --cc=orika@nvidia.com \
    --cc=rasland@nvidia.com \
    --cc=thomas@monjalon.net \
    --cc=viacheslavo@nvidia.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).