From: <jerinj@marvell.com>
To: <dev@dpdk.org>, Xiaoyun Li <xiaoyun.li@intel.com>,
Aman Singh <aman.deep.singh@intel.com>,
Yuying Zhang <yuying.zhang@intel.com>
Cc: <thomas@monjalon.net>, <ferruh.yigit@intel.com>,
<ajit.khaparde@broadcom.com>, <aboyer@pensando.io>,
<andrew.rybchenko@oktetlabs.ru>, <beilei.xing@intel.com>,
<bruce.richardson@intel.com>, <chas3@att.com>,
<chenbo.xia@intel.com>, <ciara.loftus@intel.com>,
<dsinghrawat@marvell.com>, <ed.czeck@atomicrules.com>,
<evgenys@amazon.com>, <grive@u256.net>, <g.singh@nxp.com>,
<zhouguoyang@huawei.com>, <haiyue.wang@intel.com>,
<hkalra@marvell.com>, <heinrich.kuhn@corigine.com>,
<hemant.agrawal@nxp.com>, <hyonkim@cisco.com>,
<igorch@amazon.com>, <irusskikh@marvell.com>,
<jgrajcia@cisco.com>, <jasvinder.singh@intel.com>,
<jianwang@trustnetic.com>, <jiawenwu@trustnetic.com>,
<jingjing.wu@intel.com>, <johndale@cisco.com>,
<john.miller@atomicrules.com>, <linville@tuxdriver.com>,
<keith.wiles@intel.com>, <kirankumark@marvell.com>,
<oulijun@huawei.com>, <lironh@marvell.com>,
<longli@microsoft.com>, <mw@semihalf.com>, <spinler@cesnet.cz>,
<matan@nvidia.com>, <matt.peters@windriver.com>,
<maxime.coquelin@redhat.com>, <mk@semihalf.com>,
<humin29@huawei.com>, <pnalla@marvell.com>,
<ndabilpuram@marvell.com>, <qiming.yang@intel.com>,
<qi.z.zhang@intel.com>, <radhac@marvell.com>,
<rahul.lakkireddy@chelsio.com>, <rmody@marvell.com>,
<rosen.xu@intel.com>, <sachin.saxena@oss.nxp.com>,
<skoteshwar@marvell.com>, <shshaikh@marvell.com>,
<shaibran@amazon.com>, <shepard.siegel@atomicrules.com>,
<asomalap@amd.com>, <somnath.kotur@broadcom.com>,
<sthemmin@microsoft.com>, <steven.webster@windriver.com>,
<skori@marvell.com>, <mtetsuyah@gmail.com>, <vburru@marvell.com>,
<viacheslavo@nvidia.com>, <xiao.w.wang@intel.com>,
<cloud.wangxiaoyun@huawei.com>, <yisen.zhuang@huawei.com>,
<yongwang@vmware.com>, <xuanziyang2@huawei.com>
Subject: [dpdk-dev] [PATCH v3 2/2] app/testpmd: add queue based pfc CLI options
Date: Mon, 31 Jan 2022 23:38:59 +0530 [thread overview]
Message-ID: <20220131180859.2662034-2-jerinj@marvell.com> (raw)
In-Reply-To: <20220131180859.2662034-1-jerinj@marvell.com>
From: Sunil Kumar Kori <skori@marvell.com>
Patch adds command line options to configure queue based
priority flow control.
- Syntax command is given as below:
set pfc_queue_ctrl <port_id> rx <on|off> <tx_qid> <tx_tc> \
tx <on|off> <rx_qid> <rx_tc> <pause_time>
- Example command to configure queue based priority flow control
on rx and tx side for port 0, Rx queue 0, Tx queue 0 with pause
time 2047
testpmd> set pfc_queue_ctrl 0 rx on 0 0 tx on 0 0 2047
Signed-off-by: Sunil Kumar Kori <skori@marvell.com>
---
v2..v1
- Sync up the implementation to use new APIs
app/test-pmd/cmdline.c | 122 ++++++++++++++++++++
doc/guides/testpmd_app_ug/testpmd_funcs.rst | 22 ++++
2 files changed, 144 insertions(+)
diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c
index e626b1c7d9..1af0321af0 100644
--- a/app/test-pmd/cmdline.c
+++ b/app/test-pmd/cmdline.c
@@ -544,6 +544,11 @@ static void cmd_help_long_parsed(void *parsed_result,
" Set the priority flow control parameter on a"
" port.\n\n"
+ "set pfc_queue_ctrl (port_id) rx (on|off) (tx_qid)"
+ " (tx_tc) tx (on|off) (rx_qid) (rx_tc) (pause_time)\n"
+ " Set the queue priority flow control parameter on a"
+ " given Rx and Tx queues of a port.\n\n"
+
"set stat_qmap (tx|rx) (port_id) (queue_id) (qmapping)\n"
" Set statistics mapping (qmapping 0..15) for RX/TX"
" queue on port.\n"
@@ -7690,6 +7695,122 @@ cmdline_parse_inst_t cmd_priority_flow_control_set = {
},
};
+struct cmd_queue_priority_flow_ctrl_set_result {
+ cmdline_fixed_string_t set;
+ cmdline_fixed_string_t pfc_queue_ctrl;
+ portid_t port_id;
+ cmdline_fixed_string_t rx;
+ cmdline_fixed_string_t rx_pfc_mode;
+ uint16_t tx_qid;
+ uint8_t tx_tc;
+ cmdline_fixed_string_t tx;
+ cmdline_fixed_string_t tx_pfc_mode;
+ uint16_t rx_qid;
+ uint8_t rx_tc;
+ uint16_t pause_time;
+};
+
+static void
+cmd_queue_priority_flow_ctrl_set_parsed(void *parsed_result,
+ __rte_unused struct cmdline *cl,
+ __rte_unused void *data)
+{
+ struct cmd_queue_priority_flow_ctrl_set_result *res = parsed_result;
+ struct rte_eth_pfc_queue_conf pfc_queue_conf;
+ int rx_fc_enable, tx_fc_enable;
+ int ret;
+
+ /*
+ * Rx on/off, flow control is enabled/disabled on RX side. This can
+ * indicate the RTE_ETH_FC_TX_PAUSE, Transmit pause frame at the Rx
+ * side. Tx on/off, flow control is enabled/disabled on TX side. This
+ * can indicate the RTE_ETH_FC_RX_PAUSE, Respond to the pause frame at
+ * the Tx side.
+ */
+ static enum rte_eth_fc_mode rx_tx_onoff_2_mode[2][2] = {
+ {RTE_ETH_FC_NONE, RTE_ETH_FC_TX_PAUSE},
+ {RTE_ETH_FC_RX_PAUSE, RTE_ETH_FC_FULL}
+ };
+
+ memset(&pfc_queue_conf, 0, sizeof(struct rte_eth_pfc_queue_conf));
+ rx_fc_enable = (!strncmp(res->rx_pfc_mode, "on", 2)) ? 1 : 0;
+ tx_fc_enable = (!strncmp(res->tx_pfc_mode, "on", 2)) ? 1 : 0;
+ pfc_queue_conf.mode = rx_tx_onoff_2_mode[rx_fc_enable][tx_fc_enable];
+ pfc_queue_conf.rx_pause.tc = res->tx_tc;
+ pfc_queue_conf.rx_pause.tx_qid = res->tx_qid;
+ pfc_queue_conf.tx_pause.tc = res->rx_tc;
+ pfc_queue_conf.tx_pause.rx_qid = res->rx_qid;
+ pfc_queue_conf.tx_pause.pause_time = res->pause_time;
+
+ ret = rte_eth_dev_priority_flow_ctrl_queue_configure(res->port_id,
+ &pfc_queue_conf);
+ if (ret != 0) {
+ fprintf(stderr,
+ "bad queue priority flow control parameter, rc = %d\n",
+ ret);
+ }
+}
+
+cmdline_parse_token_string_t cmd_q_pfc_set_set =
+ TOKEN_STRING_INITIALIZER(struct cmd_queue_priority_flow_ctrl_set_result,
+ set, "set");
+cmdline_parse_token_string_t cmd_q_pfc_set_flow_ctrl =
+ TOKEN_STRING_INITIALIZER(struct cmd_queue_priority_flow_ctrl_set_result,
+ pfc_queue_ctrl, "pfc_queue_ctrl");
+cmdline_parse_token_num_t cmd_q_pfc_set_portid =
+ TOKEN_NUM_INITIALIZER(struct cmd_queue_priority_flow_ctrl_set_result,
+ port_id, RTE_UINT16);
+cmdline_parse_token_string_t cmd_q_pfc_set_rx =
+ TOKEN_STRING_INITIALIZER(struct cmd_queue_priority_flow_ctrl_set_result,
+ rx, "rx");
+cmdline_parse_token_string_t cmd_q_pfc_set_rx_mode =
+ TOKEN_STRING_INITIALIZER(struct cmd_queue_priority_flow_ctrl_set_result,
+ rx_pfc_mode, "on#off");
+cmdline_parse_token_num_t cmd_q_pfc_set_tx_qid =
+ TOKEN_NUM_INITIALIZER(struct cmd_queue_priority_flow_ctrl_set_result,
+ tx_qid, RTE_UINT16);
+cmdline_parse_token_num_t cmd_q_pfc_set_tx_tc =
+ TOKEN_NUM_INITIALIZER(struct cmd_queue_priority_flow_ctrl_set_result,
+ tx_tc, RTE_UINT8);
+cmdline_parse_token_string_t cmd_q_pfc_set_tx =
+ TOKEN_STRING_INITIALIZER(struct cmd_queue_priority_flow_ctrl_set_result,
+ tx, "tx");
+cmdline_parse_token_string_t cmd_q_pfc_set_tx_mode =
+ TOKEN_STRING_INITIALIZER(struct cmd_queue_priority_flow_ctrl_set_result,
+ tx_pfc_mode, "on#off");
+cmdline_parse_token_num_t cmd_q_pfc_set_rx_qid =
+ TOKEN_NUM_INITIALIZER(struct cmd_queue_priority_flow_ctrl_set_result,
+ rx_qid, RTE_UINT16);
+cmdline_parse_token_num_t cmd_q_pfc_set_rx_tc =
+ TOKEN_NUM_INITIALIZER(struct cmd_queue_priority_flow_ctrl_set_result,
+ rx_tc, RTE_UINT8);
+cmdline_parse_token_num_t cmd_q_pfc_set_pause_time =
+ TOKEN_NUM_INITIALIZER(struct cmd_queue_priority_flow_ctrl_set_result,
+ pause_time, RTE_UINT16);
+
+cmdline_parse_inst_t cmd_queue_priority_flow_control_set = {
+ .f = cmd_queue_priority_flow_ctrl_set_parsed,
+ .data = NULL,
+ .help_str = "set pfc_queue_ctrl <port_id> rx <on|off> <tx_qid> <tx_tc> "
+ "tx <on|off> <rx_qid> <rx_tc> <pause_time>: "
+ "Configure the Ethernet queue priority flow control",
+ .tokens = {
+ (void *)&cmd_q_pfc_set_set,
+ (void *)&cmd_q_pfc_set_flow_ctrl,
+ (void *)&cmd_q_pfc_set_portid,
+ (void *)&cmd_q_pfc_set_rx,
+ (void *)&cmd_q_pfc_set_rx_mode,
+ (void *)&cmd_q_pfc_set_tx_qid,
+ (void *)&cmd_q_pfc_set_tx_tc,
+ (void *)&cmd_q_pfc_set_tx,
+ (void *)&cmd_q_pfc_set_tx_mode,
+ (void *)&cmd_q_pfc_set_rx_qid,
+ (void *)&cmd_q_pfc_set_rx_tc,
+ (void *)&cmd_q_pfc_set_pause_time,
+ NULL,
+ },
+};
+
/* *** RESET CONFIGURATION *** */
struct cmd_reset_result {
cmdline_fixed_string_t reset;
@@ -17765,6 +17886,7 @@ cmdline_parse_ctx_t main_ctx[] = {
(cmdline_parse_inst_t *)&cmd_link_flow_control_set_autoneg,
(cmdline_parse_inst_t *)&cmd_link_flow_control_show,
(cmdline_parse_inst_t *)&cmd_priority_flow_control_set,
+ (cmdline_parse_inst_t *)&cmd_queue_priority_flow_control_set,
(cmdline_parse_inst_t *)&cmd_config_dcb,
(cmdline_parse_inst_t *)&cmd_read_reg,
(cmdline_parse_inst_t *)&cmd_read_reg_bit_field,
diff --git a/doc/guides/testpmd_app_ug/testpmd_funcs.rst b/doc/guides/testpmd_app_ug/testpmd_funcs.rst
index 94792d88cc..82333d518e 100644
--- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst
+++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst
@@ -1561,6 +1561,28 @@ Where:
* ``priority`` (0-7): VLAN User Priority.
+set pfc_queue_ctrl
+~~~~~~~~~~~~~~~~~~
+
+Set the priority flow control parameter on a given Rx and Tx queue of a port::
+
+ testpmd> set pfc_queue_ctrl <port_id> rx (on|off) <tx_qid> <tx_tc> \
+ tx (on|off) <rx_qid> <rx_tc> <pause_time>
+
+Where:
+
+* ``tx_qid`` (integer): Tx qid for which ``tx_tc`` will be applied and traffic
+ will be paused when PFC frame is received with ``tx_tc`` enabled.
+
+* ``tx_tc`` (0-15): TC for which traffic is to be paused for xmit.
+
+* ``rx_qid`` (integer): Rx qid for which threshold will be applied and PFC
+ frame will be generated with ``tx_tc`` when exceeds the threshold.
+
+* ``rx_tc`` (0-15): TC filled in PFC frame for which remote Tx is to be paused.
+
+* ``pause_time`` (integer): Pause quota filled in the PFC frame.
+
set stat_qmap
~~~~~~~~~~~~~
--
2.35.1
next prev parent reply other threads:[~2022-01-31 18:09 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-12-04 17:24 [dpdk-dev] [PATCH] ethdev: support queue-based priority flow control jerinj
2021-12-04 17:38 ` Stephen Hemminger
2021-12-05 7:03 ` Jerin Jacob
2021-12-05 18:00 ` Stephen Hemminger
2021-12-06 9:57 ` Jerin Jacob
2022-01-09 10:54 ` [PATCH v1 1/2] " skori
2022-01-09 10:54 ` [PATCH v1 2/2] app/testpmd: add queue based pfc CLI options skori
2022-01-09 10:58 ` [PATCH v1 1/2] ethdev: support queue-based priority flow control skori
2022-01-09 10:58 ` [PATCH v1 2/2] app/testpmd: add queue based pfc CLI options skori
2022-01-09 11:16 ` [PATCH v1 1/2] ethdev: support queue-based priority flow control Sunil Kumar Kori
2022-01-13 10:27 ` [dpdk-dev] [PATCH v2 " jerinj
2022-01-13 10:27 ` [dpdk-dev] [PATCH v2 2/2] app/testpmd: add queue based pfc CLI options jerinj
2022-01-25 17:36 ` Ferruh Yigit
2022-01-27 7:13 ` [EXT] " Sunil Kumar Kori
2022-01-27 10:40 ` Ferruh Yigit
2022-01-27 16:56 ` Ajit Khaparde
2022-01-31 13:03 ` Sunil Kumar Kori
2022-01-25 17:34 ` [dpdk-dev] [PATCH v2 1/2] ethdev: support queue-based priority flow control Ferruh Yigit
2022-01-25 18:52 ` Jerin Jacob
2022-01-31 18:08 ` [dpdk-dev] [PATCH v3 " jerinj
2022-01-31 18:08 ` jerinj [this message]
2022-02-03 16:06 ` [dpdk-dev] [PATCH v3 2/2] app/testpmd: add queue based pfc CLI options Ferruh Yigit
2022-02-03 17:19 ` [EXT] " Sunil Kumar Kori
2022-02-03 16:00 ` [dpdk-dev] [PATCH v3 1/2] ethdev: support queue-based priority flow control Ferruh Yigit
2022-02-07 7:23 ` Jerin Jacob
2022-02-07 13:55 ` [dpdk-dev] [PATCH v4 " jerinj
2022-02-07 13:55 ` [dpdk-dev] [PATCH v4 2/2] app/testpmd: add queue based pfc CLI options jerinj
2022-02-07 17:21 ` Ferruh Yigit
2022-02-07 17:27 ` Ajit Khaparde
2022-02-07 17:21 ` [dpdk-dev] [PATCH v4 1/2] ethdev: support queue-based priority flow control Ferruh Yigit
2022-02-08 6:05 ` Ajit Khaparde
2022-02-08 8:50 ` [dpdk-dev] [PATCH v5 " jerinj
2022-02-08 8:50 ` [dpdk-dev] [PATCH v5 2/2] app/testpmd: add queue based pfc CLI options jerinj
2022-02-08 13:07 ` [dpdk-dev] [PATCH v5 1/2] ethdev: support queue-based priority flow control Ferruh Yigit
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=20220131180859.2662034-2-jerinj@marvell.com \
--to=jerinj@marvell.com \
--cc=aboyer@pensando.io \
--cc=ajit.khaparde@broadcom.com \
--cc=aman.deep.singh@intel.com \
--cc=andrew.rybchenko@oktetlabs.ru \
--cc=asomalap@amd.com \
--cc=beilei.xing@intel.com \
--cc=bruce.richardson@intel.com \
--cc=chas3@att.com \
--cc=chenbo.xia@intel.com \
--cc=ciara.loftus@intel.com \
--cc=cloud.wangxiaoyun@huawei.com \
--cc=dev@dpdk.org \
--cc=dsinghrawat@marvell.com \
--cc=ed.czeck@atomicrules.com \
--cc=evgenys@amazon.com \
--cc=ferruh.yigit@intel.com \
--cc=g.singh@nxp.com \
--cc=grive@u256.net \
--cc=haiyue.wang@intel.com \
--cc=heinrich.kuhn@corigine.com \
--cc=hemant.agrawal@nxp.com \
--cc=hkalra@marvell.com \
--cc=humin29@huawei.com \
--cc=hyonkim@cisco.com \
--cc=igorch@amazon.com \
--cc=irusskikh@marvell.com \
--cc=jasvinder.singh@intel.com \
--cc=jgrajcia@cisco.com \
--cc=jianwang@trustnetic.com \
--cc=jiawenwu@trustnetic.com \
--cc=jingjing.wu@intel.com \
--cc=john.miller@atomicrules.com \
--cc=johndale@cisco.com \
--cc=keith.wiles@intel.com \
--cc=kirankumark@marvell.com \
--cc=linville@tuxdriver.com \
--cc=lironh@marvell.com \
--cc=longli@microsoft.com \
--cc=matan@nvidia.com \
--cc=matt.peters@windriver.com \
--cc=maxime.coquelin@redhat.com \
--cc=mk@semihalf.com \
--cc=mtetsuyah@gmail.com \
--cc=mw@semihalf.com \
--cc=ndabilpuram@marvell.com \
--cc=oulijun@huawei.com \
--cc=pnalla@marvell.com \
--cc=qi.z.zhang@intel.com \
--cc=qiming.yang@intel.com \
--cc=radhac@marvell.com \
--cc=rahul.lakkireddy@chelsio.com \
--cc=rmody@marvell.com \
--cc=rosen.xu@intel.com \
--cc=sachin.saxena@oss.nxp.com \
--cc=shaibran@amazon.com \
--cc=shepard.siegel@atomicrules.com \
--cc=shshaikh@marvell.com \
--cc=skori@marvell.com \
--cc=skoteshwar@marvell.com \
--cc=somnath.kotur@broadcom.com \
--cc=spinler@cesnet.cz \
--cc=steven.webster@windriver.com \
--cc=sthemmin@microsoft.com \
--cc=thomas@monjalon.net \
--cc=vburru@marvell.com \
--cc=viacheslavo@nvidia.com \
--cc=xiao.w.wang@intel.com \
--cc=xiaoyun.li@intel.com \
--cc=xuanziyang2@huawei.com \
--cc=yisen.zhuang@huawei.com \
--cc=yongwang@vmware.com \
--cc=yuying.zhang@intel.com \
--cc=zhouguoyang@huawei.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).