Messages in this thread | | | Subject | Re: [PATCH v1 5/8] iommu/amd: Use iommu_attach/detach_device() | From | Lu Baolu <> | Date | Fri, 7 Jan 2022 08:23:05 +0800 |
| |
Hi Jason,
On 1/6/22 10:33 PM, Jason Gunthorpe wrote: > 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@linux.intel.com> >> 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?
It's also difficult for me to understand how this can work with multi- device group. The iommu_attach_group() returns -EBUSY if _init_device() is called for the second device in the group. That's the reason why I didn't set no_kernel_dma.
> >> @@ -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
Yes.
> > Jason >
Best regards, baolu
| |