From: Wei Dai <wei.dai@intel.com>
To: thomas@monjalon.net, wenzhuo.lu@intel.com,
konstantin.ananyev@intel.com, jingjing.wu@intel.com,
beilei.xing@intel.com
Cc: dev@dpdk.org, Wei Dai <wei.dai@intel.com>
Subject: [dpdk-dev] [PATCH v9 1/5] ethdev: add support of NIC reset
Date: Sun, 23 Jul 2017 17:15:09 +0800 [thread overview]
Message-ID: <1500801313-25429-2-git-send-email-wei.dai@intel.com> (raw)
In-Reply-To: <1500801313-25429-1-git-send-email-wei.dai@intel.com>
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;
--
2.7.5
next prev parent reply other threads:[~2017-07-23 9:26 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 ` Wei Dai [this message]
2017-09-13 20:51 ` [dpdk-dev] [PATCH v9 1/5] ethdev: add support of NIC reset Thomas Monjalon
2017-09-14 18:16 ` Luca Boccassi
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=1500801313-25429-2-git-send-email-wei.dai@intel.com \
--to=wei.dai@intel.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=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).