From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by dpdk.org (Postfix) with ESMTP id 748F22C2A for ; Fri, 30 Jun 2017 07:13:28 +0200 (CEST) Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga103.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 29 Jun 2017 22:13:27 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.40,284,1496127600"; d="scan'208";a="103019113" Received: from fmsmsx108.amr.corp.intel.com ([10.18.124.206]) by orsmga004.jf.intel.com with ESMTP; 29 Jun 2017 22:13:27 -0700 Received: from fmsmsx111.amr.corp.intel.com (10.18.116.5) by FMSMSX108.amr.corp.intel.com (10.18.124.206) with Microsoft SMTP Server (TLS) id 14.3.319.2; Thu, 29 Jun 2017 22:13:27 -0700 Received: from shsmsx102.ccr.corp.intel.com (10.239.4.154) by fmsmsx111.amr.corp.intel.com (10.18.116.5) with Microsoft SMTP Server (TLS) id 14.3.319.2; Thu, 29 Jun 2017 22:13:26 -0700 Received: from shsmsx103.ccr.corp.intel.com ([169.254.4.116]) by shsmsx102.ccr.corp.intel.com ([169.254.2.146]) with mapi id 14.03.0319.002; Fri, 30 Jun 2017 13:13:23 +0800 From: "Peng, Yuan" To: "Dai, Wei" , "thomas@monjalon.net" , "Lu, Wenzhuo" , "Ananyev, Konstantin" , "Zhang, Helin" , "Wu, Jingjing" , "yuan.pntel.com@dpdk.org" CC: "dev@dpdk.org" , "Dai, Wei" Thread-Topic: [dpdk-dev] [PATCH v4 5/5] app/testpmd: enhance command to test NIC reset Thread-Index: AQHS8OnMMZYt3wCx30Sa8yVfaX1qxKI83VXg Date: Fri, 30 Jun 2017 05:13:22 +0000 Message-ID: <67D543A150B29E4CAAE53918F64EDAEA373E765D@SHSMSX103.ccr.corp.intel.com> References: <20170629083404.1271-1-wei.dai@intel.com> <1498748282-69914-1-git-send-email-wei.dai@intel.com> <1498748282-69914-6-git-send-email-wei.dai@intel.com> In-Reply-To: <1498748282-69914-6-git-send-email-wei.dai@intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-version: 10.0.102.7 dlp-reaction: no-action x-originating-ip: [10.239.127.40] Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Subject: Re: [dpdk-dev] [PATCH v4 5/5] app/testpmd: enhance command to test NIC reset 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, 30 Jun 2017 05:13:29 -0000 Tested-by: Peng, Yuan - Tested commit bbe569daa7e99b36d44b12bb3d23ddfbc26d383c+the 5 patches. - OS: 4.8.6-300.fc25.x86_64 - GCC: gcc version 6.2.1 20160916 (Red Hat 6.2.1-2) (GCC) - CPU: Intel(R) Xeon(R) CPU E5-2699 v3 @ 2.30GHz - NIC: Ethernet controller [0200]: Intel Corporation Ethernet Controller 10= G X550T [8086:1563] (rev 01) - Default x86_64-native-linuxapp-gcc configuration - Prerequisites: - Total 1cases, 1 passed, 0 failed Steps: DUT: 1. echo 2 >/sys/bus/pci/devices/0000:83:00.0/sriov_numvfs ./usertools/dpdk-devbind.py -b vfio-pci 83:10.0 83:10.2 ./x86_64-native-lin= uxapp-gcc/app/testpmd -c 0x3 -n 4 -- -i 2.testpmd> set verbose 1 testpmd> set fwd mac testpmd> start tester: scapy sendp([Ether(dst=3D"02:09:C0:63:DA:4B")/IP()/UDP()], iface=3D"ens6f0", coun= t=3D1) dut: testpmd>show port stats all port0 can fwd the packet normally testpmd>show port info all show port number, PCI addr and MAC addr 3. ifconfig ens801f0 down Port 0: Interrupt reset event Port 1: Interrupt reset event ifconfig ens801f0 up 4.testpmd> stop 5. testpmd> port reset all Resetting ports... Finish resetting Port 0 with PCI Address: 0000:83:10.0 Finish resetting Por= t 1 with PCI Address: 0000:83:10.2 Done 6. testpmd> port stop all Stopping ports... Checking link statuses... Done testpmd> port start all Configuring Port 0 (socket 1) with PCI Address: 0000:83:10.0 Port 0: 02:09:= C0:63:DA:4B Configuring Port 1 (socket 1) with PCI Address: 0000:83:10.2 Po= rt 1: 02:09:C0:37:93:6F Checking link statuses... Done 7. testpmd> show port info all confirm same mapping of port id and PCI address. 8.testpmd> start Tester: scapy sendp([Ether(dst=3D"02:09:C0:63:DA:4B")/IP()/UDP()], iface=3D"ens6f0", coun= t=3D1) dut: testpmd>show port stats all port0 can fwd the packet normally 9.repeat step3 to step8, the same result. -----Original Message----- From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Wei Dai Sent: Thursday, June 29, 2017 10:58 PM To: thomas@monjalon.net; Lu, Wenzhuo ; Ananyev, Konst= antin ; Zhang, Helin ;= Wu, Jingjing ; yuan.pntel.com@dpdk.org Cc: dev@dpdk.org; Dai, Wei Subject: [dpdk-dev] [PATCH v4 5/5] app/testpmd: enhance command to test NIC= reset When PF is reset, a message will show it and all its VF need to be reset. User can run the command "port reset port_id" to reset the VF port and to keep same port id without any configuration. Th= en user can run "port stop port_id" and "port start port_id" to reconfigure its forwarding mode and parmaters a= s previous ones. To avoid crash, current forwarding should be stopped before running "port r= eset port_id". Signed-off-by: Wei Dai --- app/test-pmd/cmdline.c | 10 ++++++--- app/test-pmd/testpmd.c | 61 ++++++++++++++++++++++++++++++++++++++++++++++= +--- app/test-pmd/testpmd.h | 1 + 3 files changed, 66 insertions(+), 6 deletions(-) diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c index ff8ffd2.= .58ba6e4 100644 --- a/app/test-pmd/cmdline.c +++ b/app/test-pmd/cmdline.c @@ -950,6 +950,8 @@ static void cmd_operate_port_parsed(void *parsed_result= , stop_port(RTE_PORT_ALL); else if (!strcmp(res->name, "close")) close_port(RTE_PORT_ALL); + else if (!strcmp(res->name, "reset")) + reset_port(RTE_PORT_ALL); else printf("Unknown parameter\n"); } @@ -959,7 +961,7 @@ cmdline_parse_token_string_t cmd_operate_port_all_cmd = =3D "port"); cmdline_parse_token_string_t cmd_operate_port_all_port =3D TOKEN_STRING_INITIALIZER(struct cmd_operate_port_result, name, - "start#stop#close"); + "start#stop#close#reset"); cmdline_parse_token_string_t cmd_operate_port_all_all =3D TOKEN_STRING_INITIALIZER(struct cmd_operate_port_result, value, "all"); =20 @@ -994,6 +996,8 @@ static void cmd_operate_specific_port_parsed(void *pars= ed_result, stop_port(res->value); else if (!strcmp(res->name, "close")) close_port(res->value); + else if (!strcmp(res->name, "reset")) + reset_port(res->value); else printf("Unknown parameter\n"); } @@ -1003,7 +1007,7 @@ cmdline_parse_token_string_t cmd_operate_specific_por= t_cmd =3D keyword, "port"); cmdline_parse_token_string_t cmd_operate_specific_port_port =3D TOKEN_STRING_INITIALIZER(struct cmd_operate_specific_port_result, - name, "start#stop#close"); + name, "start#stop#close#reset"); cmdline_parse_token_num_t cmd_operate_specific_port_id =3D TOKEN_NUM_INITIALIZER(struct cmd_operate_specific_port_result, value, UINT8); @@ -1011,7 +1015,7 @@ cmdline_parse_token_num_t cmd_operate_specific_port_i= d =3D cmdline_parse_inst_t cmd_operate_specific_port =3D { .f =3D cmd_operate_specific_port_parsed, .data =3D NULL, - .help_str =3D "port start|stop|close : Start/Stop/Close port_id"= , + .help_str =3D "port start|stop|close|reset :=20 +Start/Stop/Close/Reset port_id", .tokens =3D { (void *)&cmd_operate_specific_port_cmd, (void *)&cmd_operate_specific_port_port, diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index b29328a.= .7773879 100644 --- a/app/test-pmd/testpmd.c +++ b/app/test-pmd/testpmd.c @@ -1403,6 +1403,7 @@ start_port(portid_t pid) queueid_t qi; struct rte_port *port; struct ether_addr mac_addr; + struct rte_eth_dev_info dev_info; enum rte_eth_event_type event_type; =20 if (port_id_is_invalid(pid, ENABLED_WARN)) @@ -1424,9 +1425,14 @@ start_p= ort(portid_t pid) =20 if (port->need_reconfig > 0) { port->need_reconfig =3D 0; - - printf("Configuring Port %d (socket %u)\n", pi, - port->socket_id); + rte_eth_dev_info_get(pi, &dev_info); + printf("Configuring Port %d (socket %u) with " + "PCI Address: " PCI_PRI_FMT "\n", + pi, port->socket_id, + dev_info.pci_dev->addr.domain, + dev_info.pci_dev->addr.bus, + dev_info.pci_dev->addr.devid, + dev_info.pci_dev->addr.function); /* configure port */ diag =3D rte_eth_dev_configure(pi, nb_rxq, nb_txq, &(port->dev_conf)); @@ -1665,6 +1671,55 @@ close_port(portid_t pid) } =20 void +reset_port(portid_t pid) +{ + int diag; + portid_t pi; + struct rte_port *port; + struct rte_eth_dev_info dev_info; + + if (port_id_is_invalid(pid, ENABLED_WARN)) + return; + + printf("Resetting ports...\n"); + + RTE_ETH_FOREACH_DEV(pi) { + if (pid !=3D pi && pid !=3D (portid_t)RTE_PORT_ALL) + continue; + + if (port_is_forwarding(pi) !=3D 0 && test_done =3D=3D 0) { + printf("Please remove port %d from forwarding " + "configuration.\n", pi); + continue; + } + + if (port_is_bonding_slave(pi)) { + printf("Please remove port %d from bonded device.\n", + pi); + continue; + } + + diag =3D rte_eth_dev_reset(pi); + if (diag =3D=3D 0) { + port =3D &ports[pi]; + port->need_reconfig =3D 1; + port->need_reconfig_queues =3D 1; + rte_eth_dev_info_get(pi, &dev_info); + printf("Finish resetting Port %d with PCI Address: " + PCI_PRI_FMT "\n", pi, + dev_info.pci_dev->addr.domain, + dev_info.pci_dev->addr.bus, + dev_info.pci_dev->addr.devid, + dev_info.pci_dev->addr.function); + } else { + printf("Failed to reset port %d. diag=3D%d\n", pi, diag); + } + } + + printf("Done\n"); +} + +void attach_port(char *identifier) { portid_t pi =3D 0; diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h index 364502d.= .e4c704a 100644 --- a/app/test-pmd/testpmd.h +++ b/app/test-pmd/testpmd.h @@ -596,6 +596,7 @@ int init_port_dcb_config(portid_t pid, enum dcb_mode_en= able dcb_mode, int start_port(portid_t pid); void stop_port(portid_t pid)= ; void close_port(portid_t pid); +void reset_port(portid_t pid); void attach_port(char *identifier); void detach_port(uint8_t port_id); int all_ports_stopped(void); -- 2.7.4