From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by dpdk.org (Postfix) with ESMTP id 3D5A0231E for ; Thu, 20 Jul 2017 15:21:57 +0200 (CEST) Received: from orsmga004.jf.intel.com ([10.7.209.38]) by fmsmga101.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 20 Jul 2017 06:21:56 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.40,384,1496127600"; d="scan'208";a="110073746" Received: from rhorton-mobl1.ger.corp.intel.com (HELO [163.33.230.130]) ([163.33.230.130]) by orsmga004.jf.intel.com with ESMTP; 20 Jul 2017 06:21:54 -0700 To: Wei Dai , dev@dpdk.org References: <1499961223-45281-1-git-send-email-wei.dai@intel.com> <1500304503-41592-1-git-send-email-wei.dai@intel.com> <1500304503-41592-2-git-send-email-wei.dai@intel.com> Cc: thomas@monjalon.net, wenzhuo.lu@intel.com, konstantin.ananyev@intel.com, beilei.xing@intel.com, jingjing.wu@intel.com, john.mcnamara@intel.com From: Remy Horton Organization: Intel Shannon Limited Message-ID: <3bd90169-2449-f8e3-fb01-a0496b8dedfd@intel.com> Date: Thu, 20 Jul 2017 14:21:53 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.7.1 MIME-Version: 1.0 In-Reply-To: <1500304503-41592-2-git-send-email-wei.dai@intel.com> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [dpdk-dev] [PATCH v8 1/5] ethdev: add support of NIC reset 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, 20 Jul 2017 13:21:58 -0000 See suggested wording inline On 17/07/2017 16:14, Wei Dai wrote: > This patch adds a new eth_dev layer API function rte_eth_dev_reset(). > A DPDK application can call this function to reset a NIC and keep > its port id afterwards. > It means that all SW resources allocated in ethdev layer should be > kept and SW and HW resources of the NIC in PMD need to be reset in > similar way that it runs PCI dev_uninit() and then dev_init(). > The sequence of dev_uninit() and dev_init() can be packed into a > single interface API rte_eth_dev_reset(). > Please See the comments before the declaration of rte_eht_dev_reset() > in lib/librte_ether/rte_ethdev.h to get more details on why this > function is needed, what it does, when it should be called > and what an application should do after calling this function. This patch adds a new eth_dev layer API function rte_eth_dev_reset(), which a DPDK application can call to reset a NIC and keep its port id afterwards. It means that all software resources allocated in the ethdev layer are kept, and software & hardware resources of the NIC within the NIC's PMD are reset to a state simular to that obtained by calling the PCI dev_uninit() and then dev_init(). This effective sequence of dev_uninit() and dev_init() is packed into a single API function rte_eth_dev_reset(). Please see the comments before the declaration of rte_eht_dev_reset() in lib/librte_ether/rte_ethdev.h to get more details on why this function is needed, what it does, when it should be called and what an application should do after calling this function. > Signed-off-by: Wei Dai > --- > lib/librte_ether/rte_ethdev.c | 17 +++++++++++++++++ > lib/librte_ether/rte_ethdev.h | 33 +++++++++++++++++++++++++++++++++ > lib/librte_ether/rte_ether_version.map | 1 + > 3 files changed, 51 insertions(+) Reviewed-by: Remy Horton > /** > + * Reset a Ethernet device and keep its port id. > + * > + * When a port has to be reset passively, the DPDK application can invoke this > + * function. For example a PF is reset, all its VFs should also be reset. > + * Normally, a DPDK application can invoke this function when > + * RTE_ETH_EVENT_INTR_RESET event is detected. A DPDK application can also call > + * this function to start an initiative port reset. When a port has to be reset passively, the DPDK application can invoke this function. For example when a PF is reset, all its VFs should also be reset. Normally a DPDK application can invoke this function when RTE_ETH_EVENT_INTR_RESET event is detected, but can also use it to start a port reset in other circumstances. > + * When this function is called, it first stops the port and then call PMD > + * specific dev_uninit( ) and dev_init( ) to makes the port return to initial > + * status in which no any Tx queue and no Rx queue are setup and the port has > + * just be reset and not started. And the port keeps its port id after calling > + * this function. When this function is called, it first stops the port and then calls the PMD specific dev_uninit( ) and dev_init( ) to return the port to initial state, in which no Tx and Rx queues are setup, as if the port has been reset and not started. The port keeps the port id it had before the function call. > + * After calling rte_eth_dev_reset( ), the application should 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. After calling rte_eth_dev_reset( ), the application should use rte_eth_dev_configure( ), rte_eth_rx_queue_setup( ), rte_eth_tx_queue_setup( ), and rte_eth_dev_start( ) to reconfigure the device as appropriate. > + * Note: to avoid unexpected behaviour, the application should stop calling Rx > + * and Rx function before calling rte_eth_dev_reset( ).For thread safety, > + * all these controlling operations had better be made in same thread. Note: To avoid unexpected behavior, the application should stop calling Tx and Rx functions before calling rte_eth_dev_reset( ). For thread safety, all these controlling functions should be called from the same thread.