iommu/vt-d: Fix up error handling in alloc_iommu
authorJoerg Roedel <jroedel@suse.de>
Thu, 7 Jan 2016 11:16:51 +0000 (12:16 +0100)
committerJoerg Roedel <jroedel@suse.de>
Thu, 7 Jan 2016 12:44:41 +0000 (13:44 +0100)
Only check for error when iommu->iommu_dev has been assigned
and only assign drhd->iommu when the function can't fail
anymore.

Signed-off-by: Joerg Roedel <jroedel@suse.de>
drivers/iommu/dmar.c

index add177a37f000772824e890e6a737f1d0b152402..62a400c5ba0614fde00d18ad2207b430d99433ee 100644 (file)
@@ -1063,19 +1063,19 @@ static int alloc_iommu(struct dmar_drhd_unit *drhd)
 
        raw_spin_lock_init(&iommu->register_lock);
 
-       drhd->iommu = iommu;
-
-       if (intel_iommu_enabled)
+       if (intel_iommu_enabled) {
                iommu->iommu_dev = iommu_device_create(NULL, iommu,
                                                       intel_iommu_groups,
                                                       "%s", iommu->name);
 
-       if (IS_ERR(iommu->iommu_dev)) {
-               drhd->iommu = NULL;
-               err = PTR_ERR(iommu->iommu_dev);
-               goto err_unmap;
+               if (IS_ERR(iommu->iommu_dev)) {
+                       err = PTR_ERR(iommu->iommu_dev);
+                       goto err_unmap;
+               }
        }
 
+       drhd->iommu = iommu;
+
        return 0;
 
 err_unmap: