DPDK patches and discussions
 help / color / mirror / Atom feed
From: Nikhil Rao <nikhil.rao@intel.com>
To: cristian.dumitrescu@intel.com, jasvinder.singh@intel.com
Cc: wenzhuo.lu@intel.com, jingjing.wu@intel.com,
	bernard.iremonger@intel.com, dev@dpdk.org,
	Nikhil Rao <nikhil.rao@intel.com>
Subject: [dpdk-dev] [PATCH v2] ethdev: support double precision RED queue weight
Date: Thu, 10 Jan 2019 22:05:33 +0530	[thread overview]
Message-ID: <1547138133-54919-1-git-send-email-nikhil.rao@intel.com> (raw)
In-Reply-To: <1543470882-145287-1-git-send-email-nikhil.rao@intel.com>

RED queue weight is currently specified as a negated log of 2.

Add support for RED queue weight to be specified in double precision
and TM capability flags for double precision and negated log2
RED queue weight support.

Update the softnic PMD and testpmd for the new tm capability flags and
the struct rte_tm_red_params::wq_is_log2 flag.

Signed-off-by: Nikhil Rao <nikhil.rao@intel.com>
---
 lib/librte_ethdev/rte_tm.h               | 40 ++++++++++++++++++++++++++++++--
 app/test-pmd/cmdline_tm.c                |  8 ++++++-
 drivers/net/softnic/rte_eth_softnic_tm.c |  7 ++++--
 3 files changed, 50 insertions(+), 5 deletions(-)

v2:
* added RTE_STD_C11 for anonymnous union
* testpmd: added cman_wred_wq_log2/wq_dp_supported to "show port tm cap" cli command
* testpmd: set wq_is_log2 for WRED profiles added on testpmd cli

Cristian, 
I assume the testpmd changes will be upstreamed via the dpdk-next-qos tree.

diff --git a/lib/librte_ethdev/rte_tm.h b/lib/librte_ethdev/rte_tm.h
index c4a788b..4fad31b 100644
--- a/lib/librte_ethdev/rte_tm.h
+++ b/lib/librte_ethdev/rte_tm.h
@@ -391,6 +391,22 @@ struct rte_tm_capabilities {
 	 */
 	int cman_wred_byte_mode_supported;
 
+	/** Double precision RED queue weight support. When non-zero, this
+	 * this parameter indicates that RED queue weight in double precision
+	 * format is supported.
+	 * @see struct rte_tm_red_params::wq_is_log2
+	 * @see struct rte_tm_red_params::wq_dp
+	 */
+	int cman_wred_wq_dp_supported;
+
+	/** Negated log2 RED queue weight support. When non-zero, this
+	 * parameter indicates that RED queue weight in negated log2 format
+	 * is supported.
+	 * @see struct rte_tm_red_params::wq_is_log2
+	 * @see struct rte_tm_red_params::wq_log2
+	 */
+	int cman_wred_wq_log2_supported;
+
 	/** Head drop algorithm support. When non-zero, this parameter
 	 * indicates that there is at least one leaf node that supports the head
 	 * drop algorithm, which might not be true for all the leaf nodes.
@@ -839,8 +855,28 @@ struct rte_tm_red_params {
 	 */
 	uint16_t maxp_inv;
 
-	/** Negated log2 of queue weight (wq), i.e. wq = 1 / (2 ^ wq_log2) */
-	uint16_t wq_log2;
+	/** When non-zero, RED queue weight (wq) is negated log2 of queue
+	 * weight
+	 *
+	 * @see struct rte_tm_capabilities::cman_wred_wq_dp_supported
+	 * @see struct rte_tm_capabilities::cman_wred_wq_log2_supported
+	 */
+	int wq_is_log2;
+
+	RTE_STD_C11
+	union {
+		/** Double precision queue weight
+		 *
+		 * @see struct rte_tm_capabilities::cman_wred_wq_dp_supported
+		 */
+		double wq_dp;
+		/** Negated log2 of queue weight (wq),
+		 * i.e. wq = 1 / (2 ^ wq_log2)
+		 *
+		 * @see struct rte_tm_capabilities::cman_wred_wq_log2_supported
+		 */
+		uint16_t wq_log2;
+	};
 };
 
 /**
diff --git a/app/test-pmd/cmdline_tm.c b/app/test-pmd/cmdline_tm.c
index 1012084..afc1d63 100644
--- a/app/test-pmd/cmdline_tm.c
+++ b/app/test-pmd/cmdline_tm.c
@@ -283,6 +283,10 @@ static void cmd_show_port_tm_cap_parsed(void *parsed_result,
 		cap.sched_wfq_n_groups_max);
 	printf("cap.sched_wfq_weight_max %" PRIu32 "\n",
 		cap.sched_wfq_weight_max);
+	printf("cap.cman_wred_wq_dp_supported %" PRId32 "\n",
+		cap.cman_wred_wq_dp_supported);
+	printf("cap.cman_wred_wq_log2_supported %" PRId32 "\n",
+		cap.cman_wred_wq_log2_supported);
 	printf("cap.cman_head_drop_supported %" PRId32 "\n",
 		cap.cman_head_drop_supported);
 	printf("cap.cman_wred_context_n_max %" PRIu32 "\n",
@@ -1285,7 +1289,7 @@ static void cmd_add_port_tm_node_wred_profile_parsed(void *parsed_result,
 	wp.red_params[color].max_th = res->max_th_g;
 	wp.red_params[color].maxp_inv = res->maxp_inv_g;
 	wp.red_params[color].wq_log2 = res->wq_log2_g;
-
+	wp.red_params[color].wq_is_log2 = 1;
 
 	/* WRED Params  (Yellow Color)*/
 	color = RTE_TM_YELLOW;
@@ -1293,6 +1297,7 @@ static void cmd_add_port_tm_node_wred_profile_parsed(void *parsed_result,
 	wp.red_params[color].max_th = res->max_th_y;
 	wp.red_params[color].maxp_inv = res->maxp_inv_y;
 	wp.red_params[color].wq_log2 = res->wq_log2_y;
+	wp.red_params[color].wq_is_log2 = 1;
 
 	/* WRED Params  (Red Color)*/
 	color = RTE_TM_RED;
@@ -1300,6 +1305,7 @@ static void cmd_add_port_tm_node_wred_profile_parsed(void *parsed_result,
 	wp.red_params[color].max_th = res->max_th_r;
 	wp.red_params[color].maxp_inv = res->maxp_inv_r;
 	wp.red_params[color].wq_log2 = res->wq_log2_r;
+	wp.red_params[color].wq_is_log2 = 1;
 
 	ret = rte_tm_wred_profile_add(port_id, wred_profile_id, &wp, &error);
 	if (ret != 0) {
diff --git a/drivers/net/softnic/rte_eth_softnic_tm.c b/drivers/net/softnic/rte_eth_softnic_tm.c
index baaafbe..e96ea8e 100644
--- a/drivers/net/softnic/rte_eth_softnic_tm.c
+++ b/drivers/net/softnic/rte_eth_softnic_tm.c
@@ -469,7 +469,8 @@ struct softnic_tmgr_port *
 	.cman_wred_context_shared_n_max = 0,
 	.cman_wred_context_shared_n_nodes_per_context_max = 0,
 	.cman_wred_context_shared_n_contexts_per_node_max = 0,
-
+	.cman_wred_wq_dp_supported = 0,
+	.cman_wred_wq_log2_supported = WRED_SUPPORTED,
 	.mark_vlan_dei_supported = {0, 0, 0},
 	.mark_ip_ecn_tcp_supported = {0, 0, 0},
 	.mark_ip_ecn_sctp_supported = {0, 0, 0},
@@ -1243,8 +1244,10 @@ struct softnic_tmgr_port *
 	for (color = RTE_TM_GREEN; color < RTE_TM_COLORS; color++) {
 		uint32_t min_th = profile->red_params[color].min_th;
 		uint32_t max_th = profile->red_params[color].max_th;
+		int wq_is_log2 = profile->red_params[color].wq_is_log2;
 
-		if (min_th > max_th ||
+		if (wq_is_log2 == 0 ||
+			min_th > max_th ||
 			max_th == 0 ||
 			min_th > UINT16_MAX ||
 			max_th > UINT16_MAX)
-- 
1.8.3.1

  parent reply	other threads:[~2019-01-10 16:37 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-11-29  5:54 [dpdk-dev] [PATCH] " Nikhil Rao
2018-11-29  6:12 ` Stephen Hemminger
2018-12-10  5:43   ` Rao, Nikhil
2018-12-10 16:01     ` Stephen Hemminger
2019-01-10  6:23       ` Rao, Nikhil
2018-12-10 15:57 ` Stephen Hemminger
2019-01-07 16:39 ` Dumitrescu, Cristian
2019-01-10 16:35 ` Nikhil Rao [this message]
2019-03-29 20:16   ` [dpdk-dev] [PATCH v2] " Dumitrescu, Cristian
2019-03-29 20:16     ` Dumitrescu, Cristian

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=1547138133-54919-1-git-send-email-nikhil.rao@intel.com \
    --to=nikhil.rao@intel.com \
    --cc=bernard.iremonger@intel.com \
    --cc=cristian.dumitrescu@intel.com \
    --cc=dev@dpdk.org \
    --cc=jasvinder.singh@intel.com \
    --cc=jingjing.wu@intel.com \
    --cc=wenzhuo.lu@intel.com \
    /path/to/YOUR_REPLY

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

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is 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).