iommu/amd: Handle errors returned from iommu_init_device
authorJoerg Roedel <jroedel@suse.de>
Thu, 11 Jun 2015 07:21:39 +0000 (09:21 +0200)
committerJoerg Roedel <jroedel@suse.de>
Thu, 11 Jun 2015 07:42:25 +0000 (09:42 +0200)
Without this patch only -ENOTSUPP is handled, but there are
other possible errors. Handle them too.

Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Joerg Roedel <jroedel@suse.de>
drivers/iommu/amd_iommu.c

index 8bc6f40edf5e437bebd9215a9042948fa65fe501..e5b77d398e9b0dff406f8b810fa865a40caf1fb5 100644 (file)
@@ -2265,7 +2265,11 @@ static int amd_iommu_add_device(struct device *dev)
        iommu = amd_iommu_rlookup_table[devid];
 
        ret = iommu_init_device(dev);
-       if (ret == -ENOTSUPP) {
+       if (ret) {
+               if (ret != -ENOTSUPP)
+                       pr_err("Failed to initialize device %s - trying to proceed anyway\n",
+                               dev_name(dev));
+
                iommu_ignore_device(dev);
                dev->archdata.dma_ops = &nommu_dma_ops;
                goto out;
@@ -2273,7 +2277,10 @@ static int amd_iommu_add_device(struct device *dev)
        init_iommu_group(dev);
 
        dev_data = get_dev_data(dev);
-       if (dev_data && dev_data->iommu_v2)
+
+       BUG_ON(!dev_data);
+
+       if (dev_data->iommu_v2)
                iommu_request_dm_for_dev(dev);
 
        /* Domains are initialized for this device - have a look what we ended up with */