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);
|
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,
|
static long vfio_iommu_type1_ioctl(void *iommu_data,
|
||||||
unsigned int cmd, unsigned long arg)
|
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_TYPE1_IOMMU:
|
||||||
case VFIO_TYPE1v2_IOMMU:
|
case VFIO_TYPE1v2_IOMMU:
|
||||||
return 1;
|
return 1;
|
||||||
|
case VFIO_DMA_CC_IOMMU:
|
||||||
|
if (!iommu)
|
||||||
|
return 0;
|
||||||
|
return vfio_domains_have_iommu_cache(iommu);
|
||||||
default:
|
default:
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,6 +24,11 @@
|
||||||
#define VFIO_TYPE1_IOMMU 1
|
#define VFIO_TYPE1_IOMMU 1
|
||||||
#define VFIO_SPAPR_TCE_IOMMU 2
|
#define VFIO_SPAPR_TCE_IOMMU 2
|
||||||
#define VFIO_TYPE1v2_IOMMU 3
|
#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
|
* The IOCTL interface is designed for extensibility by embedding the
|
||||||
|
|
Loading…
Reference in New Issue