bus: add hot-unplug handler
authorJeff Guo <jia.guo@intel.com>
Mon, 15 Oct 2018 11:27:21 +0000 (19:27 +0800)
committerThomas Monjalon <thomas@monjalon.net>
Mon, 15 Oct 2018 20:16:47 +0000 (22:16 +0200)
A hot-unplug failure and app crash can be caused, when a device is
hot-unplugged but the application still try to access the device
by reading or writing from the BARs, which is already invalid but
still not timely be unmap or released.

This patch introduces bus ops to handle hot-unplug failures. Each
bus can implement its own case-dependent logic to handle the failures.

Signed-off-by: Jeff Guo <jia.guo@intel.com>
Acked-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
lib/librte_eal/common/include/rte_bus.h

index b7b5b08..1bb53dc 100644 (file)
@@ -167,6 +167,20 @@ typedef int (*rte_bus_unplug_t)(struct rte_device *dev);
  */
 typedef int (*rte_bus_parse_t)(const char *name, void *addr);
 
+/**
+ * Implement a specific hot-unplug handler, which is responsible for
+ * handle the failure when device be hot-unplugged. When the event of
+ * hot-unplug be detected, it could call this function to handle
+ * the hot-unplug failure and avoid app crash.
+ * @param dev
+ *     Pointer of the device structure.
+ *
+ * @return
+ *     0 on success.
+ *     !0 on error.
+ */
+typedef int (*rte_bus_hot_unplug_handler_t)(struct rte_device *dev);
+
 /**
  * Bus scan policies
  */
@@ -212,6 +226,8 @@ struct rte_bus {
        struct rte_bus_conf conf;    /**< Bus configuration */
        rte_bus_get_iommu_class_t get_iommu_class; /**< Get iommu class */
        rte_dev_iterate_t dev_iterate; /**< Device iterator. */
+       rte_bus_hot_unplug_handler_t hot_unplug_handler;
+                               /**< handle hot-unplug failure on the bus */
 };
 
 /**