> -----Original Message----- > From: Dai, Wei > Sent: Friday, June 30, 2017 6:13 PM > To: tho...@monjalon.net; Lu, Wenzhuo <wenzhuo...@intel.com>; Ananyev, > Konstantin > <konstantin.anan...@intel.com>; Wu, Jingjing <jingjing...@intel.com>; Zhang, > Helin > <helin.zh...@intel.com>; Peng, Yuan <yuan.p...@intel.com> > Cc: dev@dpdk.org; Dai, Wei <wei....@intel.com> > Subject: [PATCH v5 0/4] Support NIC reset and keep same port id > > Sometimes a port have to be reset. For example PF is reset, all its > VF should also 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, a testpmd command "port reset port_id" is added. > The mapping between port number and its PCI address can be monitored to > confirm 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 > set verbose 1 //to observe VF working > 3. testpmd > show port info all //show port number and MAC addr > 4. testpmd > start > 5. let all ports forwarding work for a while > 6. testpmd > show port stats all > 7. ifconfig name-of-PF down > 8. A message is shown in testmd to indicate PF reset > 9. ifconfig name-of-PF up > 10. testpmd > stop // stop forwarding to avoid crash during reset > 11. testpmd > port reset all > 12. testpmd > port stop all > 13. testpmd > port start all //recofnig all ports > 14. testpmd > show port info all > //get mapping of port id and MAC addr for forwarding > 15. testpmd > start // restore 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 step 7 - 15 > > chagnes: > v5: > remove PCI address output to align with other modification which > will output it in other way > disable PF reset when its VF is ative to avoid unexpected VF behavior > 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 > > Signed-off-by: Wei Dai <wei....@intel.com> > Tested-by: Yuan Peng <yuan.p...@intel.com>
Acked-by: Jingjing Wu <jingjing...@intel.com>