[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH for-4.2 v10 07/15] virtio-iommu: Implement attach/de
From: |
Eric Auger |
Subject: |
[Qemu-devel] [PATCH for-4.2 v10 07/15] virtio-iommu: Implement attach/detach command |
Date: |
Tue, 30 Jul 2019 19:21:29 +0200 |
This patch implements the endpoint attach/detach to/from
a domain.
Signed-off-by: Eric Auger <address@hidden>
---
---
hw/virtio/virtio-iommu.c | 40 ++++++++++++++++++++++++++++++++++------
1 file changed, 34 insertions(+), 6 deletions(-)
diff --git a/hw/virtio/virtio-iommu.c b/hw/virtio/virtio-iommu.c
index 77dccecc0a..5ea0930cc2 100644
--- a/hw/virtio/virtio-iommu.c
+++ b/hw/virtio/virtio-iommu.c
@@ -80,8 +80,8 @@ static void
virtio_iommu_detach_endpoint_from_domain(viommu_endpoint *ep)
ep->domain = NULL;
}
-viommu_endpoint *virtio_iommu_get_endpoint(VirtIOIOMMU *s, uint32_t ep_id);
-viommu_endpoint *virtio_iommu_get_endpoint(VirtIOIOMMU *s, uint32_t ep_id)
+static viommu_endpoint *virtio_iommu_get_endpoint(VirtIOIOMMU *s,
+ uint32_t ep_id)
{
viommu_endpoint *ep;
@@ -110,8 +110,8 @@ static void virtio_iommu_put_endpoint(gpointer data)
g_free(ep);
}
-viommu_domain *virtio_iommu_get_domain(VirtIOIOMMU *s, uint32_t domain_id);
-viommu_domain *virtio_iommu_get_domain(VirtIOIOMMU *s, uint32_t domain_id)
+static viommu_domain *virtio_iommu_get_domain(VirtIOIOMMU *s,
+ uint32_t domain_id)
{
viommu_domain *domain;
@@ -187,10 +187,27 @@ static int virtio_iommu_attach(VirtIOIOMMU *s,
{
uint32_t domain_id = le32_to_cpu(req->domain);
uint32_t ep_id = le32_to_cpu(req->endpoint);
+ viommu_domain *domain;
+ viommu_endpoint *ep;
trace_virtio_iommu_attach(domain_id, ep_id);
- return VIRTIO_IOMMU_S_UNSUPP;
+ ep = virtio_iommu_get_endpoint(s, ep_id);
+ if (ep->domain) {
+ /*
+ * the device is already attached to a domain,
+ * detach it first
+ */
+ virtio_iommu_detach_endpoint_from_domain(ep);
+ }
+
+ domain = virtio_iommu_get_domain(s, domain_id);
+ QLIST_INSERT_HEAD(&domain->endpoint_list, ep, next);
+
+ ep->domain = domain;
+ g_tree_ref(domain->mappings);
+
+ return VIRTIO_IOMMU_S_OK;
}
static int virtio_iommu_detach(VirtIOIOMMU *s,
@@ -198,10 +215,21 @@ static int virtio_iommu_detach(VirtIOIOMMU *s,
{
uint32_t domain_id = le32_to_cpu(req->domain);
uint32_t ep_id = le32_to_cpu(req->endpoint);
+ viommu_endpoint *ep;
trace_virtio_iommu_detach(domain_id, ep_id);
- return VIRTIO_IOMMU_S_UNSUPP;
+ ep = g_tree_lookup(s->endpoints, GUINT_TO_POINTER(ep_id));
+ if (!ep) {
+ return VIRTIO_IOMMU_S_NOENT;
+ }
+
+ if (!ep->domain) {
+ return VIRTIO_IOMMU_S_INVAL;
+ }
+
+ virtio_iommu_detach_endpoint_from_domain(ep);
+ return VIRTIO_IOMMU_S_OK;
}
static int virtio_iommu_map(VirtIOIOMMU *s,
--
2.20.1
- [Qemu-devel] [PATCH for-4.2 v10 00/15] VIRTIO-IOMMU device, Eric Auger, 2019/07/30
- [Qemu-devel] [PATCH for-4.2 v10 01/15] update-linux-headers: Import virtio_iommu.h, Eric Auger, 2019/07/30
- [Qemu-devel] [PATCH for-4.2 v10 03/15] virtio-iommu: Add skeleton, Eric Auger, 2019/07/30
- [Qemu-devel] [PATCH for-4.2 v10 02/15] linux-headers: update against 5.3-rc2, Eric Auger, 2019/07/30
- [Qemu-devel] [PATCH for-4.2 v10 04/15] virtio-iommu: Decode the command payload, Eric Auger, 2019/07/30
- [Qemu-devel] [PATCH for-4.2 v10 05/15] virtio-iommu: Add the iommu regions, Eric Auger, 2019/07/30
- [Qemu-devel] [PATCH for-4.2 v10 06/15] virtio-iommu: Endpoint and domains structs and helpers, Eric Auger, 2019/07/30
- [Qemu-devel] [PATCH for-4.2 v10 07/15] virtio-iommu: Implement attach/detach command,
Eric Auger <=
- [Qemu-devel] [PATCH for-4.2 v10 08/15] virtio-iommu: Implement map/unmap, Eric Auger, 2019/07/30
- [Qemu-devel] [PATCH for-4.2 v10 09/15] virtio-iommu: Implement translate, Eric Auger, 2019/07/30
- [Qemu-devel] [PATCH for-4.2 v10 10/15] virtio-iommu: Implement probe request, Eric Auger, 2019/07/30
- [Qemu-devel] [PATCH for-4.2 v10 11/15] virtio-iommu: Expose the IOAPIC MSI reserved region when relevant, Eric Auger, 2019/07/30
- Re: [Qemu-devel] [PATCH for-4.2 v10 11/15] virtio-iommu: Expose the IOAPIC MSI reserved region when relevant, Michael S. Tsirkin, 2019/07/30
- Re: [Qemu-devel] [PATCH for-4.2 v10 11/15] virtio-iommu: Expose the IOAPIC MSI reserved region when relevant, Tian, Kevin, 2019/07/30
- Re: [Qemu-devel] [PATCH for-4.2 v10 11/15] virtio-iommu: Expose the IOAPIC MSI reserved region when relevant, Auger Eric, 2019/07/31
- Re: [Qemu-devel] [PATCH for-4.2 v10 11/15] virtio-iommu: Expose the IOAPIC MSI reserved region when relevant, Michael S. Tsirkin, 2019/07/31
- Re: [Qemu-devel] [PATCH for-4.2 v10 11/15] virtio-iommu: Expose the IOAPIC MSI reserved region when relevant, Auger Eric, 2019/07/31
- Re: [Qemu-devel] [PATCH for-4.2 v10 11/15] virtio-iommu: Expose the IOAPIC MSI reserved region when relevant, Tian, Kevin, 2019/07/31