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 PF
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