x86-iommu: provide x86_iommu_get_default
Instead of searching the device tree every time, one static variable is declared for the default system x86 IOMMU device. Signed-off-by: Peter Xu <peterx@redhat.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
04af0e18bc
commit
1cf5fd573f
@ -52,7 +52,7 @@
|
||||
#include "hw/i386/ich9.h"
|
||||
#include "hw/pci/pci_bus.h"
|
||||
#include "hw/pci-host/q35.h"
|
||||
#include "hw/i386/intel_iommu.h"
|
||||
#include "hw/i386/x86-iommu.h"
|
||||
#include "hw/timer/hpet.h"
|
||||
|
||||
#include "hw/acpi/aml-build.h"
|
||||
@ -2539,12 +2539,7 @@ static bool acpi_get_mcfg(AcpiMcfgInfo *mcfg)
|
||||
|
||||
static bool acpi_has_iommu(void)
|
||||
{
|
||||
bool ambiguous;
|
||||
Object *intel_iommu;
|
||||
|
||||
intel_iommu = object_resolve_path_type("", TYPE_INTEL_IOMMU_DEVICE,
|
||||
&ambiguous);
|
||||
return intel_iommu && !ambiguous;
|
||||
return !!x86_iommu_get_default();
|
||||
}
|
||||
|
||||
static
|
||||
|
@ -21,6 +21,28 @@
|
||||
#include "hw/sysbus.h"
|
||||
#include "hw/boards.h"
|
||||
#include "hw/i386/x86-iommu.h"
|
||||
#include "qemu/error-report.h"
|
||||
|
||||
/* Default X86 IOMMU device */
|
||||
static X86IOMMUState *x86_iommu_default = NULL;
|
||||
|
||||
static void x86_iommu_set_default(X86IOMMUState *x86_iommu)
|
||||
{
|
||||
assert(x86_iommu);
|
||||
|
||||
if (x86_iommu_default) {
|
||||
error_report("QEMU does not support multiple vIOMMUs "
|
||||
"for x86 yet.");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
x86_iommu_default = x86_iommu;
|
||||
}
|
||||
|
||||
X86IOMMUState *x86_iommu_get_default(void)
|
||||
{
|
||||
return x86_iommu_default;
|
||||
}
|
||||
|
||||
static void x86_iommu_realize(DeviceState *dev, Error **errp)
|
||||
{
|
||||
@ -28,6 +50,7 @@ static void x86_iommu_realize(DeviceState *dev, Error **errp)
|
||||
if (x86_class->realize) {
|
||||
x86_class->realize(dev, errp);
|
||||
}
|
||||
x86_iommu_set_default(X86_IOMMU_DEVICE(dev));
|
||||
}
|
||||
|
||||
static void x86_iommu_class_init(ObjectClass *klass, void *data)
|
||||
|
@ -45,4 +45,10 @@ struct X86IOMMUState {
|
||||
SysBusDevice busdev;
|
||||
};
|
||||
|
||||
/**
|
||||
* x86_iommu_get_default - get default IOMMU device
|
||||
* @return: pointer to default IOMMU device
|
||||
*/
|
||||
X86IOMMUState *x86_iommu_get_default(void);
|
||||
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user