[v10,1/8] bus: add memory failure handler

Message ID 1534502916-31636-2-git-send-email-jia.guo@intel.com
State Superseded, archived
Delegated to: Thomas Monjalon
Headers show
Series
  • hotplug failure handle mechanism
Related show

Checks

Context Check Description
ci/Intel-compilation success Compilation OK
ci/checkpatch success coding style OK

Commit Message

Jeff Guo Aug. 17, 2018, 10:48 a.m.
A memory failure and system crash can be caused if a device is hotplugged
out but the application can still access the device by MMIO.

This patch introduces bus ops to handle memory failures of illegal access,
especially for hotplug. Each bus can implement its own case-dependent
logic to handle the memory failures.

Signed-off-by: Jeff Guo <jia.guo@intel.com>
---
v10->v9:
modify bus ops name
---
 lib/librte_eal/common/include/rte_bus.h | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

Patch

diff --git a/lib/librte_eal/common/include/rte_bus.h b/lib/librte_eal/common/include/rte_bus.h
index b7b5b08..2606451 100644
--- a/lib/librte_eal/common/include/rte_bus.h
+++ b/lib/librte_eal/common/include/rte_bus.h
@@ -168,6 +168,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 memory failure handler, which is responsible for
+ * handle the failure of memory illegal access, especially for hotplug. When
+ * the event of hotplug-out be detected, it could call this function to handle
+ * the memory failure and avoid system crash.
+ * @param dev
+ *	Pointer of the device structure.
+ *
+ * @return
+ *	0 on success.
+ *	!0 on error.
+ */
+typedef int (*rte_bus_memory_failure_handler_t)(struct rte_device *dev);
+
+/**
  * Bus scan policies
  */
 enum rte_bus_scan_mode {
@@ -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_memory_failure_handler_t memory_failure_handler;
+					/**< handle memory failure on the bus */
 };
 
 /**