* [Qemu-devel] [PATCH v4 0/4] enable iommu with -device
@ 2016-06-14 7:19 Marcel Apfelbaum
2016-06-14 7:19 ` [Qemu-devel] [PATCH v4 1/4] hw/pci: delay bus_master_enable_region initialization Marcel Apfelbaum
` (4 more replies)
0 siblings, 5 replies; 9+ messages in thread
From: Marcel Apfelbaum @ 2016-06-14 7:19 UTC (permalink / raw)
To: qemu-devel
Cc: marcel, mst, pbonzini, ehabkost, peterx, davidkiarie4, jan.kiszka,
bd.aviv, alex.williamson, armbru
Create the iommu device with '-device intel-iommu' instead of '-machine,iommu=on'.
The device is part of the machine properties because we wanted
to ensure is created before any other PCI device.
The alternative is to skip the bus_master_enable_region at
the time the device is created. We can create this region
at machine_done phase. (patch 1)
Then we need to enable sysbus devices(*) for PC machines (patch 2),
since intel-iommu is a sysbus device.
Patch 3 moves the IOMMU init proces into iommu's realize function
and allows the device creation in both ways.
Finally patch 4 removes the iommu machine property.
v3 -> v4:
- Rebased on mst/pci tree (Michael).
v2 -> v3:
- Add machine_done notifier in pci_bus realize and remove it unrealize (Paolo).
- Add comments for 'cannot_instantiate_with_device_add_yet' (Markus).
- Split adding the -device iommu support and removing the iommu machine property (Michael).
- Use pci_setup_iommu as before (Peter)
- Mark intel-iommu as not hot-pluggable (Peter)
- Rebased on master
v1 -> v2:
- Enable bus_master also on init if the guest OS already booted to enable hotplug (Paolo).
- Add a machine_done notifier to PCIBus instead of adding functionality
for q35 machine_done callback. The main reason is we don't want to replicate
the code for all platforms that support PCI and is also cleaner this way.
- Added 'cannot_instantiate_with_device_add_yet' to sysbus devices that lead
to crashes if added with -device.
- Rebased on master
(*) Creates a new problem since we have now a bunch of
new devices that can be created with -device on Q35:
name "q35-pcihost", bus System
name "sysbus-ohci", bus System, desc "OHCI USB Controller"
name "allwinner-ahci", bus System
name "cfi.pflash01", bus System
name "esp", bus System
name "SUNW,fdtwo", bus System
name "sysbus-ahci", bus System
name "sysbus-fdc", bus System
name "vfio-amd-xgbe", bus System, desc "VFIO AMD XGBE"
name "vfio-calxeda-xgmac", bus System, desc "VFIO Calxeda XGMAC"
name "virtio-mmio", bus System
name "fw_cfg", bus System
name "fw_cfg_io", bus System
name "fw_cfg_mem", bus System
name "generic-sdhci", bus System
name "hpet", bus System
name "i440FX-pcihost", bus System
name "intel-iommu", bus System
name "ioapic", bus System
name "isabus-bridge", bus System
name "kvm-ioapic", bus System
name "kvmclock", bus System
name "kvmvapic", bus System
name "pxb-host", bus System
Took care of the ones creating immediate issues (like crashes) by marking them
as 'cannot_instantiate_with_device_add_yet'. I didn't mark them all because:
- libvirt will mask them anyway
- some of them have already a "protection" in place
- it is possible that some of them can be actually used with -device on other platform.
- those are not 'interesting' scenarios.
If somebody spots devices in the list that cannot be added with -device on any platform
please let me know and I'll mark them.
Thanks,
Marcel
Marcel Apfelbaum (4):
hw/pci: delay bus_master_enable_region initialization
q35: allow dynamic sysbus
hw/iommu: enable iommu with -device
machine: remove iommu property
hw/core/machine.c | 20 ------------------
hw/i386/intel_iommu.c | 16 +++++++++++++++
hw/i386/pc_q35.c | 2 +-
hw/pci-bridge/pci_expander_bridge.c | 2 ++
hw/pci-host/piix.c | 2 ++
hw/pci-host/q35.c | 31 +++-------------------------
hw/pci/pci.c | 41 +++++++++++++++++++++++++++++--------
include/hw/pci-host/q35.h | 1 -
include/hw/pci/pci_bus.h | 2 ++
include/sysemu/sysemu.h | 1 +
qemu-options.hx | 3 ---
vl.c | 5 +++++
12 files changed, 64 insertions(+), 62 deletions(-)
--
2.4.3
^ permalink raw reply [flat|nested] 9+ messages in thread
* [Qemu-devel] [PATCH v4 1/4] hw/pci: delay bus_master_enable_region initialization
2016-06-14 7:19 [Qemu-devel] [PATCH v4 0/4] enable iommu with -device Marcel Apfelbaum
@ 2016-06-14 7:19 ` Marcel Apfelbaum
2016-06-14 7:19 ` [Qemu-devel] [PATCH v4 2/4] q35: allow dynamic sysbus Marcel Apfelbaum
` (3 subsequent siblings)
4 siblings, 0 replies; 9+ messages in thread
From: Marcel Apfelbaum @ 2016-06-14 7:19 UTC (permalink / raw)
To: qemu-devel
Cc: marcel, mst, pbonzini, ehabkost, peterx, davidkiarie4, jan.kiszka,
bd.aviv, alex.williamson, armbru
Skip bus_master_enable region creation on PCI device init
in order to be sure the IOMMU device (if present) would
be created in advance. Add this memory region at machine_done time.
Signed-off-by: Marcel Apfelbaum <marcel@redhat.com>
---
hw/pci/pci.c | 41 ++++++++++++++++++++++++++++++++---------
include/hw/pci/pci_bus.h | 2 ++
include/sysemu/sysemu.h | 1 +
vl.c | 5 +++++
4 files changed, 40 insertions(+), 9 deletions(-)
diff --git a/hw/pci/pci.c b/hw/pci/pci.c
index 4b585f4..ee385eb 100644
--- a/hw/pci/pci.c
+++ b/hw/pci/pci.c
@@ -78,10 +78,37 @@ static const VMStateDescription vmstate_pcibus = {
}
};
+static void pci_init_bus_master(PCIDevice *pci_dev)
+{
+ AddressSpace *dma_as = pci_device_iommu_address_space(pci_dev);
+
+ memory_region_init_alias(&pci_dev->bus_master_enable_region,
+ OBJECT(pci_dev), "bus master",
+ dma_as->root, 0, memory_region_size(dma_as->root));
+ memory_region_set_enabled(&pci_dev->bus_master_enable_region, false);
+ address_space_init(&pci_dev->bus_master_as,
+ &pci_dev->bus_master_enable_region, pci_dev->name);
+}
+
+static void pcibus_machine_done(Notifier *notifier, void *data)
+{
+ PCIBus *bus = container_of(notifier, PCIBus, machine_done);
+ int i;
+
+ for (i = 0; i < ARRAY_SIZE(bus->devices); ++i) {
+ if (bus->devices[i]) {
+ pci_init_bus_master(bus->devices[i]);
+ }
+ }
+}
+
static void pci_bus_realize(BusState *qbus, Error **errp)
{
PCIBus *bus = PCI_BUS(qbus);
+ bus->machine_done.notify = pcibus_machine_done;
+ qemu_add_machine_init_done_notifier(&bus->machine_done);
+
vmstate_register(NULL, -1, &vmstate_pcibus, bus);
}
@@ -89,6 +116,8 @@ static void pci_bus_unrealize(BusState *qbus, Error **errp)
{
PCIBus *bus = PCI_BUS(qbus);
+ qemu_remove_machine_init_done_notifier(&bus->machine_done);
+
vmstate_unregister(NULL, &vmstate_pcibus, bus);
}
@@ -920,7 +949,6 @@ static PCIDevice *do_pci_register_device(PCIDevice *pci_dev, PCIBus *bus,
PCIConfigReadFunc *config_read = pc->config_read;
PCIConfigWriteFunc *config_write = pc->config_write;
Error *local_err = NULL;
- AddressSpace *dma_as;
DeviceState *dev = DEVICE(pci_dev);
pci_dev->bus = bus;
@@ -961,15 +989,10 @@ static PCIDevice *do_pci_register_device(PCIDevice *pci_dev, PCIBus *bus,
pci_dev->devfn = devfn;
pci_dev->requester_id_cache = pci_req_id_cache_get(pci_dev);
- dma_as = pci_device_iommu_address_space(pci_dev);
-
- memory_region_init_alias(&pci_dev->bus_master_enable_region,
- OBJECT(pci_dev), "bus master",
- dma_as->root, 0, memory_region_size(dma_as->root));
- memory_region_set_enabled(&pci_dev->bus_master_enable_region, false);
- address_space_init(&pci_dev->bus_master_as, &pci_dev->bus_master_enable_region,
- name);
+ if (qdev_hotplug) {
+ pci_init_bus_master(pci_dev);
+ }
pstrcpy(pci_dev->name, sizeof(pci_dev->name), name);
pci_dev->irq_state = 0;
pci_config_alloc(pci_dev);
diff --git a/include/hw/pci/pci_bus.h b/include/hw/pci/pci_bus.h
index 403fec6..5484a9b 100644
--- a/include/hw/pci/pci_bus.h
+++ b/include/hw/pci/pci_bus.h
@@ -39,6 +39,8 @@ struct PCIBus {
Keep a count of the number of devices with raised IRQs. */
int nirq;
int *irq_count;
+
+ Notifier machine_done;
};
typedef struct PCIBridgeWindows PCIBridgeWindows;
diff --git a/include/sysemu/sysemu.h b/include/sysemu/sysemu.h
index 9428141..604ec31 100644
--- a/include/sysemu/sysemu.h
+++ b/include/sysemu/sysemu.h
@@ -75,6 +75,7 @@ void qemu_add_exit_notifier(Notifier *notify);
void qemu_remove_exit_notifier(Notifier *notify);
void qemu_add_machine_init_done_notifier(Notifier *notify);
+void qemu_remove_machine_init_done_notifier(Notifier *notify);
void hmp_savevm(Monitor *mon, const QDict *qdict);
int load_vmstate(const char *name);
diff --git a/vl.c b/vl.c
index 2f74fe8..6eb7245 100644
--- a/vl.c
+++ b/vl.c
@@ -2704,6 +2704,11 @@ void qemu_add_machine_init_done_notifier(Notifier *notify)
}
}
+void qemu_remove_machine_init_done_notifier(Notifier *notify)
+{
+ notifier_remove(notify);
+}
+
static void qemu_run_machine_init_done_notifiers(void)
{
notifier_list_notify(&machine_init_done_notifiers, NULL);
--
2.4.3
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [Qemu-devel] [PATCH v4 2/4] q35: allow dynamic sysbus
2016-06-14 7:19 [Qemu-devel] [PATCH v4 0/4] enable iommu with -device Marcel Apfelbaum
2016-06-14 7:19 ` [Qemu-devel] [PATCH v4 1/4] hw/pci: delay bus_master_enable_region initialization Marcel Apfelbaum
@ 2016-06-14 7:19 ` Marcel Apfelbaum
2016-06-14 7:19 ` [Qemu-devel] [PATCH v4 3/4] hw/iommu: enable iommu with -device Marcel Apfelbaum
` (2 subsequent siblings)
4 siblings, 0 replies; 9+ messages in thread
From: Marcel Apfelbaum @ 2016-06-14 7:19 UTC (permalink / raw)
To: qemu-devel
Cc: marcel, mst, pbonzini, ehabkost, peterx, davidkiarie4, jan.kiszka,
bd.aviv, alex.williamson, armbru
Allow adding sysbus devices with -device on Q35.
At first Q35 will support only intel-iommu to be added this way,
however the command line will support all sysbus devices.
Mark with 'cannot_instantiate_with_device_add_yet' the ones
causing immediate problems (e.g. crashes).
Signed-off-by: Marcel Apfelbaum <marcel@redhat.com>
---
hw/i386/pc_q35.c | 1 +
hw/pci-bridge/pci_expander_bridge.c | 2 ++
hw/pci-host/piix.c | 2 ++
hw/pci-host/q35.c | 2 ++
4 files changed, 7 insertions(+)
diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c
index 04aae89..431eaed 100644
--- a/hw/i386/pc_q35.c
+++ b/hw/i386/pc_q35.c
@@ -281,6 +281,7 @@ static void pc_q35_machine_options(MachineClass *m)
m->default_machine_opts = "firmware=bios-256k.bin";
m->default_display = "std";
m->no_floppy = 1;
+ m->has_dynamic_sysbus = true;
}
static void pc_q35_2_6_machine_options(MachineClass *m)
diff --git a/hw/pci-bridge/pci_expander_bridge.c b/hw/pci-bridge/pci_expander_bridge.c
index ba320bd..ab86121 100644
--- a/hw/pci-bridge/pci_expander_bridge.c
+++ b/hw/pci-bridge/pci_expander_bridge.c
@@ -149,6 +149,8 @@ static void pxb_host_class_init(ObjectClass *class, void *data)
PCIHostBridgeClass *hc = PCI_HOST_BRIDGE_CLASS(class);
dc->fw_name = "pci";
+ /* Reason: Internal part of the pxb/pxb-pcie device, not usable by itself */
+ dc->cannot_instantiate_with_device_add_yet = true;
sbc->explicit_ofw_unit_address = pxb_host_ofw_unit_address;
hc->root_bus_path = pxb_host_root_bus_path;
}
diff --git a/hw/pci-host/piix.c b/hw/pci-host/piix.c
index df2b0e2..7167e58 100644
--- a/hw/pci-host/piix.c
+++ b/hw/pci-host/piix.c
@@ -865,6 +865,8 @@ static void i440fx_pcihost_class_init(ObjectClass *klass, void *data)
dc->realize = i440fx_pcihost_realize;
dc->fw_name = "pci";
dc->props = i440fx_props;
+ /* Reason: needs to be wired up by pc_init1 */
+ dc->cannot_instantiate_with_device_add_yet = true;
}
static const TypeInfo i440fx_pcihost_info = {
diff --git a/hw/pci-host/q35.c b/hw/pci-host/q35.c
index 70f897e..141ba5b 100644
--- a/hw/pci-host/q35.c
+++ b/hw/pci-host/q35.c
@@ -138,6 +138,8 @@ static void q35_host_class_init(ObjectClass *klass, void *data)
hc->root_bus_path = q35_host_root_bus_path;
dc->realize = q35_host_realize;
dc->props = mch_props;
+ /* Reason: needs to be wired up by pc_q35_init */
+ dc->cannot_instantiate_with_device_add_yet = true;
set_bit(DEVICE_CATEGORY_BRIDGE, dc->categories);
dc->fw_name = "pci";
}
--
2.4.3
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [Qemu-devel] [PATCH v4 3/4] hw/iommu: enable iommu with -device
2016-06-14 7:19 [Qemu-devel] [PATCH v4 0/4] enable iommu with -device Marcel Apfelbaum
2016-06-14 7:19 ` [Qemu-devel] [PATCH v4 1/4] hw/pci: delay bus_master_enable_region initialization Marcel Apfelbaum
2016-06-14 7:19 ` [Qemu-devel] [PATCH v4 2/4] q35: allow dynamic sysbus Marcel Apfelbaum
@ 2016-06-14 7:19 ` Marcel Apfelbaum
2016-06-21 16:54 ` Paolo Bonzini
2016-06-14 7:19 ` [Qemu-devel] [PATCH v4 4/4] machine: remove iommu property Marcel Apfelbaum
2016-06-24 5:47 ` [Qemu-devel] [PATCH v4 0/4] enable iommu with -device Michael S. Tsirkin
4 siblings, 1 reply; 9+ messages in thread
From: Marcel Apfelbaum @ 2016-06-14 7:19 UTC (permalink / raw)
To: qemu-devel
Cc: marcel, mst, pbonzini, ehabkost, peterx, davidkiarie4, jan.kiszka,
bd.aviv, alex.williamson, armbru
Use the standard '-device iommu' to create the IOMMU device.
The legacy '-machine,iommu=on' can still be used.
Signed-off-by: Marcel Apfelbaum <marcel@redhat.com>
---
hw/i386/intel_iommu.c | 16 ++++++++++++++++
hw/i386/pc_q35.c | 1 -
hw/pci-host/q35.c | 17 +----------------
3 files changed, 17 insertions(+), 17 deletions(-)
diff --git a/hw/i386/intel_iommu.c b/hw/i386/intel_iommu.c
index 347718f..ea25585 100644
--- a/hw/i386/intel_iommu.c
+++ b/hw/i386/intel_iommu.c
@@ -24,6 +24,7 @@
#include "exec/address-spaces.h"
#include "intel_iommu_internal.h"
#include "hw/pci/pci.h"
+#include "hw/i386/pc.h"
/*#define DEBUG_INTEL_IOMMU*/
#ifdef DEBUG_INTEL_IOMMU
@@ -2014,8 +2015,20 @@ static void vtd_reset(DeviceState *dev)
vtd_init(s);
}
+static AddressSpace *vtd_host_dma_iommu(PCIBus *bus, void *opaque, int devfn)
+{
+ IntelIOMMUState *s = opaque;
+ VTDAddressSpace *vtd_as;
+
+ assert(0 <= devfn && devfn <= VTD_PCI_DEVFN_MAX);
+
+ vtd_as = vtd_find_add_as(s, bus, devfn);
+ return &vtd_as->as;
+}
+
static void vtd_realize(DeviceState *dev, Error **errp)
{
+ PCIBus *bus = PC_MACHINE(qdev_get_machine())->bus;
IntelIOMMUState *s = INTEL_IOMMU_DEVICE(dev);
VTD_DPRINTF(GENERAL, "");
@@ -2029,6 +2042,8 @@ static void vtd_realize(DeviceState *dev, Error **errp)
s->vtd_as_by_busptr = g_hash_table_new_full(vtd_uint64_hash, vtd_uint64_equal,
g_free, g_free);
vtd_init(s);
+ sysbus_mmio_map(SYS_BUS_DEVICE(s), 0, Q35_HOST_BRIDGE_IOMMU_ADDR);
+ pci_setup_iommu(bus, vtd_host_dma_iommu, dev);
}
static void vtd_class_init(ObjectClass *klass, void *data)
@@ -2039,6 +2054,7 @@ static void vtd_class_init(ObjectClass *klass, void *data)
dc->realize = vtd_realize;
dc->vmsd = &vtd_vmstate;
dc->props = vtd_properties;
+ dc->hotpluggable = false;
}
static const TypeInfo vtd_info = {
diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c
index 431eaed..47e93d4 100644
--- a/hw/i386/pc_q35.c
+++ b/hw/i386/pc_q35.c
@@ -169,7 +169,6 @@ static void pc_q35_init(MachineState *machine)
qdev_init_nofail(DEVICE(q35_host));
phb = PCI_HOST_BRIDGE(q35_host);
host_bus = phb->bus;
- pcms->bus = phb->bus;
/* create ISA bus */
lpc = pci_create_simple_multifunction(host_bus, PCI_DEVFN(ICH9_LPC_DEV,
ICH9_LPC_FUNC), true,
diff --git a/hw/pci-host/q35.c b/hw/pci-host/q35.c
index 141ba5b..4bd5fb5 100644
--- a/hw/pci-host/q35.c
+++ b/hw/pci-host/q35.c
@@ -52,6 +52,7 @@ static void q35_host_realize(DeviceState *dev, Error **errp)
pci->bus = pci_bus_new(DEVICE(s), "pcie.0",
s->mch.pci_address_space, s->mch.address_space_io,
0, TYPE_PCIE_BUS);
+ PC_MACHINE(qdev_get_machine())->bus = pci->bus;
qdev_set_parent_bus(DEVICE(&s->mch), BUS(pci->bus));
qdev_init_nofail(DEVICE(&s->mch));
}
@@ -426,28 +427,12 @@ static void mch_reset(DeviceState *qdev)
mch_update(mch);
}
-static AddressSpace *q35_host_dma_iommu(PCIBus *bus, void *opaque, int devfn)
-{
- IntelIOMMUState *s = opaque;
- VTDAddressSpace *vtd_as;
-
- assert(0 <= devfn && devfn <= VTD_PCI_DEVFN_MAX);
-
- vtd_as = vtd_find_add_as(s, bus, devfn);
- return &vtd_as->as;
-}
-
static void mch_init_dmar(MCHPCIState *mch)
{
- PCIBus *pci_bus = PCI_BUS(qdev_get_parent_bus(DEVICE(mch)));
-
mch->iommu = INTEL_IOMMU_DEVICE(qdev_create(NULL, TYPE_INTEL_IOMMU_DEVICE));
object_property_add_child(OBJECT(mch), "intel-iommu",
OBJECT(mch->iommu), NULL);
qdev_init_nofail(DEVICE(mch->iommu));
- sysbus_mmio_map(SYS_BUS_DEVICE(mch->iommu), 0, Q35_HOST_BRIDGE_IOMMU_ADDR);
-
- pci_setup_iommu(pci_bus, q35_host_dma_iommu, mch->iommu);
}
static void mch_realize(PCIDevice *d, Error **errp)
--
2.4.3
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [Qemu-devel] [PATCH v4 4/4] machine: remove iommu property
2016-06-14 7:19 [Qemu-devel] [PATCH v4 0/4] enable iommu with -device Marcel Apfelbaum
` (2 preceding siblings ...)
2016-06-14 7:19 ` [Qemu-devel] [PATCH v4 3/4] hw/iommu: enable iommu with -device Marcel Apfelbaum
@ 2016-06-14 7:19 ` Marcel Apfelbaum
2016-06-24 5:47 ` [Qemu-devel] [PATCH v4 0/4] enable iommu with -device Michael S. Tsirkin
4 siblings, 0 replies; 9+ messages in thread
From: Marcel Apfelbaum @ 2016-06-14 7:19 UTC (permalink / raw)
To: qemu-devel
Cc: marcel, mst, pbonzini, ehabkost, peterx, davidkiarie4, jan.kiszka,
bd.aviv, alex.williamson, armbru
Since iommu devices can be created with '-device' there is
no need to keep iommu as machine and mch property.
Signed-off-by: Marcel Apfelbaum <marcel@redhat.com>
---
hw/core/machine.c | 20 --------------------
hw/pci-host/q35.c | 12 ------------
include/hw/pci-host/q35.h | 1 -
qemu-options.hx | 3 ---
4 files changed, 36 deletions(-)
diff --git a/hw/core/machine.c b/hw/core/machine.c
index ccdd5fa..8f94301 100644
--- a/hw/core/machine.c
+++ b/hw/core/machine.c
@@ -300,20 +300,6 @@ static void machine_set_firmware(Object *obj, const char *value, Error **errp)
ms->firmware = g_strdup(value);
}
-static bool machine_get_iommu(Object *obj, Error **errp)
-{
- MachineState *ms = MACHINE(obj);
-
- return ms->iommu;
-}
-
-static void machine_set_iommu(Object *obj, bool value, Error **errp)
-{
- MachineState *ms = MACHINE(obj);
-
- ms->iommu = value;
-}
-
static void machine_set_suppress_vmdesc(Object *obj, bool value, Error **errp)
{
MachineState *ms = MACHINE(obj);
@@ -493,12 +479,6 @@ static void machine_initfn(Object *obj)
object_property_set_description(obj, "firmware",
"Firmware image",
NULL);
- object_property_add_bool(obj, "iommu",
- machine_get_iommu,
- machine_set_iommu, NULL);
- object_property_set_description(obj, "iommu",
- "Set on/off to enable/disable Intel IOMMU (VT-d)",
- NULL);
object_property_add_bool(obj, "suppress-vmdesc",
machine_get_suppress_vmdesc,
machine_set_suppress_vmdesc, NULL);
diff --git a/hw/pci-host/q35.c b/hw/pci-host/q35.c
index 4bd5fb5..181bc3b 100644
--- a/hw/pci-host/q35.c
+++ b/hw/pci-host/q35.c
@@ -427,14 +427,6 @@ static void mch_reset(DeviceState *qdev)
mch_update(mch);
}
-static void mch_init_dmar(MCHPCIState *mch)
-{
- mch->iommu = INTEL_IOMMU_DEVICE(qdev_create(NULL, TYPE_INTEL_IOMMU_DEVICE));
- object_property_add_child(OBJECT(mch), "intel-iommu",
- OBJECT(mch->iommu), NULL);
- qdev_init_nofail(DEVICE(mch->iommu));
-}
-
static void mch_realize(PCIDevice *d, Error **errp)
{
int i;
@@ -493,10 +485,6 @@ static void mch_realize(PCIDevice *d, Error **errp)
mch->pci_address_space, &mch->pam_regions[i+1],
PAM_EXPAN_BASE + i * PAM_EXPAN_SIZE, PAM_EXPAN_SIZE);
}
- /* Intel IOMMU (VT-d) */
- if (object_property_get_bool(qdev_get_machine(), "iommu", NULL)) {
- mch_init_dmar(mch);
- }
}
uint64_t mch_mcfg_base(void)
diff --git a/include/hw/pci-host/q35.h b/include/hw/pci-host/q35.h
index c5c073d..3dee058 100644
--- a/include/hw/pci-host/q35.h
+++ b/include/hw/pci-host/q35.h
@@ -60,7 +60,6 @@ typedef struct MCHPCIState {
ram_addr_t above_4g_mem_size;
uint64_t pci_hole64_size;
uint32_t short_root_bus;
- IntelIOMMUState *iommu;
} MCHPCIState;
typedef struct Q35PCIHost {
diff --git a/qemu-options.hx b/qemu-options.hx
index 9f33361..28e1978 100644
--- a/qemu-options.hx
+++ b/qemu-options.hx
@@ -38,7 +38,6 @@ DEF("machine", HAS_ARG, QEMU_OPTION_machine, \
" kvm_shadow_mem=size of KVM shadow MMU\n"
" dump-guest-core=on|off include guest memory in a core dump (default=on)\n"
" mem-merge=on|off controls memory merge support (default: on)\n"
- " iommu=on|off controls emulated Intel IOMMU (VT-d) support (default=off)\n"
" igd-passthru=on|off controls IGD GFX passthrough support (default=off)\n"
" aes-key-wrap=on|off controls support for AES key wrapping (default=on)\n"
" dea-key-wrap=on|off controls support for DEA key wrapping (default=on)\n"
@@ -73,8 +72,6 @@ Include guest memory in a core dump. The default is on.
Enables or disables memory merge support. This feature, when supported by
the host, de-duplicates identical memory pages among VMs instances
(enabled by default).
-@item iommu=on|off
-Enables or disables emulated Intel IOMMU (VT-d) support. The default is off.
@item aes-key-wrap=on|off
Enables or disables AES key wrapping support on s390-ccw hosts. This feature
controls whether AES wrapping keys will be created to allow
--
2.4.3
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [Qemu-devel] [PATCH v4 3/4] hw/iommu: enable iommu with -device
2016-06-14 7:19 ` [Qemu-devel] [PATCH v4 3/4] hw/iommu: enable iommu with -device Marcel Apfelbaum
@ 2016-06-21 16:54 ` Paolo Bonzini
2016-06-21 18:56 ` Marcel Apfelbaum
0 siblings, 1 reply; 9+ messages in thread
From: Paolo Bonzini @ 2016-06-21 16:54 UTC (permalink / raw)
To: Marcel Apfelbaum, qemu-devel
Cc: ehabkost, mst, bd.aviv, armbru, peterx, alex.williamson,
jan.kiszka, davidkiarie4
On 14/06/2016 09:19, Marcel Apfelbaum wrote:
> Use the standard '-device iommu' to create the IOMMU device.
It's "-device intel-iommu", apart from this it looks good, thanks!
Paolo
> The legacy '-machine,iommu=on' can still be used.
>
> Signed-off-by: Marcel Apfelbaum <marcel@redhat.com>
> ---
> hw/i386/intel_iommu.c | 16 ++++++++++++++++
> hw/i386/pc_q35.c | 1 -
> hw/pci-host/q35.c | 17 +----------------
> 3 files changed, 17 insertions(+), 17 deletions(-)
>
> diff --git a/hw/i386/intel_iommu.c b/hw/i386/intel_iommu.c
> index 347718f..ea25585 100644
> --- a/hw/i386/intel_iommu.c
> +++ b/hw/i386/intel_iommu.c
> @@ -24,6 +24,7 @@
> #include "exec/address-spaces.h"
> #include "intel_iommu_internal.h"
> #include "hw/pci/pci.h"
> +#include "hw/i386/pc.h"
>
> /*#define DEBUG_INTEL_IOMMU*/
> #ifdef DEBUG_INTEL_IOMMU
> @@ -2014,8 +2015,20 @@ static void vtd_reset(DeviceState *dev)
> vtd_init(s);
> }
>
> +static AddressSpace *vtd_host_dma_iommu(PCIBus *bus, void *opaque, int devfn)
> +{
> + IntelIOMMUState *s = opaque;
> + VTDAddressSpace *vtd_as;
> +
> + assert(0 <= devfn && devfn <= VTD_PCI_DEVFN_MAX);
> +
> + vtd_as = vtd_find_add_as(s, bus, devfn);
> + return &vtd_as->as;
> +}
> +
> static void vtd_realize(DeviceState *dev, Error **errp)
> {
> + PCIBus *bus = PC_MACHINE(qdev_get_machine())->bus;
> IntelIOMMUState *s = INTEL_IOMMU_DEVICE(dev);
>
> VTD_DPRINTF(GENERAL, "");
> @@ -2029,6 +2042,8 @@ static void vtd_realize(DeviceState *dev, Error **errp)
> s->vtd_as_by_busptr = g_hash_table_new_full(vtd_uint64_hash, vtd_uint64_equal,
> g_free, g_free);
> vtd_init(s);
> + sysbus_mmio_map(SYS_BUS_DEVICE(s), 0, Q35_HOST_BRIDGE_IOMMU_ADDR);
> + pci_setup_iommu(bus, vtd_host_dma_iommu, dev);
> }
>
> static void vtd_class_init(ObjectClass *klass, void *data)
> @@ -2039,6 +2054,7 @@ static void vtd_class_init(ObjectClass *klass, void *data)
> dc->realize = vtd_realize;
> dc->vmsd = &vtd_vmstate;
> dc->props = vtd_properties;
> + dc->hotpluggable = false;
> }
>
> static const TypeInfo vtd_info = {
> diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c
> index 431eaed..47e93d4 100644
> --- a/hw/i386/pc_q35.c
> +++ b/hw/i386/pc_q35.c
> @@ -169,7 +169,6 @@ static void pc_q35_init(MachineState *machine)
> qdev_init_nofail(DEVICE(q35_host));
> phb = PCI_HOST_BRIDGE(q35_host);
> host_bus = phb->bus;
> - pcms->bus = phb->bus;
> /* create ISA bus */
> lpc = pci_create_simple_multifunction(host_bus, PCI_DEVFN(ICH9_LPC_DEV,
> ICH9_LPC_FUNC), true,
> diff --git a/hw/pci-host/q35.c b/hw/pci-host/q35.c
> index 141ba5b..4bd5fb5 100644
> --- a/hw/pci-host/q35.c
> +++ b/hw/pci-host/q35.c
> @@ -52,6 +52,7 @@ static void q35_host_realize(DeviceState *dev, Error **errp)
> pci->bus = pci_bus_new(DEVICE(s), "pcie.0",
> s->mch.pci_address_space, s->mch.address_space_io,
> 0, TYPE_PCIE_BUS);
> + PC_MACHINE(qdev_get_machine())->bus = pci->bus;
> qdev_set_parent_bus(DEVICE(&s->mch), BUS(pci->bus));
> qdev_init_nofail(DEVICE(&s->mch));
> }
> @@ -426,28 +427,12 @@ static void mch_reset(DeviceState *qdev)
> mch_update(mch);
> }
>
> -static AddressSpace *q35_host_dma_iommu(PCIBus *bus, void *opaque, int devfn)
> -{
> - IntelIOMMUState *s = opaque;
> - VTDAddressSpace *vtd_as;
> -
> - assert(0 <= devfn && devfn <= VTD_PCI_DEVFN_MAX);
> -
> - vtd_as = vtd_find_add_as(s, bus, devfn);
> - return &vtd_as->as;
> -}
> -
> static void mch_init_dmar(MCHPCIState *mch)
> {
> - PCIBus *pci_bus = PCI_BUS(qdev_get_parent_bus(DEVICE(mch)));
> -
> mch->iommu = INTEL_IOMMU_DEVICE(qdev_create(NULL, TYPE_INTEL_IOMMU_DEVICE));
> object_property_add_child(OBJECT(mch), "intel-iommu",
> OBJECT(mch->iommu), NULL);
> qdev_init_nofail(DEVICE(mch->iommu));
> - sysbus_mmio_map(SYS_BUS_DEVICE(mch->iommu), 0, Q35_HOST_BRIDGE_IOMMU_ADDR);
> -
> - pci_setup_iommu(pci_bus, q35_host_dma_iommu, mch->iommu);
> }
>
> static void mch_realize(PCIDevice *d, Error **errp)
>
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [Qemu-devel] [PATCH v4 3/4] hw/iommu: enable iommu with -device
2016-06-21 16:54 ` Paolo Bonzini
@ 2016-06-21 18:56 ` Marcel Apfelbaum
0 siblings, 0 replies; 9+ messages in thread
From: Marcel Apfelbaum @ 2016-06-21 18:56 UTC (permalink / raw)
To: Paolo Bonzini, qemu-devel
Cc: ehabkost, mst, bd.aviv, armbru, peterx, alex.williamson,
jan.kiszka, davidkiarie4
On 06/21/2016 07:54 PM, Paolo Bonzini wrote:
>
>
> On 14/06/2016 09:19, Marcel Apfelbaum wrote:
>> Use the standard '-device iommu' to create the IOMMU device.
>
> It's "-device intel-iommu", apart from this it looks good, thanks!
>
Thanks Paolo!
Michael, can you please correct the patch message?
Is already rebased on your tree. If you prefer another re-spin please let me know.
Thanks,
Marcel
> Paolo
>
>> The legacy '-machine,iommu=on' can still be used.
>>
>> Signed-off-by: Marcel Apfelbaum <marcel@redhat.com>
>> ---
>> hw/i386/intel_iommu.c | 16 ++++++++++++++++
>> hw/i386/pc_q35.c | 1 -
>> hw/pci-host/q35.c | 17 +----------------
>> 3 files changed, 17 insertions(+), 17 deletions(-)
>>
>> diff --git a/hw/i386/intel_iommu.c b/hw/i386/intel_iommu.c
>> index 347718f..ea25585 100644
>> --- a/hw/i386/intel_iommu.c
>> +++ b/hw/i386/intel_iommu.c
>> @@ -24,6 +24,7 @@
>> #include "exec/address-spaces.h"
>> #include "intel_iommu_internal.h"
>> #include "hw/pci/pci.h"
>> +#include "hw/i386/pc.h"
>>
>> /*#define DEBUG_INTEL_IOMMU*/
>> #ifdef DEBUG_INTEL_IOMMU
>> @@ -2014,8 +2015,20 @@ static void vtd_reset(DeviceState *dev)
>> vtd_init(s);
>> }
>>
>> +static AddressSpace *vtd_host_dma_iommu(PCIBus *bus, void *opaque, int devfn)
>> +{
>> + IntelIOMMUState *s = opaque;
>> + VTDAddressSpace *vtd_as;
>> +
>> + assert(0 <= devfn && devfn <= VTD_PCI_DEVFN_MAX);
>> +
>> + vtd_as = vtd_find_add_as(s, bus, devfn);
>> + return &vtd_as->as;
>> +}
>> +
>> static void vtd_realize(DeviceState *dev, Error **errp)
>> {
>> + PCIBus *bus = PC_MACHINE(qdev_get_machine())->bus;
>> IntelIOMMUState *s = INTEL_IOMMU_DEVICE(dev);
>>
>> VTD_DPRINTF(GENERAL, "");
>> @@ -2029,6 +2042,8 @@ static void vtd_realize(DeviceState *dev, Error **errp)
>> s->vtd_as_by_busptr = g_hash_table_new_full(vtd_uint64_hash, vtd_uint64_equal,
>> g_free, g_free);
>> vtd_init(s);
>> + sysbus_mmio_map(SYS_BUS_DEVICE(s), 0, Q35_HOST_BRIDGE_IOMMU_ADDR);
>> + pci_setup_iommu(bus, vtd_host_dma_iommu, dev);
>> }
>>
>> static void vtd_class_init(ObjectClass *klass, void *data)
>> @@ -2039,6 +2054,7 @@ static void vtd_class_init(ObjectClass *klass, void *data)
>> dc->realize = vtd_realize;
>> dc->vmsd = &vtd_vmstate;
>> dc->props = vtd_properties;
>> + dc->hotpluggable = false;
>> }
>>
>> static const TypeInfo vtd_info = {
>> diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c
>> index 431eaed..47e93d4 100644
>> --- a/hw/i386/pc_q35.c
>> +++ b/hw/i386/pc_q35.c
>> @@ -169,7 +169,6 @@ static void pc_q35_init(MachineState *machine)
>> qdev_init_nofail(DEVICE(q35_host));
>> phb = PCI_HOST_BRIDGE(q35_host);
>> host_bus = phb->bus;
>> - pcms->bus = phb->bus;
>> /* create ISA bus */
>> lpc = pci_create_simple_multifunction(host_bus, PCI_DEVFN(ICH9_LPC_DEV,
>> ICH9_LPC_FUNC), true,
>> diff --git a/hw/pci-host/q35.c b/hw/pci-host/q35.c
>> index 141ba5b..4bd5fb5 100644
>> --- a/hw/pci-host/q35.c
>> +++ b/hw/pci-host/q35.c
>> @@ -52,6 +52,7 @@ static void q35_host_realize(DeviceState *dev, Error **errp)
>> pci->bus = pci_bus_new(DEVICE(s), "pcie.0",
>> s->mch.pci_address_space, s->mch.address_space_io,
>> 0, TYPE_PCIE_BUS);
>> + PC_MACHINE(qdev_get_machine())->bus = pci->bus;
>> qdev_set_parent_bus(DEVICE(&s->mch), BUS(pci->bus));
>> qdev_init_nofail(DEVICE(&s->mch));
>> }
>> @@ -426,28 +427,12 @@ static void mch_reset(DeviceState *qdev)
>> mch_update(mch);
>> }
>>
>> -static AddressSpace *q35_host_dma_iommu(PCIBus *bus, void *opaque, int devfn)
>> -{
>> - IntelIOMMUState *s = opaque;
>> - VTDAddressSpace *vtd_as;
>> -
>> - assert(0 <= devfn && devfn <= VTD_PCI_DEVFN_MAX);
>> -
>> - vtd_as = vtd_find_add_as(s, bus, devfn);
>> - return &vtd_as->as;
>> -}
>> -
>> static void mch_init_dmar(MCHPCIState *mch)
>> {
>> - PCIBus *pci_bus = PCI_BUS(qdev_get_parent_bus(DEVICE(mch)));
>> -
>> mch->iommu = INTEL_IOMMU_DEVICE(qdev_create(NULL, TYPE_INTEL_IOMMU_DEVICE));
>> object_property_add_child(OBJECT(mch), "intel-iommu",
>> OBJECT(mch->iommu), NULL);
>> qdev_init_nofail(DEVICE(mch->iommu));
>> - sysbus_mmio_map(SYS_BUS_DEVICE(mch->iommu), 0, Q35_HOST_BRIDGE_IOMMU_ADDR);
>> -
>> - pci_setup_iommu(pci_bus, q35_host_dma_iommu, mch->iommu);
>> }
>>
>> static void mch_realize(PCIDevice *d, Error **errp)
>>
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [Qemu-devel] [PATCH v4 0/4] enable iommu with -device
2016-06-14 7:19 [Qemu-devel] [PATCH v4 0/4] enable iommu with -device Marcel Apfelbaum
` (3 preceding siblings ...)
2016-06-14 7:19 ` [Qemu-devel] [PATCH v4 4/4] machine: remove iommu property Marcel Apfelbaum
@ 2016-06-24 5:47 ` Michael S. Tsirkin
2016-06-24 7:02 ` Marcel Apfelbaum
4 siblings, 1 reply; 9+ messages in thread
From: Michael S. Tsirkin @ 2016-06-24 5:47 UTC (permalink / raw)
To: Marcel Apfelbaum
Cc: qemu-devel, pbonzini, ehabkost, peterx, davidkiarie4, jan.kiszka,
bd.aviv, alex.williamson, armbru
On Tue, Jun 14, 2016 at 10:19:32AM +0300, Marcel Apfelbaum wrote:
> Create the iommu device with '-device intel-iommu' instead of '-machine,iommu=on'.
>
> The device is part of the machine properties because we wanted
> to ensure is created before any other PCI device.
>
> The alternative is to skip the bus_master_enable_region at
> the time the device is created. We can create this region
> at machine_done phase. (patch 1)
>
> Then we need to enable sysbus devices(*) for PC machines (patch 2),
> since intel-iommu is a sysbus device.
>
> Patch 3 moves the IOMMU init proces into iommu's realize function
> and allows the device creation in both ways.
This breaks make check on x86:
GTESTER check-qtest-ppc64
Broken pipe
GTester: last random seed: R02Sf26cb511ed533726cf1afef21a00bde4
/scm/qemu/tests/Makefile.include:668: recipe for target
'check-qtest-ppc64' failed
make: *** [check-qtest-ppc64] Error 1
> Finally patch 4 removes the iommu machine property.
>
> v3 -> v4:
> - Rebased on mst/pci tree (Michael).
>
> v2 -> v3:
> - Add machine_done notifier in pci_bus realize and remove it unrealize (Paolo).
> - Add comments for 'cannot_instantiate_with_device_add_yet' (Markus).
> - Split adding the -device iommu support and removing the iommu machine property (Michael).
> - Use pci_setup_iommu as before (Peter)
> - Mark intel-iommu as not hot-pluggable (Peter)
> - Rebased on master
>
> v1 -> v2:
> - Enable bus_master also on init if the guest OS already booted to enable hotplug (Paolo).
> - Add a machine_done notifier to PCIBus instead of adding functionality
> for q35 machine_done callback. The main reason is we don't want to replicate
> the code for all platforms that support PCI and is also cleaner this way.
> - Added 'cannot_instantiate_with_device_add_yet' to sysbus devices that lead
> to crashes if added with -device.
> - Rebased on master
>
>
> (*) Creates a new problem since we have now a bunch of
> new devices that can be created with -device on Q35:
> name "q35-pcihost", bus System
> name "sysbus-ohci", bus System, desc "OHCI USB Controller"
> name "allwinner-ahci", bus System
> name "cfi.pflash01", bus System
> name "esp", bus System
> name "SUNW,fdtwo", bus System
> name "sysbus-ahci", bus System
> name "sysbus-fdc", bus System
> name "vfio-amd-xgbe", bus System, desc "VFIO AMD XGBE"
> name "vfio-calxeda-xgmac", bus System, desc "VFIO Calxeda XGMAC"
> name "virtio-mmio", bus System
> name "fw_cfg", bus System
> name "fw_cfg_io", bus System
> name "fw_cfg_mem", bus System
> name "generic-sdhci", bus System
> name "hpet", bus System
> name "i440FX-pcihost", bus System
> name "intel-iommu", bus System
> name "ioapic", bus System
> name "isabus-bridge", bus System
> name "kvm-ioapic", bus System
> name "kvmclock", bus System
> name "kvmvapic", bus System
> name "pxb-host", bus System
>
> Took care of the ones creating immediate issues (like crashes) by marking them
> as 'cannot_instantiate_with_device_add_yet'. I didn't mark them all because:
> - libvirt will mask them anyway
> - some of them have already a "protection" in place
> - it is possible that some of them can be actually used with -device on other platform.
> - those are not 'interesting' scenarios.
> If somebody spots devices in the list that cannot be added with -device on any platform
> please let me know and I'll mark them.
>
>
> Thanks,
> Marcel
>
> Marcel Apfelbaum (4):
> hw/pci: delay bus_master_enable_region initialization
> q35: allow dynamic sysbus
> hw/iommu: enable iommu with -device
> machine: remove iommu property
>
> hw/core/machine.c | 20 ------------------
> hw/i386/intel_iommu.c | 16 +++++++++++++++
> hw/i386/pc_q35.c | 2 +-
> hw/pci-bridge/pci_expander_bridge.c | 2 ++
> hw/pci-host/piix.c | 2 ++
> hw/pci-host/q35.c | 31 +++-------------------------
> hw/pci/pci.c | 41 +++++++++++++++++++++++++++++--------
> include/hw/pci-host/q35.h | 1 -
> include/hw/pci/pci_bus.h | 2 ++
> include/sysemu/sysemu.h | 1 +
> qemu-options.hx | 3 ---
> vl.c | 5 +++++
> 12 files changed, 64 insertions(+), 62 deletions(-)
>
> --
> 2.4.3
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [Qemu-devel] [PATCH v4 0/4] enable iommu with -device
2016-06-24 5:47 ` [Qemu-devel] [PATCH v4 0/4] enable iommu with -device Michael S. Tsirkin
@ 2016-06-24 7:02 ` Marcel Apfelbaum
0 siblings, 0 replies; 9+ messages in thread
From: Marcel Apfelbaum @ 2016-06-24 7:02 UTC (permalink / raw)
To: Michael S. Tsirkin
Cc: qemu-devel, pbonzini, ehabkost, peterx, davidkiarie4, jan.kiszka,
bd.aviv, alex.williamson, armbru
On 06/24/2016 08:47 AM, Michael S. Tsirkin wrote:
> On Tue, Jun 14, 2016 at 10:19:32AM +0300, Marcel Apfelbaum wrote:
>> Create the iommu device with '-device intel-iommu' instead of '-machine,iommu=on'.
>>
>> The device is part of the machine properties because we wanted
>> to ensure is created before any other PCI device.
>>
>> The alternative is to skip the bus_master_enable_region at
>> the time the device is created. We can create this region
>> at machine_done phase. (patch 1)
>>
>> Then we need to enable sysbus devices(*) for PC machines (patch 2),
>> since intel-iommu is a sysbus device.
>>
>> Patch 3 moves the IOMMU init proces into iommu's realize function
>> and allows the device creation in both ways.
>
>
>
> This breaks make check on x86:
>
> GTESTER check-qtest-ppc64
> Broken pipe
> GTester: last random seed: R02Sf26cb511ed533726cf1afef21a00bde4
> /scm/qemu/tests/Makefile.include:668: recipe for target
> 'check-qtest-ppc64' failed
> make: *** [check-qtest-ppc64] Error 1
>
I am sorry for that.
I'll take care of it and re-post.
Thanks,
Marcel
>
>> Finally patch 4 removes the iommu machine property.
>>
>> v3 -> v4:
>> - Rebased on mst/pci tree (Michael).
>>
>> v2 -> v3:
>> - Add machine_done notifier in pci_bus realize and remove it unrealize (Paolo).
>> - Add comments for 'cannot_instantiate_with_device_add_yet' (Markus).
>> - Split adding the -device iommu support and removing the iommu machine property (Michael).
>> - Use pci_setup_iommu as before (Peter)
>> - Mark intel-iommu as not hot-pluggable (Peter)
>> - Rebased on master
>>
>> v1 -> v2:
>> - Enable bus_master also on init if the guest OS already booted to enable hotplug (Paolo).
>> - Add a machine_done notifier to PCIBus instead of adding functionality
>> for q35 machine_done callback. The main reason is we don't want to replicate
>> the code for all platforms that support PCI and is also cleaner this way.
>> - Added 'cannot_instantiate_with_device_add_yet' to sysbus devices that lead
>> to crashes if added with -device.
>> - Rebased on master
>>
>>
>> (*) Creates a new problem since we have now a bunch of
>> new devices that can be created with -device on Q35:
>> name "q35-pcihost", bus System
>> name "sysbus-ohci", bus System, desc "OHCI USB Controller"
>> name "allwinner-ahci", bus System
>> name "cfi.pflash01", bus System
>> name "esp", bus System
>> name "SUNW,fdtwo", bus System
>> name "sysbus-ahci", bus System
>> name "sysbus-fdc", bus System
>> name "vfio-amd-xgbe", bus System, desc "VFIO AMD XGBE"
>> name "vfio-calxeda-xgmac", bus System, desc "VFIO Calxeda XGMAC"
>> name "virtio-mmio", bus System
>> name "fw_cfg", bus System
>> name "fw_cfg_io", bus System
>> name "fw_cfg_mem", bus System
>> name "generic-sdhci", bus System
>> name "hpet", bus System
>> name "i440FX-pcihost", bus System
>> name "intel-iommu", bus System
>> name "ioapic", bus System
>> name "isabus-bridge", bus System
>> name "kvm-ioapic", bus System
>> name "kvmclock", bus System
>> name "kvmvapic", bus System
>> name "pxb-host", bus System
>>
>> Took care of the ones creating immediate issues (like crashes) by marking them
>> as 'cannot_instantiate_with_device_add_yet'. I didn't mark them all because:
>> - libvirt will mask them anyway
>> - some of them have already a "protection" in place
>> - it is possible that some of them can be actually used with -device on other platform.
>> - those are not 'interesting' scenarios.
>> If somebody spots devices in the list that cannot be added with -device on any platform
>> please let me know and I'll mark them.
>>
>>
>> Thanks,
>> Marcel
>>
>> Marcel Apfelbaum (4):
>> hw/pci: delay bus_master_enable_region initialization
>> q35: allow dynamic sysbus
>> hw/iommu: enable iommu with -device
>> machine: remove iommu property
>>
>> hw/core/machine.c | 20 ------------------
>> hw/i386/intel_iommu.c | 16 +++++++++++++++
>> hw/i386/pc_q35.c | 2 +-
>> hw/pci-bridge/pci_expander_bridge.c | 2 ++
>> hw/pci-host/piix.c | 2 ++
>> hw/pci-host/q35.c | 31 +++-------------------------
>> hw/pci/pci.c | 41 +++++++++++++++++++++++++++++--------
>> include/hw/pci-host/q35.h | 1 -
>> include/hw/pci/pci_bus.h | 2 ++
>> include/sysemu/sysemu.h | 1 +
>> qemu-options.hx | 3 ---
>> vl.c | 5 +++++
>> 12 files changed, 64 insertions(+), 62 deletions(-)
>>
>> --
>> 2.4.3
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2016-06-24 7:02 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-06-14 7:19 [Qemu-devel] [PATCH v4 0/4] enable iommu with -device Marcel Apfelbaum
2016-06-14 7:19 ` [Qemu-devel] [PATCH v4 1/4] hw/pci: delay bus_master_enable_region initialization Marcel Apfelbaum
2016-06-14 7:19 ` [Qemu-devel] [PATCH v4 2/4] q35: allow dynamic sysbus Marcel Apfelbaum
2016-06-14 7:19 ` [Qemu-devel] [PATCH v4 3/4] hw/iommu: enable iommu with -device Marcel Apfelbaum
2016-06-21 16:54 ` Paolo Bonzini
2016-06-21 18:56 ` Marcel Apfelbaum
2016-06-14 7:19 ` [Qemu-devel] [PATCH v4 4/4] machine: remove iommu property Marcel Apfelbaum
2016-06-24 5:47 ` [Qemu-devel] [PATCH v4 0/4] enable iommu with -device Michael S. Tsirkin
2016-06-24 7:02 ` Marcel Apfelbaum
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).