From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by dpdk.org (Postfix) with ESMTP id 289075F45 for ; Wed, 14 Mar 2018 18:36:23 +0100 (CET) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga005.jf.intel.com ([10.7.209.41]) by fmsmga101.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 14 Mar 2018 10:36:22 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.48,306,1517904000"; d="scan'208";a="208228546" Received: from irsmsx107.ger.corp.intel.com ([163.33.3.99]) by orsmga005.jf.intel.com with ESMTP; 14 Mar 2018 10:36:21 -0700 Received: from irsmsx105.ger.corp.intel.com ([169.254.7.221]) by IRSMSX107.ger.corp.intel.com ([169.254.10.46]) with mapi id 14.03.0319.002; Wed, 14 Mar 2018 17:36:20 +0000 From: "Ananyev, Konstantin" To: "Zhang, Qi Z" , "thomas@monjalon.net" CC: "dev@dpdk.org" , "Xing, Beilei" , "Wu, Jingjing" , "Lu, Wenzhuo" , "Zhang, Qi Z" Thread-Topic: [dpdk-dev] [PATCH v2 3/4] app/testpmd: add command for queue setup Thread-Index: AQHTsdzf+C3y/BxG70OPc8n02kHrlqPQEQMw Date: Wed, 14 Mar 2018 17:36:20 +0000 Message-ID: <2601191342CEEE43887BDE71AB9772589E28FCF5@irsmsx105.ger.corp.intel.com> References: <20180212045314.171616-1-qi.z.zhang@intel.com> <20180302041306.90324-1-qi.z.zhang@intel.com> <20180302041306.90324-4-qi.z.zhang@intel.com> In-Reply-To: <20180302041306.90324-4-qi.z.zhang@intel.com> Accept-Language: en-IE, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiM2IzYzlmZDEtOWUyYy00NzM3LTliNDQtYTE2NjRmZGM0ZDU3IiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE2LjUuOS4zIiwiVHJ1c3RlZExhYmVsSGFzaCI6ImZicExwV1Z4UUVJZGV0bFlYRzFcL0VFeUZ6Z2RFZHp4R1N3dHZPaFo5VW9NPSJ9 x-ctpclassification: CTP_NT dlp-product: dlpe-windows dlp-version: 11.0.0.116 dlp-reaction: no-action x-originating-ip: [163.33.239.180] Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Subject: Re: [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: Wed, 14 Mar 2018 17:36:24 -0000 > -----Original Message----- > From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Qi Zhang > Sent: Friday, March 2, 2018 4:13 AM > To: thomas@monjalon.net > Cc: dev@dpdk.org; Xing, Beilei ; Wu, Jingjing ; Lu, Wenzhuo ; > Zhang, Qi Z > Subject: [dpdk-dev] [PATCH v2 3/4] app/testpmd: add command for queue set= up >=20 > Add new command to setup queue: > queue setup (rx|tx) (port_id) (queue_idx) (ring_size) >=20 > rte_eth_[rx|tx]_queue_setup will be called corresponsively >=20 > 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(+) >=20 > 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" >=20 > + "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 =3D { > }, > }; >=20 > +/* 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 =3D > + TOKEN_STRING_INITIALIZER(struct cmd_queue_setup_result, queue, "queue")= ; > +cmdline_parse_token_string_t cmd_queue_setup_setup =3D > + TOKEN_STRING_INITIALIZER(struct cmd_queue_setup_result, setup, "setup")= ; > +cmdline_parse_token_string_t cmd_queue_setup_rxtx =3D > + TOKEN_STRING_INITIALIZER(struct cmd_queue_setup_result, rxtx, "rx#tx"); > +cmdline_parse_token_num_t cmd_queue_setup_port_id =3D > + TOKEN_NUM_INITIALIZER(struct cmd_queue_setup_result, port_id, UINT16); > +cmdline_parse_token_num_t cmd_queue_setup_queue_idx =3D > + TOKEN_NUM_INITIALIZER(struct cmd_queue_setup_result, queue_idx, UINT16)= ; > +cmdline_parse_token_num_t cmd_queue_setup_ring_size =3D > + 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 =3D parsed_result; > + struct rte_port *port; > + struct rte_mempool *mp; > + uint8_t rx =3D 1; > + int ret; > + > + if (port_id_is_invalid(res->port_id, ENABLED_WARN)) > + return; > + > + if (!strcmp(res->rxtx, "tx")) > + rx =3D 0; > + > + if (rx && res->ring_size <=3D rx_free_thresh) { > + printf("Invalid ring_size, must >=3D rx_free_thresh: %d\n", > + rx_free_thresh); > + return; > + } > + > + if (rx && res->queue_idx >=3D nb_rxq) { > + printf("Invalid rx queue index, must < nb_rxq: %d\n", > + nb_rxq); > + return; > + } > + > + if (!rx && res->queue_idx >=3D nb_txq) { > + printf("Invalid tx queue index, must < nb_txq: %d\n", > + nb_txq); > + return; > + } > + > + port =3D &ports[res->port_id]; > + if (rx) { > + if (numa_support && > + (rxring_numa[res->port_id] !=3D NUMA_NO_CONFIG)) { > + mp =3D mbuf_pool_find(rxring_numa[res->port_id]); > + if (mp =3D=3D NULL) { > + printf("Failed to setup RX queue: " > + "No mempool allocation" > + " on the socket %d\n", > + rxring_numa[res->port_id]); > + return; > + } > + ret =3D rte_eth_rx_queue_setup(res->port_id, > + res->queue_idx, > + res->ring_size, > + rxring_numa[res->port_id], > + &(port->rx_conf), > + mp); You can probably reorder that code a bit to mimimize code duplication: If (numa_support ....) { mp =3D ...; rx_conf =3D ...;=20 } else { mp =3D ...; rx_conf =3D ...; } If (mp =3D=3D NILL) {....} ret =3D rte_eth_rx_queue_setup(..., rx_conf, mp); Same for TX. Konstantin