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 147512C2A for ; Fri, 30 Jun 2017 07:11:14 +0200 (CEST) Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by orsmga103.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 29 Jun 2017 22:11:13 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.40,284,1496127600"; d="scan'208";a="120686990" Received: from fmsmsx107.amr.corp.intel.com ([10.18.124.205]) by fmsmga005.fm.intel.com with ESMTP; 29 Jun 2017 22:11:13 -0700 Received: from fmsmsx118.amr.corp.intel.com (10.18.116.18) by fmsmsx107.amr.corp.intel.com (10.18.124.205) with Microsoft SMTP Server (TLS) id 14.3.319.2; Thu, 29 Jun 2017 22:11:12 -0700 Received: from shsmsx152.ccr.corp.intel.com (10.239.6.52) by fmsmsx118.amr.corp.intel.com (10.18.116.18) with Microsoft SMTP Server (TLS) id 14.3.319.2; Thu, 29 Jun 2017 22:11:12 -0700 Received: from shsmsx103.ccr.corp.intel.com ([169.254.4.116]) by SHSMSX152.ccr.corp.intel.com ([169.254.6.122]) with mapi id 14.03.0319.002; Fri, 30 Jun 2017 13:11:10 +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 0/5] Support NIC reset and keep same port id Thread-Index: AQHS8OmcYocUfhjOQ0aOAHayy1z9eqI82EnQ Date: Fri, 30 Jun 2017 05:11:10 +0000 Message-ID: <67D543A150B29E4CAAE53918F64EDAEA373E7636@SHSMSX103.ccr.corp.intel.com> References: <20170629083404.1271-1-wei.dai@intel.com> <1498748282-69914-1-git-send-email-wei.dai@intel.com> In-Reply-To: <1498748282-69914-1-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 0/5] Support NIC reset and keep same port id 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:11:15 -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-linuxapp-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 Port 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 Port 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 0/5] Support NIC reset and keep same port id Sometimes a port have to be reset. For example PF is reset, all its VF shou= ld also be reset. After reset, if the port goes through PCI remove() and th= en PCI probe() for restoration, its port id may be changed and this is not = expected by some customer DPDK application. Normally, PCI probe() includes two parts: one is in rte_ethdev layer and th= e other is calling PMD dev_init(). PCI remove( ) release all resource alloc= ated from rte_ethdev layer in PCI probe( ) and calls PMD dev_unit( ). To keep same port id and reset the port, only dev_uninit() and dev_init( ) = in PMD can be called and keep all resources allocated from rte_ethdev layer= poart in PCI probe( ). New rte_eth_dev_reset( ) calls rte_eth_dev_stop( ), PMD dev_uninit( ) and t= hen PMD dev_init( ) to reset a port and keep same port id. And then application can go through rte_eth_dev_configure( ), rte_eth_rx_qu= eue_setup( ), rte_eth_tx_queue_setup( ) and rte_eth_dev_start( ) again to r= estore its previous settings or to reconfigure itself with different settin= gs. To test this new feature, a testpmd command "port reset port_id" is added. The mapping between port number and its PCI address can be monitored to con= firm its port number is kept. And following test case can also be used to confirm the port can work again= after reset. A typical test steps are listed as follows: For example, run "ifconfig PF-name down" will trigger a reset to VF. 1. run testpmd with 2 ixgbe VF ports belonging to same PF 2. testpmd > se= t verbose 1 //to observe VF working 3. testpmd > show port info all //show= port number, PCI addr and MAC addr 4. testpmd > start 5. let all ports f= orwarding work for a while 6. testpmd > show port stats all 7. ifconfig n= ame-of-PF down 8. A message is shown in testmd to indicate PF reset 9. if= config name-of-PF up 10. testpmd > stop // stop forwarding to avoid crash d= uring reset 11. testpmd > port reset all 12. testpmd > port stop all 13. te= stpmd > port start all //recofnig all ports 14. testpmd > show port info al= l //confirm same mapping of port id and PCI addr 15. testpmd > start // r= estore forwarding 14. let all ports forwarding work for a while 15. testpmd= > show port stats all //confirm all port can work again 16. repeat above s= tep 7 - 15 chagnes: v4: add PCI address to confirm its port number keep same correct test method in cover letter v3: update testpmd command v2: only reset PMD layer resource and keep same port id, but not restore settings Wei Dai (5): ethdev: add support of NIC reset net/ixgbe: add support of reset net/i40e: add support of reset app/testpmd: display PCI address in port info app/testpmd: enhance command to test NIC reset app/test-pmd/cmdline.c | 10 ++++-- app/test-pmd/config.c | 5 +++ app/test-pmd/testpmd.c | 61 ++++++++++++++++++++++++++++++= ++-- app/test-pmd/testpmd.h | 1 + drivers/net/i40e/i40e_ethdev.c | 16 +++++++++ drivers/net/i40e/i40e_ethdev_vf.c | 16 +++++++++ drivers/net/ixgbe/ixgbe_ethdev.c | 38 +++++++++++++++++++++ lib/librte_ether/rte_ethdev.c | 16 +++++++++ lib/librte_ether/rte_ethdev.h | 12 +++++++ lib/librte_ether/rte_ether_version.map | 2 +- 10 files changed, 170 insertions(+), 7 deletions(-) -- 2.7.4