On Wed, May 10, 2023 at 05:37:22PM +0200, Eric Auger wrote: > Hi Jean, > > On 4/14/23 17:07, Jean-Philippe Brucker wrote: > > When an endpoint is released, for example a PCIe VF is disabled or a > > function hot-unplugged, it should be detached from its domain. Send a > > DETACH request. > > > > Fixes: edcd69ab9a32 ("iommu: Add virtio-iommu driver") > > Reported-by: Akihiko Odaki <akihiko.odaki@xxxxxxxxxx> > > Link: https://lore.kernel.org/all/15bf1b00-3aa0-973a-3a86-3fa5c4d41d2c@xxxxxxxxxx/ > > Signed-off-by: Jean-Philippe Brucker <jean-philippe@xxxxxxxxxx> > > --- > > drivers/iommu/virtio-iommu.c | 23 +++++++++++++++++++++++ > > 1 file changed, 23 insertions(+) > > > > diff --git a/drivers/iommu/virtio-iommu.c b/drivers/iommu/virtio-iommu.c > > index 5b8fe9bfa9a5..3d3d4462359e 100644 > > --- a/drivers/iommu/virtio-iommu.c > > +++ b/drivers/iommu/virtio-iommu.c > > @@ -788,6 +788,28 @@ static int viommu_attach_dev(struct iommu_domain *domain, struct device *dev) > > return 0; > > } > > > > +static void viommu_detach_dev(struct viommu_endpoint *vdev) > > +{ > > + int i; > > + struct virtio_iommu_req_detach req; > > + struct viommu_domain *vdomain = vdev->vdomain; > > + struct iommu_fwspec *fwspec = dev_iommu_fwspec_get(vdev->dev); > > + > > + if (!vdomain) > > + return; > > + > > + req = (struct virtio_iommu_req_detach) { > > + .head.type = VIRTIO_IOMMU_T_DETACH, > > + .domain = cpu_to_le32(vdomain->id), > > + }; > > + > > + for (i = 0; i < fwspec->num_ids; i++) { > > + req.endpoint = cpu_to_le32(fwspec->ids[i]); > > + WARN_ON(viommu_send_req_sync(vdev->viommu, &req, sizeof(req))); > > + } > just a late question: don't you need to decrement vdomain's nr_endpoints? > Ah yes, I'll fix that, thank you. I think attach() could use some cleanup as well: if the request fails then we should keep the nr_endpoints reference on the previous domain. But that's less urgent. Thanks, Jean _______________________________________________ Virtualization mailing list Virtualization@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linuxfoundation.org/mailman/listinfo/virtualization