DPDK patches and discussions
 help / color / mirror / Atom feed
From: Jeff Guo <jia.guo@intel.com>
To: stephen@networkplumber.org, bruce.richardson@intel.com,
	ferruh.yigit@intel.com, konstantin.ananyev@intel.com,
	gaetan.rivet@6wind.com, jingjing.wu@intel.com,
	thomas@monjalon.net, motih@mellanox.com, matan@mellanox.com,
	harry.van.haaren@intel.com, qi.z.zhang@intel.com,
	shaopeng.he@intel.com, bernard.iremonger@intel.com,
	arybchenko@solarflare.com
Cc: jblunck@infradead.org, shreyansh.jain@nxp.com, dev@dpdk.org,
	jia.guo@intel.com, helin.zhang@intel.com
Subject: [dpdk-dev] [PATCH v6 1/4] ethdev: Add eal device event callback
Date: Fri, 17 Aug 2018 18:50:13 +0800	[thread overview]
Message-ID: <1534503016-31805-2-git-send-email-jia.guo@intel.com> (raw)
In-Reply-To: <1534503016-31805-1-git-send-email-jia.guo@intel.com>

Implement a couple of eal device event handler install/unintall APIs in
Ethdev as below:
 - rte_eth_dev_event_handler_install
 - rte_eth_dev_event_handler_uninstall

Each ethdev could call these APIs to install eal event handler in the PMDs,
with each callback corresponding to one port, and process the eal device
event for the specific port. Especially, it could use for process the
hotplug event.

Signed-off-by: Jeff Guo <jia.guo@intel.com>
Reviewed-by: Qi Zhang <qi.z.zhang@intel.com>
---
v6->v5:
refine commit log
---
 doc/guides/rel_notes/release_18_08.rst   | 12 +++++++
 lib/librte_ethdev/rte_ethdev.c           | 61 ++++++++++++++++++++++++++++++++
 lib/librte_ethdev/rte_ethdev_driver.h    | 32 +++++++++++++++++
 lib/librte_ethdev/rte_ethdev_version.map |  2 ++
 4 files changed, 107 insertions(+)

diff --git a/doc/guides/rel_notes/release_18_08.rst b/doc/guides/rel_notes/release_18_08.rst
index 95dc1e0..90478cf 100644
--- a/doc/guides/rel_notes/release_18_08.rst
+++ b/doc/guides/rel_notes/release_18_08.rst
@@ -122,6 +122,18 @@ New Features
   ``rte_dev_hotplug_handle_enable`` and ``rte_dev_hotplug_handle_disable`` are
   for enable or disable failure handle mechanism for hotplug.
 
+* **Added eal device event process helper in ethdev.**
+
+  Implement a couple of eal device event handler install/uninstall APIs in
+  ethdev, these helper could let PMDs have chance to manage the eal device
+  event, such as register device event callback, then monitor and process
+  hotplug event.
+
+  * ``rte_eth_dev_event_handler_install`` for PMDs use to install the device
+    event handler.
+  * ``rte_eth_dev_event_handler_uninstall`` for PMDs use to uninstall the device
+    event handler.
+
 
 API Changes
 -----------
diff --git a/lib/librte_ethdev/rte_ethdev.c b/lib/librte_ethdev/rte_ethdev.c
index 4c32025..d68bd4c 100644
--- a/lib/librte_ethdev/rte_ethdev.c
+++ b/lib/librte_ethdev/rte_ethdev.c
@@ -4417,6 +4417,67 @@ rte_eth_devargs_parse(const char *dargs, struct rte_eth_devargs *eth_da)
 	return result;
 }
 
+static void __rte_experimental
+eth_dev_event_callback(char *device_name, enum rte_dev_event_type type,
+		       void *arg)
+{
+	struct rte_eth_dev *eth_dev = (struct rte_eth_dev *)arg;
+
+	switch (type) {
+	case RTE_DEV_EVENT_REMOVE:
+		RTE_ETHDEV_LOG(INFO, "The device %s has been removed!\n",
+			       device_name);
+
+		if (!device_name || !eth_dev)
+			return;
+
+		if (!(eth_dev->data->dev_flags & RTE_ETH_DEV_INTR_RMV))
+			return;
+
+		if (!strcmp(device_name, eth_dev->device->name))
+			_rte_eth_dev_callback_process(eth_dev,
+						      RTE_ETH_EVENT_INTR_RMV,
+						      NULL);
+		break;
+	case RTE_DEV_EVENT_ADD:
+		RTE_ETHDEV_LOG(INFO, "The device %s has been added!\n",
+			       device_name);
+		break;
+	default:
+		break;
+	}
+}
+
+int __rte_experimental
+rte_eth_dev_event_handler_install(struct rte_eth_dev *eth_dev)
+{
+	int result = 0;
+
+	result = rte_dev_event_callback_register(eth_dev->device->name,
+						 eth_dev_event_callback,
+						 eth_dev);
+	if (result)
+		RTE_ETHDEV_LOG(ERR, "device event callback register failed "
+			       "for device:%s!\n", eth_dev->device->name);
+
+	return result;
+}
+
+int __rte_experimental
+rte_eth_dev_event_handler_uninstall(struct rte_eth_dev *eth_dev)
+{
+	int result = 0;
+
+	result = rte_dev_event_callback_unregister(eth_dev->device->name,
+						   eth_dev_event_callback,
+						   eth_dev);
+	if (result)
+		RTE_ETHDEV_LOG(ERR, "device event callback unregister failed "
+			       "for device:%s!\n", eth_dev->device->name);
+
+	return result;
+}
+
 RTE_INIT(ethdev_init_log)
 {
 	rte_eth_dev_logtype = rte_log_register("lib.ethdev");
diff --git a/lib/librte_ethdev/rte_ethdev_driver.h b/lib/librte_ethdev/rte_ethdev_driver.h
index c6d9bc1..7e3d085 100644
--- a/lib/librte_ethdev/rte_ethdev_driver.h
+++ b/lib/librte_ethdev/rte_ethdev_driver.h
@@ -81,6 +81,38 @@ int rte_eth_dev_release_port(struct rte_eth_dev *eth_dev);
 void _rte_eth_dev_reset(struct rte_eth_dev *dev);
 
 /**
+ * @warning
+ * @b EXPERIMENTAL: this API may change without prior notice.
+ *
+ * Implement a helper to install the device event handler for the specific
+ * ether device.
+ *
+ * @param dev
+ *  Pointer to struct rte_eth_dev.
+ *
+ * @return
+ *   - 0 on success, negative on error
+ */
+int __rte_experimental
+rte_eth_dev_event_handler_install(struct rte_eth_dev *dev);
+
+/**
+ * @warning
+ * @b EXPERIMENTAL: this API may change without prior notice.
+ *
+ * Implement a helper to uninstall the device event handler for the specific
+ * ether device.
+ *
+ * @param dev
+ *  Pointer to struct rte_eth_dev.
+ *
+ * @return
+ *   - 0 on success, negative on error
+ */
+int __rte_experimental
+rte_eth_dev_event_handler_uninstall(struct rte_eth_dev *dev);
+
+/**
  * @internal Executes all the user application registered callbacks for
  * the specific device. It is for DPDK internal user only. User
  * application should not call it directly.
diff --git a/lib/librte_ethdev/rte_ethdev_version.map b/lib/librte_ethdev/rte_ethdev_version.map
index 38f117f..3cc02b6 100644
--- a/lib/librte_ethdev/rte_ethdev_version.map
+++ b/lib/librte_ethdev/rte_ethdev_version.map
@@ -227,6 +227,8 @@ EXPERIMENTAL {
 	rte_eth_dev_count_total;
 	rte_eth_dev_create;
 	rte_eth_dev_destroy;
+	rte_eth_dev_event_handler_install;
+	rte_eth_dev_event_handler_uninstall;
 	rte_eth_dev_get_module_eeprom;
 	rte_eth_dev_get_module_info;
 	rte_eth_dev_is_removed;
-- 
2.7.4

  reply	other threads:[~2018-08-17 10:53 UTC|newest]

Thread overview: 56+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-07-05 10:39 [dpdk-dev] [PATCH 0/2] Enable eal event hotplug for i40e Jeff Guo
2018-07-05 10:39 ` [dpdk-dev] [PATCH 1/2] net/i40e: enable hotplug in i40e Jeff Guo
2018-07-05 10:39 ` [dpdk-dev] [PATCH 2/2] testpmd: remove the dev event callback register Jeff Guo
2018-07-09  6:56 ` [dpdk-dev] [PATCH v2 0/3] Enable eal hotplug event detect for i40e/ixgbe Jeff Guo
2018-07-09  6:56   ` [dpdk-dev] [PATCH v2 1/3] net/ixgbe: enable hotplug detect in ixgbe Jeff Guo
2018-07-09  7:38     ` Lu, Wenzhuo
2018-07-09  7:51       ` Matan Azrad
2018-07-09  8:57         ` Jeff Guo
2018-07-09  9:04           ` Matan Azrad
2018-07-09  9:54             ` Jeff Guo
2018-07-09 10:01               ` Matan Azrad
2018-07-09 10:14                 ` Jeff Guo
2018-07-09  8:13     ` Andrew Rybchenko
2018-07-09  8:46       ` Jeff Guo
2018-07-09  6:56   ` [dpdk-dev] [PATCH v2 2/3] net/i40e: enable hotplug detect in i40e Jeff Guo
2018-07-09  7:47     ` Matan Azrad
2018-07-09  8:54       ` Jeff Guo
2018-07-09  6:56   ` [dpdk-dev] [PATCH v2 3/3] testpmd: remove the dev event callback register Jeff Guo
2018-07-09  7:39     ` Lu, Wenzhuo
2018-07-09  8:16     ` Andrew Rybchenko
2018-07-09  8:23       ` Jeff Guo
2018-07-09 11:46 ` [dpdk-dev] [PATCH v3 0/4] Enable eal hotplug event detect for i40e/ixgbe Jeff Guo
2018-07-09 11:46   ` [dpdk-dev] [PATCH v3 1/4] ethdev: Add eal device event callback Jeff Guo
2018-07-09 13:14     ` Andrew Rybchenko
2018-07-10  7:06       ` Jeff Guo
2018-07-10  9:10     ` Zhang, Qi Z
2018-07-09 11:46   ` [dpdk-dev] [PATCH v3 2/4] net/ixgbe: enable hotplug detect in ixgbe Jeff Guo
2018-07-10  8:19     ` Lu, Wenzhuo
2018-07-09 11:46   ` [dpdk-dev] [PATCH v3 3/4] net/i40e: enable hotplug detect in i40e Jeff Guo
2018-07-09 11:46   ` [dpdk-dev] [PATCH v3 4/4] testpmd: remove the dev event callback register Jeff Guo
2018-07-10 12:51 ` [dpdk-dev] [PATCH v4 0/4] Enable eal hotplug event handler in ethdev Jeff Guo
2018-07-10 12:51   ` [dpdk-dev] [PATCH v4 1/4] ethdev: Add API to enable device event handler Jeff Guo
2018-07-10 13:24     ` Zhang, Qi Z
2018-07-11  8:49     ` Andrew Rybchenko
2018-07-11 11:17       ` Jeff Guo
2018-07-10 12:51   ` [dpdk-dev] [PATCH v4 2/4] net/ixgbe: install ethdev hotplug handler in ixgbe Jeff Guo
2018-07-10 12:51   ` [dpdk-dev] [PATCH v4 3/4] net/i40e: install hotplug handler in i40e Jeff Guo
2018-07-10 13:26     ` Zhang, Qi Z
2018-07-10 12:51   ` [dpdk-dev] [PATCH v4 4/4] testpmd: remove the dev event callback register Jeff Guo
2018-07-11 11:51 ` [dpdk-dev] [PATCH v5 0/4] Install eal hotplug event handler in i40e/ixgbe Jeff Guo
2018-07-11 11:51   ` [dpdk-dev] [PATCH v5 1/4] ethdev: Add eal device event callback Jeff Guo
2018-07-11 11:51   ` [dpdk-dev] [PATCH v5 2/4] net/ixgbe: install ethdev hotplug handler in ixgbe Jeff Guo
2018-08-24 16:22     ` Ferruh Yigit
2018-09-12  8:47       ` Jeff Guo
2018-07-11 11:51   ` [dpdk-dev] [PATCH v5 3/4] net/i40e: install hotplug handler in i40e Jeff Guo
2018-07-11 11:51   ` [dpdk-dev] [PATCH v5 4/4] testpmd: remove the dev event callback register Jeff Guo
2018-07-11 11:58 ` [dpdk-dev] [PATCH v5 0/4] Install eal hotplug event handler in i40e/ixgbe Jeff Guo
2018-07-11 11:58   ` [dpdk-dev] [PATCH v5 1/4] ethdev: Add eal device event handler APIs Jeff Guo
2018-07-11 11:58   ` [dpdk-dev] [PATCH v5 2/4] net/ixgbe: install ethdev hotplug handler in ixgbe Jeff Guo
2018-07-11 11:58   ` [dpdk-dev] [PATCH v5 3/4] net/i40e: install hotplug handler in i40e Jeff Guo
2018-07-11 11:58   ` [dpdk-dev] [PATCH v5 4/4] testpmd: remove the dev event callback register Jeff Guo
2018-08-17 10:50 ` [dpdk-dev] [PATCH v6 0/4] Install eal event handler in i40e/ixgbe Jeff Guo
2018-08-17 10:50   ` Jeff Guo [this message]
2018-08-17 10:50   ` [dpdk-dev] [PATCH v6 2/4] net/ixgbe: install ethdev hotplug handler in ixgbe Jeff Guo
2018-08-17 10:50   ` [dpdk-dev] [PATCH v6 3/4] net/i40e: install hotplug handler in i40e Jeff Guo
2018-08-17 10:50   ` [dpdk-dev] [PATCH v6 4/4] testpmd: remove the dev event callback register Jeff Guo

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=1534503016-31805-2-git-send-email-jia.guo@intel.com \
    --to=jia.guo@intel.com \
    --cc=arybchenko@solarflare.com \
    --cc=bernard.iremonger@intel.com \
    --cc=bruce.richardson@intel.com \
    --cc=dev@dpdk.org \
    --cc=ferruh.yigit@intel.com \
    --cc=gaetan.rivet@6wind.com \
    --cc=harry.van.haaren@intel.com \
    --cc=helin.zhang@intel.com \
    --cc=jblunck@infradead.org \
    --cc=jingjing.wu@intel.com \
    --cc=konstantin.ananyev@intel.com \
    --cc=matan@mellanox.com \
    --cc=motih@mellanox.com \
    --cc=qi.z.zhang@intel.com \
    --cc=shaopeng.he@intel.com \
    --cc=shreyansh.jain@nxp.com \
    --cc=stephen@networkplumber.org \
    --cc=thomas@monjalon.net \
    /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).