On 07/06/17 17:01, Eric Auger wrote: > This patch adds the actual implementation for the translation routine > and the virtio-iommu commands. > > Signed-off-by: Eric Auger <eric.au...@redhat.com> > > ---[...] > static int virtio_iommu_attach(VirtIOIOMMU *s, > struct virtio_iommu_req_attach *req) > @@ -95,10 +135,34 @@ static int virtio_iommu_attach(VirtIOIOMMU *s, > uint32_t asid = le32_to_cpu(req->address_space); > uint32_t devid = le32_to_cpu(req->device); > uint32_t reserved = le32_to_cpu(req->reserved); > + viommu_as *as; > + viommu_dev *dev; > > trace_virtio_iommu_attach(asid, devid, reserved); > > - return VIRTIO_IOMMU_S_UNSUPP; > + dev = g_tree_lookup(s->devices, GUINT_TO_POINTER(devid)); > + if (dev) { > + return -1;
I guess you could return S_INVAL here. However, if the device is already attached to AS0, it should be detached and attached to AS1. The Linux driver relies on this behavior when moving a device from kernel to user address space and back. Thanks, Jean