aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/iommu/iommu.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/iommu/iommu.c')
-rw-r--r--drivers/iommu/iommu.c14
1 files changed, 13 insertions, 1 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;