On 2024/3/29 10:12, Duan, Zhenzhong wrote:
-----Original Message-----
From: Liu, Yi L <yi.l.liu@xxxxxxxxx>
Subject: [PATCH v2 0/2] Two enhancements to
iommu_at[de]tach_device_pasid()
There are minor mistakes in the iommu set_dev_pasid() and
remove_dev_pasid()
paths. The set_dev_pasid() path updates the group->pasid_array first, and
then call into remove_dev_pasid() in error handling when there are devices
within the group that failed to set_dev_pasid.
Not related to this patch, just curious in which cases some of the devices
In same group failed to set_dev_pasid while others succeed?
There are multiple failure reasons. Given to the fact of some devices have
already succeeded, the most typical error may be no memory. Not sure about
other reasons.
Regards,
Yi Liu
Thanks
Zhenzhong
The remove_dev_pasid()
callbacks of the underlying iommu drivers get the domain for pasid from the
group->pasid_array. So the remove_dev_pasid() callback may get a wrong
domain
in the set_dev_pasid() path. [1] Even if the group is singleton, the existing
code logic would have unnecessary warnings in the error handling of the
set_dev_pasid() path. e.g. intel iommu driver.
The above issue can be fixed by improving the error handling in the
set_dev_pasid() path. Also, this reminds that it is not reliable for the
underlying iommu driver callback to get the domain from group-
pasid_array.
So, the second patch of this series passes the domain to remove_dev_pasid
op.
[1] https://lore.kernel.org/linux-
iommu/20240320123803.GD159172@xxxxxxxxxx/
Change log:
v2:
- Make clear that the patch 1/2 of v1 does not fix the problem (Kevin)
- Swap the order of patch 1/2 and 2/2 of v1. In this new series, patch 1/2
fixes the real issue, patch 2/2 is to avoid potential issue in the future.
v1: https://lore.kernel.org/linux-iommu/20240327125433.248946-1-
yi.l.liu@xxxxxxxxx/
Regards,
Yi Liu
Yi Liu (2):
iommu: Undo pasid attachment only for the devices that have succeeded
iommu: Pass domain to remove_dev_pasid() op
drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c | 9 ++-----
drivers/iommu/intel/iommu.c | 11 +++-----
drivers/iommu/iommu.c | 28 ++++++++++++++-------
include/linux/iommu.h | 3 ++-
4 files changed, 26 insertions(+), 25 deletions(-)
--
2.34.1
--
Regards,
Yi Liu