From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by dpdk.org (Postfix) with ESMTP id 3EA395F29 for ; Fri, 2 Mar 2018 05:13:13 +0100 (CET) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga104.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 01 Mar 2018 20:13:13 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.47,409,1515484800"; d="scan'208";a="35315437" Received: from dpdk51.sh.intel.com ([10.67.110.184]) by orsmga001.jf.intel.com with ESMTP; 01 Mar 2018 20:13:11 -0800 From: Qi Zhang To: thomas@monjalon.net Cc: dev@dpdk.org, beilei.xing@intel.com, jingjing.wu@intel.com, wenzhuo.lu@intel.com, Qi Zhang Date: Fri, 2 Mar 2018 12:13:05 +0800 Message-Id: <20180302041306.90324-4-qi.z.zhang@intel.com> X-Mailer: git-send-email 2.13.6 In-Reply-To: <20180302041306.90324-1-qi.z.zhang@intel.com> References: <20180212045314.171616-1-qi.z.zhang@intel.com> <20180302041306.90324-1-qi.z.zhang@intel.com> Subject: [dpdk-dev] [PATCH v2 3/4] app/testpmd: add command for queue setup X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 02 Mar 2018 04:13:14 -0000 Add new command to setup queue: queue setup (rx|tx) (port_id) (queue_idx) (ring_size) rte_eth_[rx|tx]_queue_setup will be called corresponsively Signed-off-by: Qi Zhang --- app/test-pmd/cmdline.c | 136 ++++++++++++++++++++++++++++ doc/guides/testpmd_app_ug/testpmd_funcs.rst | 7 ++ 2 files changed, 143 insertions(+) diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c index b4522f46a..b725f644d 100644 --- a/app/test-pmd/cmdline.c +++ b/app/test-pmd/cmdline.c @@ -774,6 +774,9 @@ static void cmd_help_long_parsed(void *parsed_result, "port tm hierarchy commit (port_id) (clean_on_fail)\n" " Commit tm hierarchy.\n\n" + "queue setup (rx|tx) (port_id) (queue_idx) (ring_size)\n" + " setup a not started queue or re-setup a started queue.\n\n" + , list_pkt_forwarding_modes() ); } @@ -16030,6 +16033,138 @@ cmdline_parse_inst_t cmd_load_from_file = { }, }; +/* Queue Setup */ + +/* Common result structure for queue setup */ +struct cmd_queue_setup_result { + cmdline_fixed_string_t queue; + cmdline_fixed_string_t setup; + cmdline_fixed_string_t rxtx; + portid_t port_id; + uint16_t queue_idx; + uint16_t ring_size; +}; + +/* Common CLI fields for queue setup */ +cmdline_parse_token_string_t cmd_queue_setup_queue = + TOKEN_STRING_INITIALIZER(struct cmd_queue_setup_result, queue, "queue"); +cmdline_parse_token_string_t cmd_queue_setup_setup = + TOKEN_STRING_INITIALIZER(struct cmd_queue_setup_result, setup, "setup"); +cmdline_parse_token_string_t cmd_queue_setup_rxtx = + TOKEN_STRING_INITIALIZER(struct cmd_queue_setup_result, rxtx, "rx#tx"); +cmdline_parse_token_num_t cmd_queue_setup_port_id = + TOKEN_NUM_INITIALIZER(struct cmd_queue_setup_result, port_id, UINT16); +cmdline_parse_token_num_t cmd_queue_setup_queue_idx = + TOKEN_NUM_INITIALIZER(struct cmd_queue_setup_result, queue_idx, UINT16); +cmdline_parse_token_num_t cmd_queue_setup_ring_size = + TOKEN_NUM_INITIALIZER(struct cmd_queue_setup_result, ring_size, UINT16); + +static void +cmd_queue_setup_parsed( + void *parsed_result, + __attribute__((unused)) struct cmdline *cl, + __attribute__((unused)) void *data) +{ + struct cmd_queue_setup_result *res = parsed_result; + struct rte_port *port; + struct rte_mempool *mp; + uint8_t rx = 1; + int ret; + + if (port_id_is_invalid(res->port_id, ENABLED_WARN)) + return; + + if (!strcmp(res->rxtx, "tx")) + rx = 0; + + if (rx && res->ring_size <= rx_free_thresh) { + printf("Invalid ring_size, must >= rx_free_thresh: %d\n", + rx_free_thresh); + return; + } + + if (rx && res->queue_idx >= nb_rxq) { + printf("Invalid rx queue index, must < nb_rxq: %d\n", + nb_rxq); + return; + } + + if (!rx && res->queue_idx >= nb_txq) { + printf("Invalid tx queue index, must < nb_txq: %d\n", + nb_txq); + return; + } + + port = &ports[res->port_id]; + if (rx) { + if (numa_support && + (rxring_numa[res->port_id] != NUMA_NO_CONFIG)) { + mp = mbuf_pool_find(rxring_numa[res->port_id]); + if (mp == NULL) { + printf("Failed to setup RX queue: " + "No mempool allocation" + " on the socket %d\n", + rxring_numa[res->port_id]); + return; + } + ret = rte_eth_rx_queue_setup(res->port_id, + res->queue_idx, + res->ring_size, + rxring_numa[res->port_id], + &(port->rx_conf), + mp); + } else { + mp = mbuf_pool_find(port->socket_id); + if (mp == NULL) { + printf("Failed to setup RX queue:" + "No mempool allocation" + " on the socket %d\n", + port->socket_id); + return; + } + ret = rte_eth_rx_queue_setup(res->port_id, + res->queue_idx, + res->ring_size, + port->socket_id, + &(port->rx_conf), + mp); + } + if (ret) + printf("Failed to setup RX queue\n"); + } else { + if ((numa_support) && + (txring_numa[res->port_id] != NUMA_NO_CONFIG)) + ret = rte_eth_tx_queue_setup(res->port_id, + res->queue_idx, + res->ring_size, + txring_numa[res->port_id], + &(port->tx_conf)); + else + ret = rte_eth_tx_queue_setup(res->port_id, + res->queue_idx, + res->ring_size, + port->socket_id, + &(port->tx_conf)); + if (ret) + printf("Failed to setup TX queue\n"); + } +} + +cmdline_parse_inst_t cmd_queue_setup = { + .f = cmd_queue_setup_parsed, + .data = NULL, + .help_str = "queue setup ", + .tokens = { + (void *)&cmd_queue_setup_queue, + (void *)&cmd_queue_setup_setup, + (void *)&cmd_queue_setup_rxtx, + (void *)&cmd_queue_setup_port_id, + (void *)&cmd_queue_setup_queue_idx, + (void *)&cmd_queue_setup_ring_size, + NULL, + }, +}; + /* ******************************************************************************** */ /* list of instructions */ @@ -16272,6 +16407,7 @@ cmdline_parse_ctx_t main_ctx[] = { (cmdline_parse_inst_t *)&cmd_del_port_tm_node, (cmdline_parse_inst_t *)&cmd_set_port_tm_node_parent, (cmdline_parse_inst_t *)&cmd_port_tm_hierarchy_commit, + (cmdline_parse_inst_t *)&cmd_queue_setup, NULL, }; diff --git a/doc/guides/testpmd_app_ug/testpmd_funcs.rst b/doc/guides/testpmd_app_ug/testpmd_funcs.rst index a766ac795..74269cb03 100644 --- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst +++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst @@ -1444,6 +1444,13 @@ Reset ptype mapping table:: testpmd> ptype mapping reset (port_id) +queue setup +~~~~~~~~~~~ + +Setup a not started queue or re-setup a started queue:: + + testpmd> queue setup (rx|tx) (port_id) (queue_idx) (ring_size) + Port Functions -------------- -- 2.13.6