On Thu, Jan 06, 2022 at 10:20:50AM +0800, Lu Baolu wrote: > The individual device driver should use iommu_attach/detach_device() > for domain attachment/detachment. > > Signed-off-by: Lu Baolu <baolu.lu@xxxxxxxxxxxxxxx> > drivers/iommu/amd/iommu_v2.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/drivers/iommu/amd/iommu_v2.c b/drivers/iommu/amd/iommu_v2.c > index 58da08cc3d01..7d9d0fe89064 100644 > +++ b/drivers/iommu/amd/iommu_v2.c > @@ -133,7 +133,7 @@ static void free_device_state(struct device_state *dev_state) > if (WARN_ON(!group)) > return; > > - iommu_detach_group(dev_state->domain, group); > + iommu_detach_device(dev_state->domain, &dev_state->pdev->dev); > > iommu_group_put(group); This is the only user of the group in the function all the group_get/put should be deleted too. Joerg said in commit 55c99a4dc50f ("iommu/amd: Use iommu_attach_group()") that the device API doesn't work here because there are multi-device groups? But I'm not sure how this can work with multi-device groups - this seems to assigns a domain setup for direct map, so perhaps this only works if all devices are setup for direct map? > @@ -791,7 +791,7 @@ int amd_iommu_init_device(struct pci_dev *pdev, int pasids) > goto out_free_domain; > } > > - ret = iommu_attach_group(dev_state->domain, group); > + ret = iommu_attach_device(dev_state->domain, &pdev->dev); > if (ret != 0) > goto out_drop_group; Same comment here Jason