iommu/vt-d: Add for_each_device_domain() helper
This adds a helper named for_each_device_domain() to iterate over the elements in device_domain_list and invoke a callback against each element. This allows to search the device_domain list in other source files. Cc: Ashok Raj <ashok.raj@intel.com> Cc: Jacob Pan <jacob.jun.pan@linux.intel.com> Cc: Kevin Tian <kevin.tian@intel.com> Cc: Liu Yi L <yi.l.liu@intel.com> Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com> Reviewed-by: Liu Yi L <yi.l.liu@intel.com> Signed-off-by: Joerg Roedel <jroedel@suse.de>
This commit is contained in:
parent
9ddbfb4213
commit
85319dcc89
|
@ -448,6 +448,27 @@ EXPORT_SYMBOL_GPL(intel_iommu_gfx_mapped);
|
||||||
static DEFINE_SPINLOCK(device_domain_lock);
|
static DEFINE_SPINLOCK(device_domain_lock);
|
||||||
static LIST_HEAD(device_domain_list);
|
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;
|
const struct iommu_ops intel_iommu_ops;
|
||||||
|
|
||||||
static bool translation_pre_enabled(struct intel_iommu *iommu)
|
static bool translation_pre_enabled(struct intel_iommu *iommu)
|
||||||
|
|
|
@ -520,6 +520,8 @@ struct dmar_domain *get_valid_domain_for_dev(struct device *dev);
|
||||||
void *alloc_pgtable_page(int node);
|
void *alloc_pgtable_page(int node);
|
||||||
void free_pgtable_page(void *vaddr);
|
void free_pgtable_page(void *vaddr);
|
||||||
struct intel_iommu *domain_get_iommu(struct dmar_domain *domain);
|
struct intel_iommu *domain_get_iommu(struct dmar_domain *domain);
|
||||||
|
int for_each_device_domain(int (*fn)(struct device_domain_info *info,
|
||||||
|
void *data), void *data);
|
||||||
|
|
||||||
#ifdef CONFIG_INTEL_IOMMU_SVM
|
#ifdef CONFIG_INTEL_IOMMU_SVM
|
||||||
extern int intel_svm_alloc_pasid_tables(struct intel_iommu *iommu);
|
extern int intel_svm_alloc_pasid_tables(struct intel_iommu *iommu);
|
||||||
|
|
Loading…
Reference in New Issue