diff options
-rw-r--r-- | drivers/pci/intel-iommu.c | 33 | ||||
-rw-r--r-- | include/linux/intel-iommu.h | 2 |
2 files changed, 18 insertions, 17 deletions
diff --git a/drivers/pci/intel-iommu.c b/drivers/pci/intel-iommu.c index 772fb22e1be0..5c95a5a65440 100644 --- a/drivers/pci/intel-iommu.c +++ b/drivers/pci/intel-iommu.c | |||
@@ -34,6 +34,7 @@ | |||
34 | #include <linux/mempool.h> | 34 | #include <linux/mempool.h> |
35 | #include <linux/timer.h> | 35 | #include <linux/timer.h> |
36 | #include <linux/iova.h> | 36 | #include <linux/iova.h> |
37 | #include <linux/iommu.h> | ||
37 | #include <linux/intel-iommu.h> | 38 | #include <linux/intel-iommu.h> |
38 | #include <asm/cacheflush.h> | 39 | #include <asm/cacheflush.h> |
39 | #include <asm/iommu.h> | 40 | #include <asm/iommu.h> |
@@ -2962,32 +2963,34 @@ static void vm_domain_exit(struct dmar_domain *domain) | |||
2962 | free_domain_mem(domain); | 2963 | free_domain_mem(domain); |
2963 | } | 2964 | } |
2964 | 2965 | ||
2965 | struct dmar_domain *intel_iommu_alloc_domain(void) | 2966 | static int intel_iommu_domain_init(struct iommu_domain *domain) |
2966 | { | 2967 | { |
2967 | struct dmar_domain *domain; | 2968 | struct dmar_domain *dmar_domain; |
2968 | 2969 | ||
2969 | domain = iommu_alloc_vm_domain(); | 2970 | dmar_domain = iommu_alloc_vm_domain(); |
2970 | if (!domain) { | 2971 | if (!dmar_domain) { |
2971 | printk(KERN_ERR | 2972 | printk(KERN_ERR |
2972 | "intel_iommu_domain_alloc: domain == NULL\n"); | 2973 | "intel_iommu_domain_init: dmar_domain == NULL\n"); |
2973 | return NULL; | 2974 | return -ENOMEM; |
2974 | } | 2975 | } |
2975 | if (vm_domain_init(domain, DEFAULT_DOMAIN_ADDRESS_WIDTH)) { | 2976 | if (vm_domain_init(dmar_domain, DEFAULT_DOMAIN_ADDRESS_WIDTH)) { |
2976 | printk(KERN_ERR | 2977 | printk(KERN_ERR |
2977 | "intel_iommu_domain_alloc: domain_init() failed\n"); | 2978 | "intel_iommu_domain_init() failed\n"); |
2978 | vm_domain_exit(domain); | 2979 | vm_domain_exit(dmar_domain); |
2979 | return NULL; | 2980 | return -ENOMEM; |
2980 | } | 2981 | } |
2982 | domain->priv = dmar_domain; | ||
2981 | 2983 | ||
2982 | return domain; | 2984 | return 0; |
2983 | } | 2985 | } |
2984 | EXPORT_SYMBOL_GPL(intel_iommu_alloc_domain); | ||
2985 | 2986 | ||
2986 | void intel_iommu_free_domain(struct dmar_domain *domain) | 2987 | static void intel_iommu_domain_destroy(struct iommu_domain *domain) |
2987 | { | 2988 | { |
2988 | vm_domain_exit(domain); | 2989 | struct dmar_domain *dmar_domain = domain->priv; |
2990 | |||
2991 | domain->priv = NULL; | ||
2992 | vm_domain_exit(dmar_domain); | ||
2989 | } | 2993 | } |
2990 | EXPORT_SYMBOL_GPL(intel_iommu_free_domain); | ||
2991 | 2994 | ||
2992 | int intel_iommu_attach_device(struct dmar_domain *domain, | 2995 | int intel_iommu_attach_device(struct dmar_domain *domain, |
2993 | struct pci_dev *pdev) | 2996 | struct pci_dev *pdev) |
diff --git a/include/linux/intel-iommu.h b/include/linux/intel-iommu.h index 07973c4e4acc..0a7ba0cefc74 100644 --- a/include/linux/intel-iommu.h +++ b/include/linux/intel-iommu.h | |||
@@ -330,8 +330,6 @@ extern int qi_flush_iotlb(struct intel_iommu *iommu, u16 did, u64 addr, | |||
330 | 330 | ||
331 | extern void qi_submit_sync(struct qi_desc *desc, struct intel_iommu *iommu); | 331 | extern void qi_submit_sync(struct qi_desc *desc, struct intel_iommu *iommu); |
332 | 332 | ||
333 | struct dmar_domain *intel_iommu_alloc_domain(void); | ||
334 | void intel_iommu_free_domain(struct dmar_domain *domain); | ||
335 | int intel_iommu_attach_device(struct dmar_domain *domain, | 333 | int intel_iommu_attach_device(struct dmar_domain *domain, |
336 | struct pci_dev *pdev); | 334 | struct pci_dev *pdev); |
337 | void intel_iommu_detach_device(struct dmar_domain *domain, | 335 | void intel_iommu_detach_device(struct dmar_domain *domain, |