@@ -194,9 +194,19 @@ static int __iommu_probe_device(struct device *dev, struct list_head *group_list
194
194
struct iommu_group * group ;
195
195
int ret ;
196
196
197
+ if (!dev_iommu_get (dev ))
198
+ return - ENOMEM ;
199
+
200
+ if (!try_module_get (ops -> owner )) {
201
+ ret = - EINVAL ;
202
+ goto err_free ;
203
+ }
204
+
197
205
iommu_dev = ops -> probe_device (dev );
198
- if (IS_ERR (iommu_dev ))
199
- return PTR_ERR (iommu_dev );
206
+ if (IS_ERR (iommu_dev )) {
207
+ ret = PTR_ERR (iommu_dev );
208
+ goto out_module_put ;
209
+ }
200
210
201
211
dev -> iommu -> iommu_dev = iommu_dev ;
202
212
@@ -217,6 +227,12 @@ static int __iommu_probe_device(struct device *dev, struct list_head *group_list
217
227
out_release :
218
228
ops -> release_device (dev );
219
229
230
+ out_module_put :
231
+ module_put (ops -> owner );
232
+
233
+ err_free :
234
+ dev_iommu_free (dev );
235
+
220
236
return ret ;
221
237
}
222
238
@@ -226,14 +242,6 @@ int iommu_probe_device(struct device *dev)
226
242
struct iommu_group * group ;
227
243
int ret ;
228
244
229
- if (!dev_iommu_get (dev ))
230
- return - ENOMEM ;
231
-
232
- if (!try_module_get (ops -> owner )) {
233
- ret = - EINVAL ;
234
- goto err_out ;
235
- }
236
-
237
245
ret = __iommu_probe_device (dev , NULL );
238
246
if (ret )
239
247
goto err_out ;
@@ -1532,37 +1540,18 @@ struct iommu_domain *iommu_group_default_domain(struct iommu_group *group)
1532
1540
1533
1541
static int probe_iommu_group (struct device * dev , void * data )
1534
1542
{
1535
- const struct iommu_ops * ops = dev -> bus -> iommu_ops ;
1536
1543
struct list_head * group_list = data ;
1537
1544
struct iommu_group * group ;
1538
1545
int ret ;
1539
1546
1540
- if (!dev_iommu_get (dev ))
1541
- return - ENOMEM ;
1542
-
1543
1547
/* Device is probed already if in a group */
1544
1548
group = iommu_group_get (dev );
1545
1549
if (group ) {
1546
1550
iommu_group_put (group );
1547
1551
return 0 ;
1548
1552
}
1549
1553
1550
- if (!try_module_get (ops -> owner )) {
1551
- ret = - EINVAL ;
1552
- goto err_free_dev_iommu ;
1553
- }
1554
-
1555
1554
ret = __iommu_probe_device (dev , group_list );
1556
- if (ret )
1557
- goto err_module_put ;
1558
-
1559
- return 0 ;
1560
-
1561
- err_module_put :
1562
- module_put (ops -> owner );
1563
- err_free_dev_iommu :
1564
- dev_iommu_free (dev );
1565
-
1566
1555
if (ret == - ENODEV )
1567
1556
ret = 0 ;
1568
1557
0 commit comments