diff mbox series

[1/1] iommu: Fix deferred domain attachment in iommu_probe_device()

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

Commit Message

Baolu Lu Oct. 26, 2020, 6:30 a.m. UTC
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(-)

Comments

Joerg Roedel Nov. 3, 2020, 1:23 p.m. UTC | #1
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
Baolu Lu Nov. 4, 2020, 1:01 a.m. UTC | #2
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 mbox series

Patch

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);