From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id A9580A0562; Tue, 23 Mar 2021 09:55:56 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 39B594014D; Tue, 23 Mar 2021 09:55:56 +0100 (CET) Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by mails.dpdk.org (Postfix) with ESMTP id 0FC4E40143 for ; Tue, 23 Mar 2021 09:55:53 +0100 (CET) IronPort-SDR: Ug9vY2Mq/EEwvCxHJyzDpKwOzcSE39Pc15lZAbJ5CpXOvllX+u5w0xI3gP4rRaBf5YGbMTBTEu HufLZcPezOPw== X-IronPort-AV: E=McAfee;i="6000,8403,9931"; a="275535764" X-IronPort-AV: E=Sophos;i="5.81,271,1610438400"; d="scan'208";a="275535764" Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Mar 2021 01:55:52 -0700 IronPort-SDR: k6UHIi4AuO0lH346JTfGln5A0SfUv0QbTWtxx32gS+i0vV+S7pq+1U7jPhdYubdeqKTwk9xDkn IvPvNJTo6NkA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.81,271,1610438400"; d="scan'208";a="442445166" Received: from fmsmsx602.amr.corp.intel.com ([10.18.126.82]) by FMSMGA003.fm.intel.com with ESMTP; 23 Mar 2021 01:55:48 -0700 Received: from fmsmsx612.amr.corp.intel.com (10.18.126.92) by fmsmsx602.amr.corp.intel.com (10.18.126.82) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2106.2; Tue, 23 Mar 2021 01:55:47 -0700 Received: from FMSEDG603.ED.cps.intel.com (10.1.192.133) by fmsmsx612.amr.corp.intel.com (10.18.126.92) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2106.2 via Frontend Transport; Tue, 23 Mar 2021 01:55:47 -0700 Received: from NAM12-DM6-obe.outbound.protection.outlook.com (104.47.59.170) by edgegateway.intel.com (192.55.55.68) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2106.2; Tue, 23 Mar 2021 01:55:47 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=NQQx2vPjlIHgVHTo91uIheJOqqqk0CAFVl8gAPFL8wRvAzNBc4G0DQEBpetlpc6Iy6X5AYrDEtYM6dMeKyjYzy1JTil+aCSn6vWIY8OBMHenyCkl9qu0EtNsMko49USttHeXmvKkPsadthUjeCPwtaPdyxZeTSedt+WpRnEIpBoRyem3jDMKQhUfi3JTK2Cmz6JtydJDVJJT6WMnnojuozdOwnZ9dL3JTobzSWXE4KsEm92hvKZQU5FXn1P+H1WOzIqPKlKzmGhki6EQooAKEr392KlU8jWgFmAwJv+QEwv18X2DVDy1IMYZvBun3feGMAttr2YsED8hdz/Mhp6KQQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=KZLklGSglLAv3I72pu8X3xPXRT6aUE5VmLQqzhClxPY=; b=Eifh+Ttey/W27xu3+fHWla9w7dUhO8/WXbbsyf41DDrfsCQoODzN7pNV7yg6/zWPp9vZTA/d07o8k0BuULPJRoea7dwyfQCSyNnpTDofIAgLwmhq1ZQY5oh+v+szdeYAaGy+KZom7rZHRFEe85TfRjxB9o5iP413YpGP4OwnQ9WOZBoixVNpCAe38AVNA8KBU8rnTjh78xHKQZNyr2tdtnTAgg8Q1E3zRzITuo29Pq0Pdpf+NM3M2nwMhWape805qTwtnyBSehI/1Fpd45SN/6/cEmrKGXtSOoxM4Kllx5dtJLmxuPZgS6jqyJoZTgXUsSKRd+Vfh9O43pmS4HMSDA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=intel.onmicrosoft.com; s=selector2-intel-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=KZLklGSglLAv3I72pu8X3xPXRT6aUE5VmLQqzhClxPY=; b=xdMfC9h+puA9O2c2sxraXq05b3bDWlyMb6dWwIbS7RP4a3U5fiv9+dTHk0XF5HAc/lXeP1QS0SMvauNgJlgQBzyUeTwqF9PP6X8NS6ht0XPe60jLe67NBbvRpLj73F9+fA4358r5NFsGPvYC+QtF7ujXDJRVe2U8f3komc9H+PY= Received: from DM4PR11MB5534.namprd11.prod.outlook.com (2603:10b6:5:391::22) by DM6PR11MB3226.namprd11.prod.outlook.com (2603:10b6:5:59::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3955.18; Tue, 23 Mar 2021 08:55:45 +0000 Received: from DM4PR11MB5534.namprd11.prod.outlook.com ([fe80::79a3:3404:b907:d49c]) by DM4PR11MB5534.namprd11.prod.outlook.com ([fe80::79a3:3404:b907:d49c%6]) with mapi id 15.20.3955.027; Tue, 23 Mar 2021 08:55:45 +0000 From: "Li, Xiaoyun" To: Lijun Ou , "Yigit, Ferruh" CC: "dev@dpdk.org" , "linuxarm@openeuler.org" Thread-Topic: [PATCH 1/3] app/testpmd: fix forwarding configuration when DCB test Thread-Index: AQHXEall9yCC4yIwfUueExjyOksydKqRWaIQ Date: Tue, 23 Mar 2021 08:55:45 +0000 Message-ID: References: <1614939741-63927-1-git-send-email-oulijun@huawei.com> <1614939741-63927-2-git-send-email-oulijun@huawei.com> In-Reply-To: <1614939741-63927-2-git-send-email-oulijun@huawei.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: huawei.com; dkim=none (message not signed) header.d=none;huawei.com; dmarc=none action=none header.from=intel.com; x-originating-ip: [192.102.204.53] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 72f5f0ee-aa07-420f-a58c-08d8edd97231 x-ms-traffictypediagnostic: DM6PR11MB3226: x-ld-processed: 46c98d88-e344-4ed4-8496-4ed7712e255d,ExtAddr x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:619; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: Ms1ZTsFSNwA+ZxPojyVqbyDbuGmJZHJ5svMuNR4V/hfgwQP+vRbuVm5785wy5iInXoczIMiJ20ewIZH4n+JBi4PZHFzgGIQmmUHXCfFcttKYmRWuKK5OiLGQ8yebvLEbuayLbaJxLUWJ84cGQgLnPqGNLSP9npeZt0Nz0mWa0343TfFW9JyFAD11W2D+Kb/ZG499mvPLE9cJXcIhPt0GLXap8b9RLHXaNp1NRmz4C2aP6nWoG2sY/gczXaGbqUXoSrnvbe6UFOJ6gEAtubAC28TcEWWPuLrBdC6TiKr5uUbfS1QMpLGeRSEcW3UTl9/NgwtKDwsh0IK+pat/3C9wfN+7nTRb+YpulRdRfiaj8X0iUzs7oo7U3ebAQUveBzpYBAvvq/l6XVax1K7fT9UES27o8Jb5jSDGpLJ/n5dXqOQlivVPKOWDvhSyWPDTbCKJwYvJK0g+YD46LO2QxNrNCe7ZCaE4p9wCYVs/Bl2jUnW8P0WdpNU6HYLCnNBLxJpDVFdU3nUa0s21N2bBspDgxta3w+xGymd7dzKYSOAiZ7gf/FahYTw1kE5pFIBkfAOi5X5XlbKUHYJDEedcQTDdSoCq6JRulDd+TNp8EvvKQOH3FmlhabJbq9HxuhQKwvV95YHxCYZpxSOz4YisF2CWbYVZbtSveYqVmhu4stNuP7g= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DM4PR11MB5534.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(346002)(39860400002)(366004)(136003)(396003)(376002)(478600001)(26005)(7696005)(186003)(8936002)(8676002)(33656002)(316002)(54906003)(86362001)(6506007)(2906002)(53546011)(110136005)(71200400001)(5660300002)(64756008)(66446008)(66556008)(66476007)(55016002)(4326008)(38100700001)(52536014)(9686003)(6636002)(83380400001)(66946007)(76116006); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata: =?us-ascii?Q?tq1NBe1Qt2XTIL5vsS8y5QNG0kqgk9iOTqTyf+wlvi2Cbj9jClDqo1Ab7pwJ?= =?us-ascii?Q?KMnSE42fgiY2fZ6iDVvQWbgoXbKJHoALrLUHaXS/mZn9Rdn4d38ajRpW8XD7?= =?us-ascii?Q?XMdqqkMhWdoOM/3GcEFw9flq1k98ofzVIwmhI8bySknFYAvJROWr5bNiDqhi?= =?us-ascii?Q?o0EOYb/UTa6ch0hOQvgYVl7YMBRckOWOMFzdNBIIeARGCiwRJ2N0oj1T1KiT?= =?us-ascii?Q?1JoyfhuGqorC5OXPX7Dmh5IYCxGoXQkbE7ZGtAebG11+Ld0g82ilcrdcxyhp?= =?us-ascii?Q?CjxwMNr+QaVsUb6sMmz9warksFzuOxPhCZfl5mSg93oR/yVMt6da7b1GgKUZ?= =?us-ascii?Q?wlek0aPqf5ZNHjNHRaideTLVY672DmbiQGDg898rEy7iGX4LPY+owoTqDo0t?= =?us-ascii?Q?YEzSG41hhjrrZoIkmz5Y5hC/hBB5Zn1mJ+p1JOyLYaZMSMQRJYP3hMJkmxHN?= =?us-ascii?Q?jniIe9+fWrmeBmiCXER3EEch5TbUTkIBMruRf2+pe3GuCZ1SL/YpknyXKgye?= =?us-ascii?Q?Rtf4WRgRNtbdhTyTzJBZhrzPX7ls6KgXkvVZon6BsvH7lypMUdgIcNK0fHd6?= =?us-ascii?Q?ZwG8OQXg1CJt1qawy+0FIjW5xIKd8l1iweK1tCxQ+7NGm5gucHOqQiGxFSXn?= =?us-ascii?Q?A+s0oWHG7HfweI2PsK8GsC2TsLghJ53rTZDF/ANnVOsxSLH6/5pSZPkjvhEN?= =?us-ascii?Q?HvaR+K5VBF1HGuFR7MY4rJ2/Pc30nfDKzjWzXMyVNM66VTXG7Y69bH64BBcJ?= =?us-ascii?Q?ryO6w0gWVo9B68St2WXRMzXVn9D747Uo8XfD392yyWqp17iEXtFars6k4TT3?= =?us-ascii?Q?1OAD72TwD7uBnPak+LE0hxkM3ZjCIg49pzlH9Itne6uadavjV1FI/raMyjou?= =?us-ascii?Q?8knEn+vOA9lkO2msoecWhzxPQs+taCVzghjJ5QeZRb+QEJCH3uwOoG5Igvbb?= =?us-ascii?Q?PiuVk87Lmmh58Je/tJ6wWVEVyPS01QdSCBUJ+xuMDFpnvmmxGkQvlft6/aSc?= =?us-ascii?Q?S/FC1H1PHkBHXjFbuL6qOIWcOMVlVQQzL/u+Ohu2JL2gsDbMElu5n9Tv7pd/?= =?us-ascii?Q?JvnR54rmaMWYBCaHZD+PxlvtSuBxGg/oldLiPdyYHHdYehH+rhTTDH5TztGM?= =?us-ascii?Q?mTRz5cPmilavs/s0IRTweyDwhdz4ozpAVke2zStn60LdXIAHA9Es0GbjbLE9?= =?us-ascii?Q?rtr1kPqPc4CfHgHBrEqsN2mkCgCEobGIGjBc4N7iSiPsQIRaPiGSna7JFfUF?= =?us-ascii?Q?5ufH7H0FReg7zi3xz4ihLkS1rnZTWPWRCm84BgE+3aMM67fJo2rHJZY1FHDJ?= =?us-ascii?Q?3bLlp2bA/vknc/qDs2GhO/JV?= Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM4PR11MB5534.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 72f5f0ee-aa07-420f-a58c-08d8edd97231 X-MS-Exchange-CrossTenant-originalarrivaltime: 23 Mar 2021 08:55:45.1013 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: S/CHtRJPxPKGfiLLHJ7F020MXe8VZcGfJdFxStXdBmZ1KXRsWzThl0GFJXDa8NiKOQFzcZy22a4IMPaczRL7VQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR11MB3226 X-OriginatorOrg: intel.com Subject: Re: [dpdk-dev] [PATCH 1/3] app/testpmd: fix forwarding configuration when DCB test X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 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" Hi > -----Original Message----- > From: Lijun Ou > Sent: Friday, March 5, 2021 18:22 > To: Yigit, Ferruh > Cc: Li, Xiaoyun ; dev@dpdk.org; > linuxarm@openeuler.org > Subject: [PATCH 1/3] app/testpmd: fix forwarding configuration when DCB t= est >=20 > From: Huisong Li >=20 The commit message is too long and redundant. Please simplify it. > Currently, 'nb_fwd_lcores' value are both adjusted based on 'nb_fwd_strea= ms' in > rss/simple/icmp_echo_fwd_config_setup. But the operation is lack for > dcb_fwd_config_setup, which may lead to a bad events where multiple polli= ng > threads operate on the same queue. As a result, various possible exceptio= ns will > occur. The procedure is as follows: >=20 > startup testpmd app as follows: > testpmd> port stop all > testpmd> set nbcore 8 > testpmd> port config 0 dcb vt off 4 pfc on port config all rxq 16 port > testpmd> config all txq 16 port start all set fwd mac > Logical Core 1 (socket 0) forwards packets on 4 streams: > RX P=3D0/Q=3D0 (socket 0) -> TX P=3D0/Q=3D0 (socket 0) peer=3D02:00:00:00= :00:00 RX > P=3D0/Q=3D1 (socket 0) -> TX P=3D0/Q=3D1 (socket 0) peer=3D02:00:00:00:00= :00 RX > P=3D0/Q=3D2 (socket 0) -> TX P=3D0/Q=3D2 (socket 0) peer=3D02:00:00:00:00= :00 RX > P=3D0/Q=3D3 (socket 0) -> TX P=3D0/Q=3D3 (socket 0) peer=3D02:00:00:00:00= :00 Logical > Core 2 (socket 0) forwards packets on 4 streams: > RX P=3D0/Q=3D4 (socket 0) -> TX P=3D0/Q=3D4 (socket 0) peer=3D02:00:00:00= :00:00 RX > P=3D0/Q=3D5 (socket 0) -> TX P=3D0/Q=3D5 (socket 0) peer=3D02:00:00:00:00= :00 RX > P=3D0/Q=3D6 (socket 0) -> TX P=3D0/Q=3D6 (socket 0) peer=3D02:00:00:00:00= :00 RX > P=3D0/Q=3D7 (socket 0) -> TX P=3D0/Q=3D7 (socket 0) peer=3D02:00:00:00:00= :00 Logical > Core 3 (socket 0) forwards packets on 4 streams: > RX P=3D0/Q=3D8 (socket 0) -> TX P=3D0/Q=3D8 (socket 0) peer=3D02:00:00:00= :00:00 RX > P=3D0/Q=3D9 (socket 0) -> TX P=3D0/Q=3D9 (socket 0) peer=3D02:00:00:00:00= :00 RX > P=3D0/Q=3D10 (socket 0) -> TX P=3D0/Q=3D10 (socket 0) peer=3D02:00:00:00:= 00:00 RX > P=3D0/Q=3D11 (socket 0) -> TX P=3D0/Q=3D11 (socket 0) peer=3D02:00:00:00:= 00:00 Logical > Core 4 (socket 0) forwards packets on 4 streams: > RX P=3D0/Q=3D12 (socket 0) -> TX P=3D0/Q=3D12 (socket 0) peer=3D02:00:00:= 00:00:00 RX > P=3D0/Q=3D13 (socket 0) -> TX P=3D0/Q=3D13 (socket 0) peer=3D02:00:00:00:= 00:00 RX > P=3D0/Q=3D14 (socket 0) -> TX P=3D0/Q=3D14 (socket 0) peer=3D02:00:00:00:= 00:00 RX > P=3D0/Q=3D15 (socket 0) -> TX P=3D0/Q=3D15 (socket 0) peer=3D02:00:00:00:= 00:00 Logical > Core 5 (socket 0) forwards packets on 1 streams: > RX P=3D0/Q=3D4 (socket 0) -> TX P=3D0/Q=3D4 (socket 0) peer=3D02:00:00:00= :00:00 Logical > Core 6 (socket 0) forwards packets on 1 streams: > RX P=3D0/Q=3D5 (socket 0) -> TX P=3D0/Q=3D5 (socket 0) peer=3D02:00:00:00= :00:00 Logical > Core 7 (socket 0) forwards packets on 1 streams: > RX P=3D0/Q=3D6 (socket 0) -> TX P=3D0/Q=3D6 (socket 0) peer=3D02:00:00:00= :00:00 Logical > Core 8 (socket 0) forwards packets on 1 streams: > RX P=3D0/Q=3D7 (socket 0) -> TX P=3D0/Q=3D7 (socket 0) peer=3D02:00:00:00= :00:00 >=20 > Notice: number of rxq and txq in running cmdline are greater than used nb= _tc. >=20 > For the DCB forwarding test, each core is assigned on each traffic class = and each > core is assigned a multi-stream. Therefore, 'nb_fwd_lcores' > value can be adjusted based on 'total_tc_num' in all forwarding ports. >=20 > In addition, after operation of port stop/port start, forwarding configur= ation is > changed by rss_fwd_config_setup. In "start_port" > function, dcb_test is set to 1 based on dcb_config. So it also should be = cleared > when dcb_config is 0. >=20 > Fixes: 900550de04a7 ("app/testpmd: add dcb support") > Fixes: ce8d561418d4 ("app/testpmd: add port configuration settings") > Cc: stable@dpdk.org >=20 > Signed-off-by: Huisong Li > Signed-off-by: Lijun Ou > --- > app/test-pmd/config.c | 19 +++++++++++++++++++ app/test-pmd/testpmd.c = | > 12 +++++++----- > 2 files changed, 26 insertions(+), 5 deletions(-) >=20 > diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c index > 576d5ac..c89f8cd 100644 > --- a/app/test-pmd/config.c > +++ b/app/test-pmd/config.c > @@ -2864,6 +2864,21 @@ rss_fwd_config_setup(void) > } > } >=20 > +static uint16_t > +get_fwd_port_total_tc_num(void) > +{ > + struct rte_eth_dcb_info dcb_info; > + uint16_t total_tc_num =3D 0; > + unsigned int i; > + > + for (i =3D 0; i < nb_fwd_ports; i++) { > + (void)rte_eth_dev_get_dcb_info(fwd_ports_ids[i], &dcb_info); > + total_tc_num +=3D dcb_info.nb_tcs; > + } > + > + return total_tc_num; > +} It's only 3 lines. Is it really necessary to make it into a function which = is not called by anyone else? A comment and the loop are enough. > + > /** > * For the DCB forwarding test, each core is assigned on each traffic cl= ass. > * > @@ -2883,12 +2898,16 @@ dcb_fwd_config_setup(void) > lcoreid_t lc_id; > uint16_t nb_rx_queue, nb_tx_queue; > uint16_t i, j, k, sm_id =3D 0; > + uint16_t total_tc_num =3D 0; > uint8_t tc =3D 0; >=20 > cur_fwd_config.nb_fwd_lcores =3D (lcoreid_t) nb_fwd_lcores; > cur_fwd_config.nb_fwd_ports =3D nb_fwd_ports; > cur_fwd_config.nb_fwd_streams =3D > (streamid_t) (nb_rxq * cur_fwd_config.nb_fwd_ports); > + total_tc_num =3D get_fwd_port_total_tc_num(); > + if (cur_fwd_config.nb_fwd_lcores > total_tc_num) > + cur_fwd_config.nb_fwd_lcores =3D total_tc_num; >=20 > /* reinitialize forwarding streams */ > init_fwd_streams(); > diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index > 1a57324..7eb810b 100644 > --- a/app/test-pmd/testpmd.c > +++ b/app/test-pmd/testpmd.c > @@ -2707,14 +2707,16 @@ stop_port(portid_t pid) > portid_t peer_pl[RTE_MAX_ETHPORTS]; > int peer_pi; >=20 > - if (dcb_test) { > - dcb_test =3D 0; > - dcb_config =3D 0; > - } > - > if (port_id_is_invalid(pid, ENABLED_WARN)) > return; >=20 > + /* > + * In "start_port" function, dcb_test is set to 1 based on dcb_config. > + * So it should be cleared when dcb_config is 0. > + */ > + if (dcb_config =3D=3D 0) > + dcb_test =3D 0; > + I don't understand why are you changing this. dcb_test will only be set when dcb_config is 1 when starting ports. And bot= h dcb_test and dcb_config will be cleared when stopping ports. So dcb will only affect when you set port dcb and then start port and when = stop port dcb will be cleared. So what's the problem of original codes? Your change will cause issues that there's no place to set dcb_config as 0.= If you config dcb, then it'll be always dcb mode unless restart the whole = testpmd. > printf("Stopping ports...\n"); >=20 > RTE_ETH_FOREACH_DEV(pi) { > -- > 2.7.4