[dpdk-dev] [PATCH v5 0/4] Support NIC reset and keep same port id

Wu, Jingjing jingjing.wu at intel.com
Fri Jun 30 12:50:07 CEST 2017



> -----Original Message-----
> From: Dai, Wei
> Sent: Friday, June 30, 2017 6:13 PM
> To: thomas at monjalon.net; Lu, Wenzhuo <wenzhuo.lu at intel.com>; Ananyev, Konstantin
> <konstantin.ananyev at intel.com>; Wu, Jingjing <jingjing.wu at intel.com>; Zhang, Helin
> <helin.zhang at intel.com>; Peng, Yuan <yuan.peng at intel.com>
> Cc: dev at dpdk.org; Dai, Wei <wei.dai at 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.dai at intel.com>
> Tested-by: Yuan Peng <yuan.peng at intel.com>


Acked-by: Jingjing Wu <jingjing.wu at intel.com>


More information about the dev mailing list