aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoerg Roedel <joerg.roedel@amd.com>2011-09-06 12:46:34 -0400
committerJoerg Roedel <joerg.roedel@amd.com>2011-10-21 08:37:20 -0400
commita1b60c1cd913c5ccfb38c717ba0bd22622425fa7 (patch)
tree74e5c1e847262ba3c42fb3b0396a3e781c168b6e
parent905d66c1e5dc8149e111f04a32bb193f25da1d53 (diff)
iommu/core: Convert iommu_found to iommu_present
With per-bus iommu_ops the iommu_found function needs to work on a bus_type too. This patch adds a bus_type parameter to that function and converts all call-places. The function is also renamed to iommu_present because the function now checks if an iommu is present for a given bus and does not check for a global iommu anymore. Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
-rw-r--r--arch/ia64/kvm/kvm-ia64.c3
-rw-r--r--arch/x86/kvm/x86.c3
-rw-r--r--drivers/iommu/iommu.c9
-rw-r--r--include/linux/iommu.h4
-rw-r--r--virt/kvm/iommu.c2
5 files changed, 13 insertions, 8 deletions
diff --git a/arch/ia64/kvm/kvm-ia64.c b/arch/ia64/kvm/kvm-ia64.c
index 8213efe1998c..43f4c92816ef 100644
--- a/arch/ia64/kvm/kvm-ia64.c
+++ b/arch/ia64/kvm/kvm-ia64.c
@@ -33,6 +33,7 @@
33#include <linux/uaccess.h> 33#include <linux/uaccess.h>
34#include <linux/iommu.h> 34#include <linux/iommu.h>
35#include <linux/intel-iommu.h> 35#include <linux/intel-iommu.h>
36#include <linux/pci.h>
36 37
37#include <asm/pgtable.h> 38#include <asm/pgtable.h>
38#include <asm/gcc_intrin.h> 39#include <asm/gcc_intrin.h>
@@ -204,7 +205,7 @@ int kvm_dev_ioctl_check_extension(long ext)
204 r = KVM_COALESCED_MMIO_PAGE_OFFSET; 205 r = KVM_COALESCED_MMIO_PAGE_OFFSET;
205 break; 206 break;
206 case KVM_CAP_IOMMU: 207 case KVM_CAP_IOMMU:
207 r = iommu_found(); 208 r = iommu_present(&pci_bus_type);
208 break; 209 break;
209 default: 210 default:
210 r = 0; 211 r = 0;
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index 84a28ea45fa4..73c6a4268bf4 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -44,6 +44,7 @@
44#include <linux/perf_event.h> 44#include <linux/perf_event.h>
45#include <linux/uaccess.h> 45#include <linux/uaccess.h>
46#include <linux/hash.h> 46#include <linux/hash.h>
47#include <linux/pci.h>
47#include <trace/events/kvm.h> 48#include <trace/events/kvm.h>
48 49
49#define CREATE_TRACE_POINTS 50#define CREATE_TRACE_POINTS
@@ -2095,7 +2096,7 @@ int kvm_dev_ioctl_check_extension(long ext)
2095 r = 0; 2096 r = 0;
2096 break; 2097 break;
2097 case KVM_CAP_IOMMU: 2098 case KVM_CAP_IOMMU:
2098 r = iommu_found(); 2099 r = iommu_present(&pci_bus_type);
2099 break; 2100 break;
2100 case KVM_CAP_MCE: 2101 case KVM_CAP_MCE:
2101 r = KVM_MAX_MCE_BANKS; 2102 r = KVM_MAX_MCE_BANKS;
diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c
index 46e1c24f2f43..ad8ce1addb4d 100644
--- a/drivers/iommu/iommu.c
+++ b/drivers/iommu/iommu.c
@@ -66,11 +66,14 @@ int bus_set_iommu(struct bus_type *bus, struct iommu_ops *ops)
66} 66}
67EXPORT_SYMBOL_GPL(bus_set_iommu); 67EXPORT_SYMBOL_GPL(bus_set_iommu);
68 68
69bool iommu_found(void) 69bool iommu_present(struct bus_type *bus)
70{ 70{
71 return iommu_ops != NULL; 71 if (bus->iommu_ops != NULL)
72 return true;
73 else
74 return iommu_ops != NULL;
72} 75}
73EXPORT_SYMBOL_GPL(iommu_found); 76EXPORT_SYMBOL_GPL(iommu_present);
74 77
75struct iommu_domain *iommu_domain_alloc(struct bus_type *bus) 78struct iommu_domain *iommu_domain_alloc(struct bus_type *bus)
76{ 79{
diff --git a/include/linux/iommu.h b/include/linux/iommu.h
index c78d068930b7..f56e559442a2 100644
--- a/include/linux/iommu.h
+++ b/include/linux/iommu.h
@@ -56,7 +56,7 @@ struct iommu_ops {
56 56
57extern void register_iommu(struct iommu_ops *ops); 57extern void register_iommu(struct iommu_ops *ops);
58extern int bus_set_iommu(struct bus_type *bus, struct iommu_ops *ops); 58extern int bus_set_iommu(struct bus_type *bus, struct iommu_ops *ops);
59extern bool iommu_found(void); 59extern bool iommu_present(struct bus_type *bus);
60extern struct iommu_domain *iommu_domain_alloc(struct bus_type *bus); 60extern struct iommu_domain *iommu_domain_alloc(struct bus_type *bus);
61extern void iommu_domain_free(struct iommu_domain *domain); 61extern void iommu_domain_free(struct iommu_domain *domain);
62extern int iommu_attach_device(struct iommu_domain *domain, 62extern int iommu_attach_device(struct iommu_domain *domain,
@@ -76,7 +76,7 @@ extern int iommu_domain_has_cap(struct iommu_domain *domain,
76 76
77struct iommu_ops {}; 77struct iommu_ops {};
78 78
79static inline bool iommu_found(void) 79static inline bool iommu_present(struct bus_type *bus)
80{ 80{
81 return false; 81 return false;
82} 82}
diff --git a/virt/kvm/iommu.c b/virt/kvm/iommu.c
index 20115b1aac6a..d149940608da 100644
--- a/virt/kvm/iommu.c
+++ b/virt/kvm/iommu.c
@@ -228,7 +228,7 @@ int kvm_iommu_map_guest(struct kvm *kvm)
228{ 228{
229 int r; 229 int r;
230 230
231 if (!iommu_found()) { 231 if (!iommu_present(&pci_bus_type)) {
232 printk(KERN_ERR "%s: iommu not found\n", __func__); 232 printk(KERN_ERR "%s: iommu not found\n", __func__);
233 return -ENODEV; 233 return -ENODEV;
234 } 234 }