Many thanks to Yuan for your test support. Your test show the code changes for rte_ether and driver/net can work as expected. I'll update a v3 patch set according to feedback from Wu Jingjing and your test. In v3 patch, only code in testpmd will be changed but with similar test method.
> -----Original Message----- > From: Peng, Yuan > Sent: Thursday, June 29, 2017 11:52 AM > To: Dai, Wei <wei....@intel.com>; tho...@monjalon.net; Lu, Wenzhuo > <wenzhuo...@intel.com>; Ananyev, Konstantin > <konstantin.anan...@intel.com>; Zhang, Helin <helin.zh...@intel.com>; Wu, > Jingjing <jingjing...@intel.com> > Cc: dev@dpdk.org; Dai, Wei <wei....@intel.com> > Subject: RE: [dpdk-dev] [PATCH v2 0/5] Support NIC reset and keep same port id > > Tested-by: Peng, Yuan <yuan.p...@intel.com> > > - Tested commit c1923afc0999b5b6f109190bc5b69b6c3d334635+the 5 > patches. > - OS: 4.5.5-300.fc24.x86_64 > - GCC: gcc version 6.1.1 20160510 (Red Hat 6.1.1-2) (GCC) > - CPU: Intel(R) Xeon(R) CPU E5-2699 v4 @ 2.20GHz > - NIC: Ethernet controller [0200]: Intel Corporation 82599ES 10-Gigabit > SFI/SFP+ > Network Connection [8086:10fb] (rev 01) > - Default x86_64-native-linuxapp-gcc configuration > - Prerequisites: > - Total 1cases, 1 passed, 0 failed > > Steps: > DUT: > 1. run testpmd with ixgbe VF > echo 1 >/sys/bus/pci/devices/0000:07:00.0/sriov_numvfs > ip link set ens786f0 vf 0 mac 00:11:22:33:44:11 ./usertools/dpdk-devbind.py -b > vfio-pci 07:10.0 ./x86_64-native-linuxapp-gcc/app/testpmd -c 0x3 -n 4 -- -i > > 2. testpmd > set verbose 1 > testpmd> set fwd rxonly > testpmd> start > tester: > scapy > >>> pkt1 = Ether(dst="00:11:22:33:44:11")/IP()/UDP()/Raw('x' * 20) > >>> sendp(pkt1, iface="ens786f1", count=1) > Vf can receive the packet correctly. > > 3. ifconfig ens786f0 down > A message is shown in testmd to indicate PF reset: > Port 0: Interrupt reset event > > 4. ifconfig ens786f0 up > > 5. testpmd > stop > > 6. testpmd > reset_port 0 > > 7. testpmd> reconfig_port 0 > PMD: ixgbevf_dev_configure(): VF can't disable HW CRC Strip Port 0 MAC: 00 > 11 22 33 44 11 Begin to forward at least 100 packets to test reconfiguration > > 8. tester: > >>> sendp(pkt1, iface="ens786f1", count=100) > > 9. Finish forwarding 100 packets to test reconfiguration > testpmd> show port stats all > > ######################## NIC statistics for port 0 > ######################## > RX-packets: 100 RX-missed: 0 RX-bytes: 6200 > RX-errors: 0 > RX-nombuf: 0 > TX-packets: 0 TX-errors: 0 TX-bytes: 0 > > Throughput (since last show) > Rx-pps: 0 > Tx-pps: 0 > > ################################################################ > ############ > > The vf can be reconfigured successfully after pf reset. > > -----Original Message----- > From: dev [mailto:dev-boun...@dpdk.org] On Behalf Of Wei Dai > Sent: Tuesday, June 27, 2017 10:07 PM > To: tho...@monjalon.net; Lu, Wenzhuo <wenzhuo...@intel.com>; Ananyev, > Konstantin <konstantin.anan...@intel.com>; Zhang, Helin > <helin.zh...@intel.com>; Wu, Jingjing <jingjing...@intel.com> > Cc: dev@dpdk.org; Dai, Wei <wei....@intel.com> > Subject: [dpdk-dev] [PATCH v2 0/5] Support NIC reset and keep same port id > > Sometimes a port have to be reset. After reset, if the port goes through PCI > remove() and then 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 the > other is calling PMD dev_init(). PCI remove( ) release all resource allocated > 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 > then 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_queue_setup( ), rte_eth_tx_queue_setup( ) and > rte_eth_dev_start( ) again to restore its previous settings or to reconfigure > itself with different settings. > > To test this new feature, 2 testpmd commands are introduced. > The first command "reset_port port_id" calls rte_eth_dev_reset( ). > The second command "reconfig_port port_id" is used to test if the port can be > reconfigured successfully. This command configure the port with the simplest > settings include only 1 Rx queue, only 1 Tx queue, Rx mode = None and Tx mode > = None. It check port by receving at least > 100 packets and then forward these packets from itself. > > A typical test steps are listed as follows: > For example, run "ifconfig PF-name down" will trigger a reset to its VF. > 1. run testpmd with ixgbe vF > 2. testpmd > set verbose 1 //to observe VF working 3. ifconfig name-of-PF down > 4. A message is shown in testmd to indicate PF reset 5. ifconfig name-of-PF > up 6. > testpmd > stop // stop forwarding to avoid crash during reset 7. testpmd > > reset_port port_id_of_VF 8. testpmd > reconfig_port port_id_of_VF > > > Wei Dai (5): > ethdev: add support of NIC reset > net/ixgbe: add support of reset > net/i40e: add support of reset > app/testpmd: add command to test NIC reset > app/testpmd: add command to test NIC restoration > > app/test-pmd/cmdline.c | 62 ++++++++++++++++++ > app/test-pmd/config.c | 111 > +++++++++++++++++++++++++++++++++ > app/test-pmd/testpmd.h | 2 + > 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 | 17 +++++ > lib/librte_ether/rte_ethdev.h | 12 ++++ > lib/librte_ether/rte_ether_version.map | 2 +- > 9 files changed, 275 insertions(+), 1 deletion(-) > > -- > 2.7.4