vfio/type1: Add extension to test DMA cache coherence of IOMMU
Now that the type1 IOMMU backend can support IOMMU_CACHE, we need to be able to test whether coherency is currently enforced. Add an extension for this. Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
This commit is contained in:
parent
1ef3e2bc04
commit
aa42931827
|
@ -867,6 +867,23 @@ static void vfio_iommu_type1_release(void *iommu_data)
|
|||
kfree(iommu);
|
||||
}
|
||||
|
||||
static int vfio_domains_have_iommu_cache(struct vfio_iommu *iommu)
|
||||
{
|
||||
struct vfio_domain *domain;
|
||||
int ret = 1;
|
||||
|
||||
mutex_lock(&iommu->lock);
|
||||
list_for_each_entry(domain, &iommu->domain_list, next) {
|
||||
if (!(domain->prot & IOMMU_CACHE)) {
|
||||
ret = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
mutex_unlock(&iommu->lock);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static long vfio_iommu_type1_ioctl(void *iommu_data,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
|
@ -878,6 +895,10 @@ static long vfio_iommu_type1_ioctl(void *iommu_data,
|
|||
case VFIO_TYPE1_IOMMU:
|
||||
case VFIO_TYPE1v2_IOMMU:
|
||||
return 1;
|
||||
case VFIO_DMA_CC_IOMMU:
|
||||
if (!iommu)
|
||||
return 0;
|
||||
return vfio_domains_have_iommu_cache(iommu);
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -24,6 +24,11 @@
|
|||
#define VFIO_TYPE1_IOMMU 1
|
||||
#define VFIO_SPAPR_TCE_IOMMU 2
|
||||
#define VFIO_TYPE1v2_IOMMU 3
|
||||
/*
|
||||
* IOMMU enforces DMA cache coherence (ex. PCIe NoSnoop stripping). This
|
||||
* capability is subject to change as groups are added or removed.
|
||||
*/
|
||||
#define VFIO_DMA_CC_IOMMU 4
|
||||
|
||||
/*
|
||||
* The IOCTL interface is designed for extensibility by embedding the
|
||||
|
|
Loading…
Reference in New Issue