From: Luca Boccassi <luca.boccassi@gmail.com>
To: Wei Dai <wei.dai@intel.com>,
thomas@monjalon.net, wenzhuo.lu@intel.com,
konstantin.ananyev@intel.com, jingjing.wu@intel.com,
beilei.xing@intel.com
Cc: dev@dpdk.org
Subject: Re: [dpdk-dev] [PATCH v9 1/5] ethdev: add support of NIC reset
Date: Thu, 14 Sep 2017 19:16:11 +0100 [thread overview]
Message-ID: <1505412971.30262.11.camel@gmail.com> (raw)
In-Reply-To: <1500801313-25429-2-git-send-email-wei.dai@intel.com>
On Sun, 2017-07-23 at 17:15 +0800, Wei Dai wrote:
> 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 <wei.dai@intel.com>
> Reviewed-by: Remy Horton <remy.horton@intel.com>
> ---
> lib/librte_ether/rte_ethdev.c | 17 +++++++++++++++++
> lib/librte_ether/rte_ethdev.h | 34
> ++++++++++++++++++++++++++++++++++
> lib/librte_ether/rte_ether_version.map | 1 +
> 3 files changed, 52 insertions(+)
>
> diff --git a/lib/librte_ether/rte_ethdev.c
> b/lib/librte_ether/rte_ethdev.c
> index d4ebb1b..68ba64d 100644
> --- a/lib/librte_ether/rte_ethdev.c
> +++ b/lib/librte_ether/rte_ethdev.c
> @@ -1004,6 +1004,23 @@ rte_eth_dev_close(uint8_t port_id)
> }
>
> int
> +rte_eth_dev_reset(uint8_t port_id)
> +{
> + struct rte_eth_dev *dev;
> + int ret;
> +
> + RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -EINVAL);
> + dev = &rte_eth_devices[port_id];
> +
> + RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_reset, -ENOTSUP);
> +
> + rte_eth_dev_stop(port_id);
> + ret = dev->dev_ops->dev_reset(dev);
> +
> + return ret;
> +}
> +
> +int
> rte_eth_rx_queue_setup(uint8_t port_id, uint16_t rx_queue_id,
> uint16_t nb_rx_desc, unsigned int socket_id,
> const struct rte_eth_rxconf *rx_conf,
> diff --git a/lib/librte_ether/rte_ethdev.h
> b/lib/librte_ether/rte_ethdev.h
> index 0e99090..fde92a1 100644
> --- a/lib/librte_ether/rte_ethdev.h
> +++ b/lib/librte_ether/rte_ethdev.h
> @@ -1115,6 +1115,9 @@ typedef int (*eth_dev_set_link_down_t)(struct
> rte_eth_dev *dev);
> typedef void (*eth_dev_close_t)(struct rte_eth_dev *dev);
> /**< @internal Function used to close a configured Ethernet device.
> */
>
> +typedef int (*eth_dev_reset_t)(struct rte_eth_dev *dev);
> +/** <@internal Function used to reset a configured Ethernet device.
> */
> +
> typedef void (*eth_promiscuous_enable_t)(struct rte_eth_dev *dev);
> /**< @internal Function used to enable the RX promiscuous mode of an
> Ethernet device. */
>
> @@ -1435,6 +1438,7 @@ struct eth_dev_ops {
> eth_dev_set_link_up_t dev_set_link_up; /**< Device
> link up. */
> eth_dev_set_link_down_t dev_set_link_down; /**< Device
> link down. */
> eth_dev_close_t dev_close; /**< Close device.
> */
> + eth_dev_reset_t dev_reset; /**<
> Reset device. */
> eth_link_update_t link_update; /**< Get device
> link state. */
>
> eth_promiscuous_enable_t promiscuous_enable; /**<
> Promiscuous ON. */
> @@ -2140,6 +2144,36 @@ int rte_eth_dev_set_link_down(uint8_t
> port_id);
> void rte_eth_dev_close(uint8_t port_id);
>
> /**
> + * 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 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
> 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 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 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.
> + *
> + * @param port_id
> + * The port identifier of the Ethernet device.
> + */
> +int rte_eth_dev_reset(uint8_t port_id);
> +
> +/**
> * Enable receipt in promiscuous mode for an Ethernet device.
> *
> * @param port_id
> diff --git a/lib/librte_ether/rte_ether_version.map
> b/lib/librte_ether/rte_ether_version.map
> index 4283728..e86d51e 100644
> --- a/lib/librte_ether/rte_ether_version.map
> +++ b/lib/librte_ether/rte_ether_version.map
> @@ -155,6 +155,7 @@ DPDK_17.08 {
> rte_eth_dev_adjust_nb_rx_tx_desc;
> rte_flow_copy;
> rte_flow_isolate;
> + rte_eth_dev_reset;
> rte_tm_capabilities_get;
> rte_tm_get_leaf_nodes;
> rte_tm_hierarchy_commit;
Hello Wei,
First of all thanks for your work, we have a use case where it's
extremely important to be able to reset the VFs when the PF (Linux)
changes state.
Question: can the rte_eth_dev_reset call block in the current
implementation that was merged?
Last year a patchset was sent by, I believe, a colleague of yours,
Wenzhuo Lu, and I've been using it in production.
One of the things that I immediately noticed is that the _reset call
was blocking - that was a show stopper for our application, so I sent a
couple of patches to take a "blocking" boolean, and return EAGAIN
instead of blocking.
You can find the original patches this link:
http://dpdk.org/ml/archives/dev/2016-June/042018.html
The description of the problem we had with the blocking call:
http://dpdk.org/ml/archives/dev/2016-July/043446.html
The "blocking" and EAGAIN changes:
http://dpdk.org/ml/archives/dev/2016-July/043535.html
http://dpdk.org/ml/archives/dev/2016-July/043818.html
Functionality-wise, from the point of view of an application, are you
aware of big differences between that patchset and what was merged
today?
Thanks!
--
Kind regards,
Luca Boccassi
next prev parent reply other threads:[~2017-09-14 18:16 UTC|newest]
Thread overview: 91+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-05-27 8:22 [dpdk-dev] [PATCH 0/7] NIC port restoration Wei Dai
2017-05-27 8:22 ` [dpdk-dev] [PATCH 1/7] ethdev: add support of NIC restoration Wei Dai
2017-05-27 8:22 ` [dpdk-dev] [PATCH 2/7] ethdev: add support of restoration of queue state Wei Dai
2017-05-27 8:22 ` [dpdk-dev] [PATCH 3/7] ethdev: add support of restoration of port status Wei Dai
2017-05-27 8:22 ` [dpdk-dev] [PATCH 4/7] ethdev: add support of MTU restoration Wei Dai
2017-05-27 8:22 ` [dpdk-dev] [PATCH 5/7] ethdev: add support of restoration of multicast addr Wei Dai
2017-05-27 8:22 ` [dpdk-dev] [PATCH 6/7] net/ixgbe: add support of restoration Wei Dai
2017-05-27 8:22 ` [dpdk-dev] [PATCH 7/7] net/i40e: " Wei Dai
2017-06-07 7:50 ` Wu, Jingjing
2017-06-20 7:55 ` Dai, Wei
2017-06-27 14:07 ` [dpdk-dev] [PATCH v2 0/5] Support NIC reset and keep same port id Wei Dai
2017-06-27 14:07 ` [dpdk-dev] [PATCH v2 1/5] ethdev: add support of NIC reset Wei Dai
2017-06-27 14:07 ` [dpdk-dev] [PATCH v2 2/5] net/ixgbe: add support of reset Wei Dai
2017-06-27 14:07 ` [dpdk-dev] [PATCH v2 3/5] net/i40e: " Wei Dai
2017-06-27 14:07 ` [dpdk-dev] [PATCH v2 4/5] app/testpmd: add command to test NIC reset Wei Dai
2017-06-28 9:10 ` Wu, Jingjing
2017-06-29 7:00 ` Dai, Wei
2017-06-27 14:07 ` [dpdk-dev] [PATCH v2 5/5] app/testpmd: add command to test NIC restoration Wei Dai
2017-06-28 9:05 ` Wu, Jingjing
2017-06-29 6:58 ` Dai, Wei
2017-06-29 3:51 ` [dpdk-dev] [PATCH v2 0/5] Support NIC reset and keep same port id Peng, Yuan
2017-06-29 6:29 ` Dai, Wei
2017-06-29 8:34 ` [dpdk-dev] [PATCH v3 0/4] " Wei Dai
2017-06-29 8:34 ` [dpdk-dev] [PATCH v3 1/4] ethdev: add support of NIC reset Wei Dai
2017-06-29 8:34 ` [dpdk-dev] [PATCH v3 2/4] net/ixgbe: add support of reset Wei Dai
2017-06-29 8:34 ` [dpdk-dev] [PATCH v3 3/4] net/i40e: " Wei Dai
2017-06-29 8:34 ` [dpdk-dev] [PATCH v3 4/4] app/testpmd: enhance command to test NIC reset Wei Dai
2017-06-29 14:57 ` [dpdk-dev] [PATCH v4 0/5] Support NIC reset and keep same port id Wei Dai
2017-06-29 14:57 ` [dpdk-dev] [PATCH v4 1/5] ethdev: add support of NIC reset Wei Dai
2017-06-29 14:57 ` [dpdk-dev] [PATCH v4 2/5] net/ixgbe: add support of reset Wei Dai
2017-06-29 14:58 ` [dpdk-dev] [PATCH v4 3/5] net/i40e: " Wei Dai
2017-06-30 8:54 ` Wu, Jingjing
2017-06-30 9:37 ` Dai, Wei
2017-06-29 14:58 ` [dpdk-dev] [PATCH v4 4/5] app/testpmd: display PCI address in port info Wei Dai
2017-06-30 9:07 ` Wu, Jingjing
2017-06-29 14:58 ` [dpdk-dev] [PATCH v4 5/5] app/testpmd: enhance command to test NIC reset Wei Dai
2017-06-30 5:13 ` Peng, Yuan
2017-06-30 8:57 ` Wu, Jingjing
2017-06-30 9:09 ` Wu, Jingjing
2017-06-30 9:15 ` Dai, Wei
2017-06-30 5:11 ` [dpdk-dev] [PATCH v4 0/5] Support NIC reset and keep same port id Peng, Yuan
2017-06-30 10:12 ` [dpdk-dev] [PATCH v5 0/4] " Wei Dai
2017-06-30 10:12 ` [dpdk-dev] [PATCH v5 1/4] ethdev: add support of NIC reset Wei Dai
2017-06-30 10:12 ` [dpdk-dev] [PATCH v5 2/4] net/ixgbe: add support of reset Wei Dai
2017-07-07 8:25 ` Thomas Monjalon
2017-07-07 8:36 ` Thomas Monjalon
2017-07-10 10:19 ` Dai, Wei
2017-06-30 10:12 ` [dpdk-dev] [PATCH v5 3/4] net/i40e: " Wei Dai
2017-06-30 10:12 ` [dpdk-dev] [PATCH v5 4/4] app/testpmd: enhance command to test NIC reset Wei Dai
2017-06-30 10:50 ` [dpdk-dev] [PATCH v5 0/4] Support NIC reset and keep same port id Wu, Jingjing
2017-07-05 5:48 ` Dai, Wei
2017-07-10 10:05 ` [dpdk-dev] [PATCH v6 " Wei Dai
2017-07-10 10:05 ` [dpdk-dev] [PATCH v6 1/4] ethdev: add support of NIC reset Wei Dai
2017-07-10 11:35 ` Jerin Jacob
2017-07-11 1:57 ` Dai, Wei
2017-07-11 5:17 ` Jerin Jacob
2017-07-11 14:36 ` Dai, Wei
2017-07-12 16:13 ` Jerin Jacob
2017-07-13 16:06 ` Dai, Wei
2017-07-10 10:05 ` [dpdk-dev] [PATCH v6 2/4] net/ixgbe: add support of reset Wei Dai
2017-07-10 10:05 ` [dpdk-dev] [PATCH v6 3/4] net/i40e: " Wei Dai
2017-07-10 10:05 ` [dpdk-dev] [PATCH v6 4/4] app/testpmd: enhance command to test NIC reset Wei Dai
2017-07-13 15:53 ` [dpdk-dev] [PATCH v7 0/5] Support NIC reset and keep same port id Wei Dai
2017-07-13 15:53 ` [dpdk-dev] [PATCH v7 1/5] ethdev: add support of NIC reset Wei Dai
2017-07-13 15:53 ` [dpdk-dev] [PATCH v7 2/5] net/ixgbe: add support of reset Wei Dai
2017-07-13 15:53 ` [dpdk-dev] [PATCH v7 3/5] net/i40e: " Wei Dai
2017-07-13 15:53 ` [dpdk-dev] [PATCH v7 4/5] app/testpmd: enhance command to test NIC reset Wei Dai
2017-07-13 15:53 ` [dpdk-dev] [PATCH v7 5/5] doc: add description of the NIC reset API Wei Dai
2017-07-16 19:25 ` [dpdk-dev] [PATCH v7 0/5] Support NIC reset and keep same port id Thomas Monjalon
2017-07-17 14:02 ` Dai, Wei
2017-07-19 14:36 ` Dai, Wei
2017-07-17 15:14 ` [dpdk-dev] [PATCH v8 0/5] Support of " Wei Dai
2017-07-17 15:14 ` [dpdk-dev] [PATCH v8 1/5] ethdev: add support of NIC reset Wei Dai
2017-07-20 13:21 ` Remy Horton
2017-07-23 13:45 ` Dai, Wei
2017-07-17 15:15 ` [dpdk-dev] [PATCH v8 2/5] net/ixgbe: add support of reset Wei Dai
2017-07-17 15:15 ` [dpdk-dev] [PATCH v8 3/5] net/i40e: " Wei Dai
2017-07-17 15:15 ` [dpdk-dev] [PATCH v8 4/5] app/testpmd: enhance command to test NIC reset Wei Dai
2017-07-17 15:15 ` [dpdk-dev] [PATCH v8 5/5] doc: add description of the NIC reset API Wei Dai
2017-07-20 13:22 ` Remy Horton
2017-07-23 9:15 ` [dpdk-dev] [PATCH v9 0/5] Support of NIC reset and keep same port id Wei Dai
2017-07-23 9:15 ` [dpdk-dev] [PATCH v9 1/5] ethdev: add support of NIC reset Wei Dai
2017-09-13 20:51 ` Thomas Monjalon
2017-09-14 18:16 ` Luca Boccassi [this message]
2017-07-23 9:15 ` [dpdk-dev] [PATCH v9 2/5] net/ixgbe: add support of reset Wei Dai
2017-09-13 20:53 ` Thomas Monjalon
2017-07-23 9:15 ` [dpdk-dev] [PATCH v9 3/5] net/i40e: " Wei Dai
2017-07-23 9:15 ` [dpdk-dev] [PATCH v9 4/5] app/testpmd: enhance command to test NIC reset Wei Dai
2017-07-23 9:15 ` [dpdk-dev] [PATCH v9 5/5] doc: add description of the NIC reset API Wei Dai
2017-09-13 21:02 ` [dpdk-dev] [PATCH v9 0/5] Support of NIC reset and keep same port id Thomas Monjalon
2017-09-14 1:32 ` Dai, Wei
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1505412971.30262.11.camel@gmail.com \
--to=luca.boccassi@gmail.com \
--cc=beilei.xing@intel.com \
--cc=dev@dpdk.org \
--cc=jingjing.wu@intel.com \
--cc=konstantin.ananyev@intel.com \
--cc=thomas@monjalon.net \
--cc=wei.dai@intel.com \
--cc=wenzhuo.lu@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).