From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by dpdk.org (Postfix) with ESMTP id 5357E532C for ; Mon, 17 Jul 2017 17:25:58 +0200 (CEST) Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by orsmga105.jf.intel.com with ESMTP; 17 Jul 2017 08:25:57 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.40,374,1496127600"; d="scan'208";a="879734777" Received: from dpdk6.bj.intel.com ([172.16.182.87]) by FMSMGA003.fm.intel.com with ESMTP; 17 Jul 2017 08:25:53 -0700 From: Wei Dai To: thomas@monjalon.net, wenzhuo.lu@intel.com, konstantin.ananyev@intel.com, beilei.xing@intel.com, jingjing.wu@intel.com, john.mcnamara@intel.com Cc: dev@dpdk.org, Wei Dai Date: Mon, 17 Jul 2017 23:14:58 +0800 Message-Id: <1500304503-41592-1-git-send-email-wei.dai@intel.com> X-Mailer: git-send-email 2.7.5 In-Reply-To: <1499961223-45281-1-git-send-email-wei.dai@intel.com> References: <1499961223-45281-1-git-send-email-wei.dai@intel.com> Subject: [dpdk-dev] [PATCH v8 0/5] Support of NIC reset and keep same port id X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 17 Jul 2017 15:25:59 -0000 s patch set adds a function rte_eth_dev_reset( ) in rte_ethdev layer. Sometimes a port have to be reset passively. For example a PF is reset, all its VFs should also be reset by application itself to align with the PF. A DPDK application also can call this function to trigger an initative port reset. When processing 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 DPDK application. Normally, PCI probe() includes two parts: one is in rte_ethdev layer to allocate resource in rte_ethdev layer and the other is calling PMD specific dev_init() to allocate and initialize resource in PMD layer. PCI remove( ) releases all resource allocated from rte_ethdev layer in PCI probe( ) and calls PMD specific dev_uninit( ) to releaase resource allocated by dev_init( ) in PMD layer. 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( ). All these are what rte_eth_dev_reset() does. The 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. After calling rte_eth_dev_reset( ), the 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: v8: modify the comments before the declaration of rte_eth_dev_reset( ) to make doc generated from doxygen be concise. v7: add description of NIC reset in doc/poll_mode_drv.rst v6: add more comments to explain why the rte_eth_dev_reset( ) is needeed, when it is called and what the application should do after calling it. add more comments to explain why reset of PF with SR-IOV is not supported currently. 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 Tested-by: Yuan Peng Acked-by: Jingjing Wu Wei Dai (5): ethdev: add support of NIC reset net/ixgbe: add support of reset net/i40e: add support of reset app/testpmd: enhance command to test NIC reset doc: add description of the NIC reset API app/test-pmd/cmdline.c | 12 ++++++--- app/test-pmd/testpmd.c | 41 ++++++++++++++++++++++++++++ app/test-pmd/testpmd.h | 1 + doc/guides/prog_guide/poll_mode_drv.rst | 40 ++++++++++++++++++++++++++++ drivers/net/i40e/i40e_ethdev.c | 28 ++++++++++++++++++++ drivers/net/i40e/i40e_ethdev_vf.c | 19 +++++++++++++ drivers/net/ixgbe/ixgbe_ethdev.c | 47 +++++++++++++++++++++++++++++++++ lib/librte_ether/rte_ethdev.c | 17 ++++++++++++ lib/librte_ether/rte_ethdev.h | 33 +++++++++++++++++++++++ lib/librte_ether/rte_ether_version.map | 1 + 10 files changed, 235 insertions(+), 4 deletions(-) -- 2.7.5