From patchwork Sat Apr 7 15:49:30 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rami Rosen X-Patchwork-Id: 37507 Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id CEA821C741; Sat, 7 Apr 2018 21:37:53 +0200 (CEST) Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by dpdk.org (Postfix) with ESMTP id 62CC71C996 for ; Sat, 7 Apr 2018 17:49:37 +0200 (CEST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by fmsmga105.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 07 Apr 2018 08:49:35 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.48,419,1517904000"; d="scan'208";a="40100523" Received: from fmsmsx107.amr.corp.intel.com ([10.18.124.205]) by FMSMGA003.fm.intel.com with ESMTP; 07 Apr 2018 08:49:35 -0700 Received: from fmsmsx112.amr.corp.intel.com (10.18.116.6) by fmsmsx107.amr.corp.intel.com (10.18.124.205) with Microsoft SMTP Server (TLS) id 14.3.319.2; Sat, 7 Apr 2018 08:49:35 -0700 Received: from lcsmsx152.ger.corp.intel.com (10.186.165.231) by FMSMSX112.amr.corp.intel.com (10.18.116.6) with Microsoft SMTP Server (TLS) id 14.3.319.2; Sat, 7 Apr 2018 08:49:34 -0700 Received: from HASMSX110.ger.corp.intel.com ([169.254.6.223]) by LCSMSX152.ger.corp.intel.com ([169.254.4.231]) with mapi id 14.03.0319.002; Sat, 7 Apr 2018 18:49:31 +0300 From: "Rosen, Rami" To: "Zhang, Qi Z" , "thomas@monjalon.net" , "Ananyev, Konstantin" CC: "dev@dpdk.org" , "Xing, Beilei" , "Wu, Jingjing" , "Lu, Wenzhuo" , "Zhang, Qi Z" Thread-Topic: [dpdk-dev] [PATCH v5 2/3] app/testpmd: add command for queue setup Thread-Index: AQHTyi64H0cnv/MLxkKTusJKjNwWjaP1ewxA Date: Sat, 7 Apr 2018 15:49:30 +0000 Message-ID: <9B0331B6EBBD0E4684FBFAEDA55776F95319DB0C@HASMSX110.ger.corp.intel.com> References: <20180212045314.171616-1-qi.z.zhang@intel.com> <20180402025935.33312-1-qi.z.zhang@intel.com> <20180402025935.33312-3-qi.z.zhang@intel.com> In-Reply-To: <20180402025935.33312-3-qi.z.zhang@intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiNTkwMGJjYjUtNDMyMC00N2FmLWEwMTAtMDcxYTk3MzE4ZWFjIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjIuNS4xOCIsIlRydXN0ZWRMYWJlbEhhc2giOiJhTzB4UmY3WURGc2crRndjdWlUQ2RlUGlQdnliOEhYazFQSUN5WUJtZnBYWjl6b3poVmRZXC9McXlWdmU1bXVoQSJ9 x-ctpclassification: CTP_NT dlp-product: dlpe-windows dlp-version: 11.0.0.116 dlp-reaction: no-action x-originating-ip: [10.249.86.21] MIME-Version: 1.0 Subject: Re: [dpdk-dev] [PATCH v5 2/3] 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: , Errors-To: dev-bounces@dpdk.org Sender: "dev" -----Original Message----- From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Qi Zhang Sent: Monday, April 02, 2018 06:00 To: thomas@monjalon.net; Ananyev, Konstantin Cc: dev@dpdk.org; Xing, Beilei ; Wu, Jingjing ; Lu, Wenzhuo ; Zhang, Qi Z Subject: [dpdk-dev] [PATCH v5 2/3] app/testpmd: add command for queue setup Add new command to setup queue: queue setup (rx|tx) (port_id) (queue_idx) (ring_size) (offloads) rte_eth_[rx|tx]_queue_setup will be called corresponsively Signed-off-by: Qi Zhang --- v5: - fix command description. v4: - fix missing offload in command line. v3: - add offload parameter to queue setup command. - couple code refactory. app/test-pmd/cmdline.c | 129 ++++++++++++++++++++++++++++ doc/guides/testpmd_app_ug/testpmd_funcs.rst | 7 ++ 2 files changed, 136 insertions(+) -- 2.13.6 diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c index d1dc1de6c..449c7c634 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) (offloads)\n" + " setup a rx or tx queue.\n\n" + , list_pkt_forwarding_modes() ); } @@ -16030,6 +16033,131 @@ 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; + uint64_t offloads; +}; + +/* 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); cmdline_parse_token_num_t cmd_queue_setup_offloads = + TOKEN_NUM_INITIALIZER(struct cmd_queue_setup_result, offloads, +UINT64); + +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; + unsigned int socket_id; + 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) { [Rami Rosen] Nitpick: shouldn't it be: must > 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) { + struct rte_eth_rxconf rxconf = port->rx_conf; + + rxconf.offloads = res->offloads; + socket_id = rxring_numa[res->port_id]; + if (!numa_support || socket_id == NUMA_NO_CONFIG) + socket_id = port->socket_id; + + mp = mbuf_pool_find(socket_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, + socket_id, + &rxconf, + mp); + if (ret) + printf("Failed to setup RX queue\n"); + } else { + struct rte_eth_txconf txconf = port->tx_conf; + + txconf.offloads = res->offloads; + socket_id = txring_numa[res->port_id]; + if (!numa_support || socket_id == NUMA_NO_CONFIG) + socket_id = port->socket_id; + + ret = rte_eth_tx_queue_setup(res->port_id, + res->queue_idx, + res->ring_size, + socket_id, + &txconf); + 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, + (void *)&cmd_queue_setup_offloads, + NULL, + }, +}; + /* ******************************************************************************** */ /* list of instructions */ @@ -16272,6 +16400,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..e8e0b0a4e 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 rx or tx queue:: + + testpmd> queue setup (rx|tx) (port_id) (queue_idx) (ring_size) + (offloads) + Port Functions --------------