From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by dpdk.org (Postfix) with ESMTP id 3F9752904 for ; Thu, 29 Jun 2017 10:37:23 +0200 (CEST) Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga104.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 29 Jun 2017 01:37:21 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.40,279,1496127600"; d="scan'208";a="1166044846" Received: from dw2.bj.intel.com ([172.16.117.107]) by fmsmga001.fm.intel.com with ESMTP; 29 Jun 2017 01:37:19 -0700 From: Wei Dai To: thomas@monjalon.net, wenzhuo.lu@intel.com, konstantin.ananyev@intel.com, helin.zhang@intel.com, jingjing.wu@intel.com, yuan.peng@intel.com Cc: dev@dpdk.org, Wei Dai Date: Thu, 29 Jun 2017 16:34:00 +0800 Message-Id: <20170629083404.1271-1-wei.dai@intel.com> X-Mailer: git-send-email 2.9.4 In-Reply-To: <1498572438-25125-1-git-send-email-wei.dai@intel.com> References: <1498572438-25125-1-git-send-email-wei.dai@intel.com> Subject: [dpdk-dev] [PATCH v3 0/4] Support 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: Thu, 29 Jun 2017 08:37:24 -0000 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, a testpmd command "port reset port_id" is added. 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 > port reset port_id_of_VF 8. testpmd > start // restore forwarding chagnes: v3: update testpmd command v2: only reset PMD layer resource and keep same port id, but not restore settings Wei Dai (4): 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 app/test-pmd/cmdline.c | 10 ++++++--- app/test-pmd/testpmd.c | 39 ++++++++++++++++++++++++++++++++++ app/test-pmd/testpmd.h | 1 + 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 | 16 ++++++++++++++ lib/librte_ether/rte_ethdev.h | 12 +++++++++++ lib/librte_ether/rte_ether_version.map | 2 +- 9 files changed, 146 insertions(+), 4 deletions(-) -- 2.9.3