summaryrefslogtreecommitdiff
path: root/include/dm/root.h
diff options
context:
space:
mode:
authorTom Rini <trini@konsulko.com>2024-11-24 15:41:32 -0600
committerTom Rini <trini@konsulko.com>2024-11-24 15:41:32 -0600
commit880fcc49eb40a78ed27ff575aa02034d7bd74e80 (patch)
treef31c80f6079688c879048751172e305100c37eb9 /include/dm/root.h
parent6c791b6646c101b5bed6537dafbe7361185466ea (diff)
parentdabaa4ae32062cb3f3d995e5c63e6cef54ad079b (diff)
Merge patch series "Fix device removal order for Apple dart iommu"
Janne Grunau <j@jannau.net> says: Starting with v2024.10 dev_iommu_dma_unmap calls during device removal trigger a NULL pointer dereference in the Apple dart iommu driver. The iommu device is removed before its user. The sparsely used DM_FLAG_VITAL flag is intended to describe this dependency. Add it to the driver. Adding this flag is unfortunately not enough since the boot routines except the arm one simply remove all drivers. Add and use a new function which calls dm_remove_devioce_flags(DM_REMOVE_ACTIVE_ALL | DM_REMOVE_NON_VITAL); dm_remove_devices_flags(DM_REMOVE_ACTIVE_ALL); to ensure this order dependency is head consistently. Link: https://lore.kernel.org/r/20241123-iommu_apple_dart_ordering-v2-0-cc2ade6dde97@jannau.net
Diffstat (limited to 'include/dm/root.h')
-rw-r--r--include/dm/root.h10
1 files changed, 10 insertions, 0 deletions
diff --git a/include/dm/root.h b/include/dm/root.h
index b2f30a842f5..5651b868c8b 100644
--- a/include/dm/root.h
+++ b/include/dm/root.h
@@ -167,8 +167,18 @@ int dm_uninit(void);
* Return: 0 if OK, -ve on error
*/
int dm_remove_devices_flags(uint flags);
+
+/**
+ * dm_remove_devices_active - Call remove function of all active drivers heeding
+ * device dependencies as far as know, i.e. removing
+ * devices marked with DM_FLAG_VITAL last.
+ *
+ * All active devices will be removed
+ */
+void dm_remove_devices_active(void);
#else
static inline int dm_remove_devices_flags(uint flags) { return 0; }
+static inline void dm_remove_devices_active(void) { }
#endif
/**