|
@@ -448,6 +448,27 @@ EXPORT_SYMBOL_GPL(intel_iommu_gfx_mapped);
|
|
|
static DEFINE_SPINLOCK(device_domain_lock);
|
|
|
static LIST_HEAD(device_domain_list);
|
|
|
|
|
|
+/*
|
|
|
+ * Iterate over elements in device_domain_list and call the specified
|
|
|
+ * callback @fn against each element. This helper should only be used
|
|
|
+ * in the context where the device_domain_lock has already been holden.
|
|
|
+ */
|
|
|
+int for_each_device_domain(int (*fn)(struct device_domain_info *info,
|
|
|
+ void *data), void *data)
|
|
|
+{
|
|
|
+ int ret = 0;
|
|
|
+ struct device_domain_info *info;
|
|
|
+
|
|
|
+ assert_spin_locked(&device_domain_lock);
|
|
|
+ list_for_each_entry(info, &device_domain_list, global) {
|
|
|
+ ret = fn(info, data);
|
|
|
+ if (ret)
|
|
|
+ return ret;
|
|
|
+ }
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
const struct iommu_ops intel_iommu_ops;
|
|
|
|
|
|
static bool translation_pre_enabled(struct intel_iommu *iommu)
|