From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Dai, Wei" Subject: Re: [PATCH v8 1/5] ethdev: add support of NIC reset Date: Sun, 23 Jul 2017 13:45:53 +0000 Message-ID: <49759EB36A64CF4892C1AFEC9231E8D650B65D70@PGSMSX106.gar.corp.intel.com> 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> <3bd90169-2449-f8e3-fb01-a0496b8dedfd@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Cc: "thomas@monjalon.net" , "Lu, Wenzhuo" , "Ananyev, Konstantin" , "Xing, Beilei" , "Wu, Jingjing" , "Mcnamara, John" To: "Horton, Remy" , "dev@dpdk.org" Return-path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by dpdk.org (Postfix) with ESMTP id 78E422C36 for ; Sun, 23 Jul 2017 15:45:58 +0200 (CEST) In-Reply-To: <3bd90169-2449-f8e3-fb01-a0496b8dedfd@intel.com> Content-Language: en-US List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Many thanks, Remy. My v9 patch set has followed your guidance. > -----Original Message----- > From: Horton, Remy > Sent: Thursday, July 20, 2017 9:22 PM > To: Dai, Wei ; dev@dpdk.org > Cc: thomas@monjalon.net; Lu, Wenzhuo ; > Ananyev, Konstantin ; Xing, Beilei > ; Wu, Jingjing ; Mcnamara, > John > Subject: Re: [dpdk-dev] [PATCH v8 1/5] ethdev: add support of NIC reset >=20 > See suggested wording inline >=20 > 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. >=20 > 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(). >=20 > 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. >=20 >=20 > > 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(+) >=20 > Reviewed-by: Remy Horton >=20 >=20 >=20 > > /** > > + * Reset a Ethernet device and keep its port id. > > + * > > + * When a port has to be reset passively, the DPDK application can inv= oke > this > > + * function. For example a PF is reset, all its VFs should also be res= et. > > + * 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. >=20 > 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. >=20 > > + * 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 p= ort > has > > + * just be reset and not started. And the port keeps its port id after= calling > > + * this function. >=20 > 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. >=20 > > + * After calling rte_eth_dev_reset( ), the application should go throu= gh > > + * 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 setti= ngs. >=20 > 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. >=20 >=20 > > + * Note: to avoid unexpected behaviour, the application should stop > calling Rx > > + * and Rx function before calling rte_eth_dev_reset( ).For threa= d > safety, > > + * all these controlling operations had better be made in same > thread. >=20 > 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. >=20