aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorJoerg Roedel <joerg.roedel@amd.com>2011-09-06 10:03:26 -0400
committerJoerg Roedel <joerg.roedel@amd.com>2011-10-21 08:37:19 -0400
commit905d66c1e5dc8149e111f04a32bb193f25da1d53 (patch)
tree3b4d55034f1ca58a7956c88cb71f6af8cda2b697 /drivers
parentff21776d12ff7993a6b236b8273ef62777d25dfb (diff)
iommu/core: Add bus_type parameter to iommu_domain_alloc
This is necessary to store a pointer to the bus-specific iommu_ops in the iommu-domain structure. It will be used later to call into bus-specific iommu-ops. Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/iommu/iommu.c14
-rw-r--r--drivers/media/video/omap3isp/isp.c2
2 files changed, 14 insertions, 2 deletions
diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c
index 3343264f5105..46e1c24f2f43 100644
--- a/drivers/iommu/iommu.c
+++ b/drivers/iommu/iommu.c
@@ -16,6 +16,7 @@
16 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 16 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 */ 17 */
18 18
19#include <linux/device.h>
19#include <linux/kernel.h> 20#include <linux/kernel.h>
20#include <linux/bug.h> 21#include <linux/bug.h>
21#include <linux/types.h> 22#include <linux/types.h>
@@ -71,15 +72,26 @@ bool iommu_found(void)
71} 72}
72EXPORT_SYMBOL_GPL(iommu_found); 73EXPORT_SYMBOL_GPL(iommu_found);
73 74
74struct iommu_domain *iommu_domain_alloc(void) 75struct iommu_domain *iommu_domain_alloc(struct bus_type *bus)
75{ 76{
76 struct iommu_domain *domain; 77 struct iommu_domain *domain;
78 struct iommu_ops *ops;
77 int ret; 79 int ret;
78 80
81 if (bus->iommu_ops)
82 ops = bus->iommu_ops;
83 else
84 ops = iommu_ops;
85
86 if (ops == NULL)
87 return NULL;
88
79 domain = kmalloc(sizeof(*domain), GFP_KERNEL); 89 domain = kmalloc(sizeof(*domain), GFP_KERNEL);
80 if (!domain) 90 if (!domain)
81 return NULL; 91 return NULL;
82 92
93 domain->ops = ops;
94
83 ret = iommu_ops->domain_init(domain); 95 ret = iommu_ops->domain_init(domain);
84 if (ret) 96 if (ret)
85 goto out_free; 97 goto out_free;
diff --git a/drivers/media/video/omap3isp/isp.c b/drivers/media/video/omap3isp/isp.c
index a4baa6165c2c..a7ed98596883 100644
--- a/drivers/media/video/omap3isp/isp.c
+++ b/drivers/media/video/omap3isp/isp.c
@@ -2141,7 +2141,7 @@ static int isp_probe(struct platform_device *pdev)
2141 /* to be removed once iommu migration is complete */ 2141 /* to be removed once iommu migration is complete */
2142 isp->iommu = to_iommu(isp->iommu_dev); 2142 isp->iommu = to_iommu(isp->iommu_dev);
2143 2143
2144 isp->domain = iommu_domain_alloc(); 2144 isp->domain = iommu_domain_alloc(pdev->dev.bus);
2145 if (!isp->domain) { 2145 if (!isp->domain) {
2146 dev_err(isp->dev, "can't alloc iommu domain\n"); 2146 dev_err(isp->dev, "can't alloc iommu domain\n");
2147 ret = -ENOMEM; 2147 ret = -ENOMEM;