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>
This commit is contained in:
@@ -33,6 +33,7 @@
|
|||||||
#include <linux/uaccess.h>
|
#include <linux/uaccess.h>
|
||||||
#include <linux/iommu.h>
|
#include <linux/iommu.h>
|
||||||
#include <linux/intel-iommu.h>
|
#include <linux/intel-iommu.h>
|
||||||
|
#include <linux/pci.h>
|
||||||
|
|
||||||
#include <asm/pgtable.h>
|
#include <asm/pgtable.h>
|
||||||
#include <asm/gcc_intrin.h>
|
#include <asm/gcc_intrin.h>
|
||||||
@@ -204,7 +205,7 @@ int kvm_dev_ioctl_check_extension(long ext)
|
|||||||
r = KVM_COALESCED_MMIO_PAGE_OFFSET;
|
r = KVM_COALESCED_MMIO_PAGE_OFFSET;
|
||||||
break;
|
break;
|
||||||
case KVM_CAP_IOMMU:
|
case KVM_CAP_IOMMU:
|
||||||
r = iommu_found();
|
r = iommu_present(&pci_bus_type);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
r = 0;
|
r = 0;
|
||||||
|
@@ -44,6 +44,7 @@
|
|||||||
#include <linux/perf_event.h>
|
#include <linux/perf_event.h>
|
||||||
#include <linux/uaccess.h>
|
#include <linux/uaccess.h>
|
||||||
#include <linux/hash.h>
|
#include <linux/hash.h>
|
||||||
|
#include <linux/pci.h>
|
||||||
#include <trace/events/kvm.h>
|
#include <trace/events/kvm.h>
|
||||||
|
|
||||||
#define CREATE_TRACE_POINTS
|
#define CREATE_TRACE_POINTS
|
||||||
@@ -2095,7 +2096,7 @@ int kvm_dev_ioctl_check_extension(long ext)
|
|||||||
r = 0;
|
r = 0;
|
||||||
break;
|
break;
|
||||||
case KVM_CAP_IOMMU:
|
case KVM_CAP_IOMMU:
|
||||||
r = iommu_found();
|
r = iommu_present(&pci_bus_type);
|
||||||
break;
|
break;
|
||||||
case KVM_CAP_MCE:
|
case KVM_CAP_MCE:
|
||||||
r = KVM_MAX_MCE_BANKS;
|
r = KVM_MAX_MCE_BANKS;
|
||||||
|
@@ -66,11 +66,14 @@ int bus_set_iommu(struct bus_type *bus, struct iommu_ops *ops)
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(bus_set_iommu);
|
EXPORT_SYMBOL_GPL(bus_set_iommu);
|
||||||
|
|
||||||
bool iommu_found(void)
|
bool iommu_present(struct bus_type *bus)
|
||||||
{
|
{
|
||||||
return iommu_ops != NULL;
|
if (bus->iommu_ops != NULL)
|
||||||
|
return true;
|
||||||
|
else
|
||||||
|
return iommu_ops != NULL;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(iommu_found);
|
EXPORT_SYMBOL_GPL(iommu_present);
|
||||||
|
|
||||||
struct iommu_domain *iommu_domain_alloc(struct bus_type *bus)
|
struct iommu_domain *iommu_domain_alloc(struct bus_type *bus)
|
||||||
{
|
{
|
||||||
|
@@ -56,7 +56,7 @@ struct iommu_ops {
|
|||||||
|
|
||||||
extern void register_iommu(struct iommu_ops *ops);
|
extern void register_iommu(struct iommu_ops *ops);
|
||||||
extern int bus_set_iommu(struct bus_type *bus, struct iommu_ops *ops);
|
extern int bus_set_iommu(struct bus_type *bus, struct iommu_ops *ops);
|
||||||
extern bool iommu_found(void);
|
extern bool iommu_present(struct bus_type *bus);
|
||||||
extern struct iommu_domain *iommu_domain_alloc(struct bus_type *bus);
|
extern struct iommu_domain *iommu_domain_alloc(struct bus_type *bus);
|
||||||
extern void iommu_domain_free(struct iommu_domain *domain);
|
extern void iommu_domain_free(struct iommu_domain *domain);
|
||||||
extern int iommu_attach_device(struct iommu_domain *domain,
|
extern int iommu_attach_device(struct iommu_domain *domain,
|
||||||
@@ -76,7 +76,7 @@ extern int iommu_domain_has_cap(struct iommu_domain *domain,
|
|||||||
|
|
||||||
struct iommu_ops {};
|
struct iommu_ops {};
|
||||||
|
|
||||||
static inline bool iommu_found(void)
|
static inline bool iommu_present(struct bus_type *bus)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@@ -228,7 +228,7 @@ int kvm_iommu_map_guest(struct kvm *kvm)
|
|||||||
{
|
{
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
if (!iommu_found()) {
|
if (!iommu_present(&pci_bus_type)) {
|
||||||
printk(KERN_ERR "%s: iommu not found\n", __func__);
|
printk(KERN_ERR "%s: iommu not found\n", __func__);
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user