Thread (19 messages) 19 messages, 5 authors, 2021-10-22

RE: [PATCH 2/5] iommu/virtio: Support bypass domains

From: "Tian, Kevin" <kevin.tian@intel.com>
Date: 2021-10-14 03:28:03
Also in: linux-iommu

From: Tian, Kevin
Sent: Thursday, October 14, 2021 11:25 AM
quoted
From: Jean-Philippe Brucker <redacted>
Sent: Wednesday, October 13, 2021 8:11 PM

The VIRTIO_IOMMU_F_BYPASS_CONFIG feature adds a new flag to the
ATTACH
request, that creates a bypass domain. Use it to enable identity
domains.

When VIRTIO_IOMMU_F_BYPASS_CONFIG is not supported by the device,
we
currently fail attaching to an identity domain. Future patches will
instead create identity mappings in this case.

Signed-off-by: Jean-Philippe Brucker <redacted>
---
 drivers/iommu/virtio-iommu.c | 20 +++++++++++++++++++-
 1 file changed, 19 insertions(+), 1 deletion(-)
diff --git a/drivers/iommu/virtio-iommu.c b/drivers/iommu/virtio-iommu.c
index 80930ce04a16..ee8a7afd667b 100644
--- a/drivers/iommu/virtio-iommu.c
+++ b/drivers/iommu/virtio-iommu.c
@@ -71,6 +71,7 @@ struct viommu_domain {
 	struct rb_root_cached		mappings;

 	unsigned long			nr_endpoints;
+	bool				bypass;
 };

 struct viommu_endpoint {
@@ -587,7 +588,9 @@ static struct iommu_domain
*viommu_domain_alloc(unsigned type)
 {
 	struct viommu_domain *vdomain;

-	if (type != IOMMU_DOMAIN_UNMANAGED && type !=
IOMMU_DOMAIN_DMA)
+	if (type != IOMMU_DOMAIN_UNMANAGED &&
+	    type != IOMMU_DOMAIN_DMA &&
+	    type != IOMMU_DOMAIN_IDENTITY)
 		return NULL;

 	vdomain = kzalloc(sizeof(*vdomain), GFP_KERNEL);
@@ -630,6 +633,17 @@ static int viommu_domain_finalise(struct
viommu_endpoint *vdev,
 	vdomain->map_flags	= viommu->map_flags;
 	vdomain->viommu		= viommu;

+	if (domain->type == IOMMU_DOMAIN_IDENTITY) {
+		if (!virtio_has_feature(viommu->vdev,
+					VIRTIO_IOMMU_F_BYPASS_CONFIG))
{
+			ida_free(&viommu->domain_ids, vdomain->id);
+			vdomain->viommu = 0;
+			return -EOPNOTSUPP;
+		}
+
+		vdomain->bypass = true;
+	}
+
move to the start of the function, then no need for above cleanup.
forgot it as I see the reason now when looking at patch05
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help