All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/2] net/cnxk: update meter bpf ID in rq
@ 2021-11-30  6:41 Rakesh Kudurumalla
  2021-11-30  6:41 ` [PATCH 2/2] common/cnxk: update meter algorithm in band profile Rakesh Kudurumalla
                   ` (4 more replies)
  0 siblings, 5 replies; 12+ messages in thread
From: Rakesh Kudurumalla @ 2021-11-30  6:41 UTC (permalink / raw)
  To: Nithin Dabilpuram, Kiran Kumar K, Sunil Kumar Kori, Satha Rao
  Cc: dev, Rakesh Kudurumalla

Patch updates configured meter bpf is in rq context
during meter creation

Signed-off-by: Rakesh Kudurumalla <rkudurumalla@marvell.com>
---
 drivers/net/cnxk/cn10k_rte_flow.c  |  9 ++++-----
 drivers/net/cnxk/cnxk_ethdev_mtr.c | 25 ++++++++++++++++++-------
 2 files changed, 22 insertions(+), 12 deletions(-)

diff --git a/drivers/net/cnxk/cn10k_rte_flow.c b/drivers/net/cnxk/cn10k_rte_flow.c
index b830abe63e..402bb1c72f 100644
--- a/drivers/net/cnxk/cn10k_rte_flow.c
+++ b/drivers/net/cnxk/cn10k_rte_flow.c
@@ -36,20 +36,20 @@ cn10k_mtr_configure(struct rte_eth_dev *eth_dev,
 	for (i = 0; actions[i].type != RTE_FLOW_ACTION_TYPE_END; i++) {
 		if (actions[i].type == RTE_FLOW_ACTION_TYPE_METER) {
 			mtr_conf = (const struct rte_flow_action_meter
-					    *)(actions->conf);
+					    *)(actions[i].conf);
 			mtr_id = mtr_conf->mtr_id;
 			is_mtr_act = true;
 		}
 		if (actions[i].type == RTE_FLOW_ACTION_TYPE_QUEUE) {
 			q_conf = (const struct rte_flow_action_queue
-					  *)(actions->conf);
+					  *)(actions[i].conf);
 			if (is_mtr_act)
 				nix_mtr_rq_update(eth_dev, mtr_id, 1,
 						  &q_conf->index);
 		}
 		if (actions[i].type == RTE_FLOW_ACTION_TYPE_RSS) {
 			rss_conf = (const struct rte_flow_action_rss
-					    *)(actions->conf);
+					    *)(actions[i].conf);
 			if (is_mtr_act)
 				nix_mtr_rq_update(eth_dev, mtr_id,
 						  rss_conf->queue_num,
@@ -98,7 +98,7 @@ cn10k_rss_action_validate(struct rte_eth_dev *eth_dev,
 		return -EINVAL;
 	}
 
-	if (eth_dev->data->dev_conf.rxmode.mq_mode != RTE_ETH_MQ_RX_RSS) {
+	if (eth_dev->data->dev_conf.rxmode.mq_mode != ETH_MQ_RX_RSS) {
 		plt_err("multi-queue mode is disabled");
 		return -ENOTSUP;
 	}
@@ -171,7 +171,6 @@ cn10k_flow_create(struct rte_eth_dev *eth_dev, const struct rte_flow_attr *attr,
 			return NULL;
 		}
 	}
-
 	for (i = 0; actions[i].type != RTE_FLOW_ACTION_TYPE_END; i++) {
 		if (actions[i].type == RTE_FLOW_ACTION_TYPE_METER) {
 			mtr = (const struct rte_flow_action_meter *)actions[i]
diff --git a/drivers/net/cnxk/cnxk_ethdev_mtr.c b/drivers/net/cnxk/cnxk_ethdev_mtr.c
index 39d8563826..a36fcb8aaf 100644
--- a/drivers/net/cnxk/cnxk_ethdev_mtr.c
+++ b/drivers/net/cnxk/cnxk_ethdev_mtr.c
@@ -35,7 +35,6 @@ static struct rte_mtr_capabilities mtr_capa = {
 	.chaining_n_mtrs_per_flow_max = NIX_MTR_COUNT_PER_FLOW,
 	.chaining_use_prev_mtr_color_supported = true,
 	.chaining_use_prev_mtr_color_enforced = true,
-	.meter_rate_max = NIX_BPF_RATE_MAX / 8, /* Bytes per second */
 	.color_aware_srtcm_rfc2697_supported = true,
 	.color_aware_trtcm_rfc2698_supported = true,
 	.color_aware_trtcm_rfc4115_supported = true,
@@ -180,20 +179,20 @@ cnxk_nix_mtr_capabilities_get(struct rte_eth_dev *dev,
 			      struct rte_mtr_capabilities *capa,
 			      struct rte_mtr_error *error)
 {
-	struct cnxk_eth_dev *eth_dev = cnxk_eth_pmd_priv(dev);
-	uint16_t count[ROC_NIX_BPF_LEVEL_MAX] = {0};
 	uint8_t lvl_mask = ROC_NIX_BPF_LEVEL_F_LEAF | ROC_NIX_BPF_LEVEL_F_MID |
 			   ROC_NIX_BPF_LEVEL_F_TOP;
+	struct cnxk_eth_dev *eth_dev = cnxk_eth_pmd_priv(dev);
+	uint16_t count[ROC_NIX_BPF_LEVEL_MAX] = {0};
 	struct roc_nix *nix = &eth_dev->nix;
-	int rc;
-	int i;
+	uint32_t time_unit;
+	int rc, i;
 
 	RTE_SET_USED(dev);
 
 	if (!capa)
 		return -rte_mtr_error_set(error, EINVAL,
-				RTE_MTR_ERROR_TYPE_MTR_PARAMS, NULL,
-				"NULL input parameter");
+					  RTE_MTR_ERROR_TYPE_MTR_PARAMS, NULL,
+					  "NULL input parameter");
 
 	rc = roc_nix_bpf_count_get(nix, lvl_mask, count);
 	if (rc)
@@ -207,6 +206,15 @@ cnxk_nix_mtr_capabilities_get(struct rte_eth_dev *dev,
 	mtr_capa.meter_trtcm_rfc4115_n_max = mtr_capa.n_max;
 	mtr_capa.meter_policy_n_max = mtr_capa.n_max;
 
+	rc = roc_nix_bpf_timeunit_get(nix, &time_unit);
+	if (rc)
+		return rc;
+
+	mtr_capa.meter_rate_max =
+		NIX_BPF_RATE(time_unit, NIX_BPF_MAX_RATE_EXPONENT,
+			     NIX_BPF_MAX_RATE_MANTISSA, 0) /
+		8;
+
 	*capa = mtr_capa;
 	return 0;
 }
@@ -304,6 +312,9 @@ cnxk_nix_mtr_policy_validate(struct rte_eth_dev *dev,
 				if (action->type == RTE_FLOW_ACTION_TYPE_DROP)
 					supported[i] = true;
 
+				if (action->type == RTE_FLOW_ACTION_TYPE_VOID)
+					supported[i] = true;
+
 				if (!supported[i]) {
 					sprintf(message,
 						"%s action is not valid",
-- 
2.25.1


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

end of thread, other threads:[~2022-01-20  8:43 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-11-30  6:41 [PATCH 1/2] net/cnxk: update meter bpf ID in rq Rakesh Kudurumalla
2021-11-30  6:41 ` [PATCH 2/2] common/cnxk: update meter algorithm in band profile Rakesh Kudurumalla
2021-11-30  7:15   ` Sunil Kumar Kori
2021-11-30  7:16 ` [PATCH 1/2] net/cnxk: update meter bpf ID in rq Sunil Kumar Kori
2022-01-10  8:45   ` Jerin Jacob
2022-01-11 12:46 ` Ferruh Yigit
2022-01-13  8:21   ` [EXT] " Rakesh Kudurumalla
2022-01-13 12:20 ` [PATCH v2 1/2] net/cnxk: update meter bpf ID in Recevie Queue Rakesh Kudurumalla
2022-01-13 12:20   ` [PATCH v2 2/2] common/cnxk: update meter algorithm in band profile Rakesh Kudurumalla
2022-01-13 12:28 ` [PATCH v3 1/2] net/cnxk: update meter bpf ID in Receive Queue Rakesh Kudurumalla
2022-01-13 12:28   ` [PATCH v3 2/2] common/cnxk: update meter algorithm in band profile Rakesh Kudurumalla
2022-01-20  8:43   ` [PATCH v3 1/2] net/cnxk: update meter bpf ID in Receive Queue Jerin Jacob

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.