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: [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 [PATCH 0/7] NIC port restoration Wei Dai
2017-05-27 8:22 ` [PATCH 1/7] ethdev: add support of NIC restoration Wei Dai
2017-05-27 8:22 ` [PATCH 2/7] ethdev: add support of restoration of queue state Wei Dai
2017-05-27 8:22 ` [PATCH 3/7] ethdev: add support of restoration of port status Wei Dai
2017-05-27 8:22 ` [PATCH 4/7] ethdev: add support of MTU restoration Wei Dai
2017-05-27 8:22 ` [PATCH 5/7] ethdev: add support of restoration of multicast addr Wei Dai
2017-05-27 8:22 ` [PATCH 6/7] net/ixgbe: add support of restoration Wei Dai
2017-05-27 8:22 ` [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 ` [PATCH v2 0/5] Support NIC reset and keep same port id Wei Dai
2017-06-27 14:07 ` [PATCH v2 1/5] ethdev: add support of NIC reset Wei Dai
2017-06-27 14:07 ` [PATCH v2 2/5] net/ixgbe: add support of reset Wei Dai
2017-06-27 14:07 ` [PATCH v2 3/5] net/i40e: " Wei Dai
2017-06-27 14:07 ` [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 ` [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 ` [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 ` [PATCH v3 0/4] " Wei Dai
2017-06-29 8:34 ` [PATCH v3 1/4] ethdev: add support of NIC reset Wei Dai
2017-06-29 8:34 ` [PATCH v3 2/4] net/ixgbe: add support of reset Wei Dai
2017-06-29 8:34 ` [PATCH v3 3/4] net/i40e: " Wei Dai
2017-06-29 8:34 ` [PATCH v3 4/4] app/testpmd: enhance command to test NIC reset Wei Dai
2017-06-29 14:57 ` [PATCH v4 0/5] Support NIC reset and keep same port id Wei Dai
2017-06-29 14:57 ` [PATCH v4 1/5] ethdev: add support of NIC reset Wei Dai
2017-06-29 14:57 ` [PATCH v4 2/5] net/ixgbe: add support of reset Wei Dai
2017-06-29 14:58 ` [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 ` [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 ` [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 ` [PATCH v4 0/5] Support NIC reset and keep same port id Peng, Yuan
2017-06-30 10:12 ` [PATCH v5 0/4] " Wei Dai
2017-06-30 10:12 ` [PATCH v5 1/4] ethdev: add support of NIC reset Wei Dai
2017-06-30 10:12 ` [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 ` [PATCH v5 3/4] net/i40e: " Wei Dai
2017-06-30 10:12 ` [PATCH v5 4/4] app/testpmd: enhance command to test NIC reset Wei Dai
2017-06-30 10:50 ` [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 ` [PATCH v6 " Wei Dai
2017-07-10 10:05 ` [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 ` [PATCH v6 2/4] net/ixgbe: add support of reset Wei Dai
2017-07-10 10:05 ` [PATCH v6 3/4] net/i40e: " Wei Dai
2017-07-10 10:05 ` [PATCH v6 4/4] app/testpmd: enhance command to test NIC reset Wei Dai
2017-07-13 15:53 ` [PATCH v7 0/5] Support NIC reset and keep same port id Wei Dai
2017-07-13 15:53 ` [PATCH v7 1/5] ethdev: add support of NIC reset Wei Dai
2017-07-13 15:53 ` [PATCH v7 2/5] net/ixgbe: add support of reset Wei Dai
2017-07-13 15:53 ` [PATCH v7 3/5] net/i40e: " Wei Dai
2017-07-13 15:53 ` [PATCH v7 4/5] app/testpmd: enhance command to test NIC reset Wei Dai
2017-07-13 15:53 ` [PATCH v7 5/5] doc: add description of the NIC reset API Wei Dai
2017-07-16 19:25 ` [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 ` [PATCH v8 0/5] Support of " Wei Dai
2017-07-17 15:14 ` [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 ` [PATCH v8 2/5] net/ixgbe: add support of reset Wei Dai
2017-07-17 15:15 ` [PATCH v8 3/5] net/i40e: " Wei Dai
2017-07-17 15:15 ` [PATCH v8 4/5] app/testpmd: enhance command to test NIC reset Wei Dai
2017-07-17 15:15 ` [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 ` [PATCH v9 0/5] Support of NIC reset and keep same port id Wei Dai
2017-07-23 9:15 ` [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 ` [PATCH v9 2/5] net/ixgbe: add support of reset Wei Dai
2017-09-13 20:53 ` Thomas Monjalon
2017-07-23 9:15 ` [PATCH v9 3/5] net/i40e: " Wei Dai
2017-07-23 9:15 ` [PATCH v9 4/5] app/testpmd: enhance command to test NIC reset Wei Dai
2017-07-23 9:15 ` [PATCH v9 5/5] doc: add description of the NIC reset API Wei Dai
2017-09-13 21:02 ` [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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.