Return vIOMMU attribute to caller. e.g. VFIO call via PCI layer.
Cc: Kevin Tian <[email protected]>
Cc: Jacob Pan <[email protected]>
Cc: Peter Xu <[email protected]>
Cc: Yi Sun <[email protected]>
Cc: Paolo Bonzini <[email protected]>
Cc: Richard Henderson <[email protected]>
Cc: Eduardo Habkost <[email protected]>
Signed-off-by: Liu Yi L <[email protected]>
---
hw/i386/intel_iommu.c | 23 +++++++++++++++++++++++
1 file changed, 23 insertions(+)
diff --git a/hw/i386/intel_iommu.c b/hw/i386/intel_iommu.c
index bf13d59..333f172 100644
--- a/hw/i386/intel_iommu.c
+++ b/hw/i386/intel_iommu.c
@@ -3440,6 +3440,28 @@ VTDAddressSpace *vtd_find_add_as(IntelIOMMUState *s,
PCIBus *bus, int devfn)
return vtd_dev_as;
}
+static int vtd_dev_get_iommu_attr(PCIBus *bus, void *opaque, int32_t devfn,
+ IOMMUAttr attr, void *data)
+{
+ int ret = 0;
+
+ assert(0 <= devfn && devfn < PCI_DEVFN_MAX);
+
+ switch (attr) {
+ case IOMMU_WANT_NESTING:
+ {
+ bool *pdata = data;
+
+ /* return false until vSVA is ready */
+ *pdata = false;
+ break;
+ }
+ default:
+ ret = -ENOENT;
+ }
+ return ret;
+}
+
static uint64_t get_naturally_aligned_size(uint64_t start,
uint64_t size, int gaw)
{
@@ -3735,6 +3757,7 @@ static AddressSpace *vtd_host_dma_iommu(PCIBus *bus, void
*opaque, int devfn)
static PCIIOMMUOps vtd_iommu_ops = {
.get_address_space = vtd_host_dma_iommu,
+ .get_iommu_attr = vtd_dev_get_iommu_attr,
};
static bool vtd_decide_config(IntelIOMMUState *s, Error **errp)
--
2.7.4