Message ID | 20201026063008.24849-1-baolu.lu@linux.intel.com |
---|---|
State | New |
Headers | show |
Series | [1/1] iommu: Fix deferred domain attachment in iommu_probe_device() | expand |
Hi Baolu, On Mon, Oct 26, 2020 at 02:30:08PM +0800, Lu Baolu wrote: > @@ -264,7 +266,8 @@ int iommu_probe_device(struct device *dev) > */ > iommu_alloc_default_domain(group, dev); > > - if (group->default_domain) > + if (group->default_domain && > + !iommu_is_attach_deferred(group->default_domain, dev)) > ret = __iommu_attach_device(group->default_domain, dev); This is the hotplug path, not used for boot-initialization. Have you seen failures from the missing check here? Regards, Joerg
Hi Joerg, On 11/3/20 9:23 PM, Joerg Roedel wrote: > Hi Baolu, > > On Mon, Oct 26, 2020 at 02:30:08PM +0800, Lu Baolu wrote: >> @@ -264,7 +266,8 @@ int iommu_probe_device(struct device *dev) >> */ >> iommu_alloc_default_domain(group, dev); >> >> - if (group->default_domain) >> + if (group->default_domain && >> + !iommu_is_attach_deferred(group->default_domain, dev)) >> ret = __iommu_attach_device(group->default_domain, dev); > > This is the hotplug path, not used for boot-initialization. Have you > seen failures from the missing check here? I haven't seen any failure. Just wondered why deferred attaching was not checked here. It's fine to me if it's only for hotplug path. Please ignore this change. Best regards, baolu
diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c index 6d847027d35e..690abf60239d 100644 --- a/drivers/iommu/iommu.c +++ b/drivers/iommu/iommu.c @@ -93,6 +93,8 @@ static void __iommu_detach_group(struct iommu_domain *domain, static int iommu_create_device_direct_mappings(struct iommu_group *group, struct device *dev); static struct iommu_group *iommu_group_get_for_dev(struct device *dev); +static bool iommu_is_attach_deferred(struct iommu_domain *domain, + struct device *dev); #define IOMMU_GROUP_ATTR(_name, _mode, _show, _store) \ struct iommu_group_attribute iommu_group_attr_##_name = \ @@ -264,7 +266,8 @@ int iommu_probe_device(struct device *dev) */ iommu_alloc_default_domain(group, dev); - if (group->default_domain) + if (group->default_domain && + !iommu_is_attach_deferred(group->default_domain, dev)) ret = __iommu_attach_device(group->default_domain, dev); iommu_create_device_direct_mappings(group, dev);
The IOMMU core has support for deferring the attachment of default domain to device. Fix a missed deferred attaching check in iommu_probe_device(). Fixes: cf193888bfbd3 ("iommu: Move new probe_device path to separate function") Cc: stable@vger.kernel.org # v5.8+ Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com> --- drivers/iommu/iommu.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)