Merge branches 'iommu/fixes', 'arm/msm', 'arm/tegra', 'arm/mediatek', 'x86/vt-d'...
[sfrench/cifs-2.6.git] / drivers / iommu / iommu.c
index 3ed4db3343416ee35b136c13076fdd49da395d15..33a982e33716369b7d2bf5885ef5a8ed22f04414 100644 (file)
@@ -668,7 +668,7 @@ rename:
 
        trace_add_device_to_group(group->id, dev);
 
-       pr_info("Adding device %s to group %d\n", dev_name(dev), group->id);
+       dev_info(dev, "Adding to iommu group %d\n", group->id);
 
        return 0;
 
@@ -684,7 +684,7 @@ err_remove_link:
        sysfs_remove_link(&dev->kobj, "iommu_group");
 err_free_device:
        kfree(device);
-       pr_err("Failed to add device %s to group %d: %d\n", dev_name(dev), group->id, ret);
+       dev_err(dev, "Failed to add to iommu group %d: %d\n", group->id, ret);
        return ret;
 }
 EXPORT_SYMBOL_GPL(iommu_group_add_device);
@@ -701,7 +701,7 @@ void iommu_group_remove_device(struct device *dev)
        struct iommu_group *group = dev->iommu_group;
        struct group_device *tmp_device, *device = NULL;
 
-       pr_info("Removing device %s from group %d\n", dev_name(dev), group->id);
+       dev_info(dev, "Removing from iommu group %d\n", group->id);
 
        /* Pre-notify listeners that a device is being removed. */
        blocking_notifier_call_chain(&group->notifier,
@@ -1585,13 +1585,14 @@ static size_t iommu_pgsize(struct iommu_domain *domain,
 int iommu_map(struct iommu_domain *domain, unsigned long iova,
              phys_addr_t paddr, size_t size, int prot)
 {
+       const struct iommu_ops *ops = domain->ops;
        unsigned long orig_iova = iova;
        unsigned int min_pagesz;
        size_t orig_size = size;
        phys_addr_t orig_paddr = paddr;
        int ret = 0;
 
-       if (unlikely(domain->ops->map == NULL ||
+       if (unlikely(ops->map == NULL ||
                     domain->pgsize_bitmap == 0UL))
                return -ENODEV;
 
@@ -1620,7 +1621,7 @@ int iommu_map(struct iommu_domain *domain, unsigned long iova,
                pr_debug("mapping: iova 0x%lx pa %pa pgsize 0x%zx\n",
                         iova, &paddr, pgsize);
 
-               ret = domain->ops->map(domain, iova, paddr, pgsize, prot);
+               ret = ops->map(domain, iova, paddr, pgsize, prot);
                if (ret)
                        break;
 
@@ -1629,6 +1630,9 @@ int iommu_map(struct iommu_domain *domain, unsigned long iova,
                size -= pgsize;
        }
 
+       if (ops->iotlb_sync_map)
+               ops->iotlb_sync_map(domain);
+
        /* unroll mapping in case something went wrong */
        if (ret)
                iommu_unmap(domain, orig_iova, orig_size - size);
@@ -1951,7 +1955,7 @@ int iommu_request_dm_for_dev(struct device *dev)
                iommu_domain_free(group->default_domain);
        group->default_domain = dm_domain;
 
-       pr_info("Using direct mapping for device %s\n", dev_name(dev));
+       dev_info(dev, "Using iommu direct mapping\n");
 
        ret = 0;
 out: