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

Reply via email to