From: Joerg Roedel <[email protected]> Add a property to the QEMU MachineState to specify the default plane to send device interrupts to.
Signed-off-by: Joerg Roedel <[email protected]> --- hw/core/machine.c | 22 ++++++++++++++++++++++ include/hw/core/boards.h | 3 +++ include/hw/core/qdev.h | 1 + 3 files changed, 26 insertions(+) diff --git a/hw/core/machine.c b/hw/core/machine.c index 0aa77a57e956..62ea86512645 100644 --- a/hw/core/machine.c +++ b/hw/core/machine.c @@ -1218,6 +1218,7 @@ static void machine_initfn(Object *obj) ms->kernel_cmdline = g_strdup(""); ms->ram_size = mc->default_ram_size; ms->maxram_size = mc->default_ram_size; + ms->device_plane = 0; if (mc->nvdimm_supported) { ms->nvdimms_state = g_new0(NVDIMMState, 1); @@ -1253,6 +1254,12 @@ static void machine_initfn(Object *obj) "ACPI Serial Port Console Redirection " "Table (spcr)"); + /* Default Device Plane */ + object_property_add_uint8_ptr(obj, "device-plane", &ms->device_plane, + OBJ_PROP_FLAG_READWRITE); + object_property_set_description(obj, "device-plane", + "Default plane to receive device IRQs"); + /* default to mc->default_cpus */ ms->smp.cpus = mc->default_cpus; ms->smp.max_cpus = mc->default_cpus; @@ -1675,6 +1682,12 @@ void machine_run_board_init(MachineState *machine, const char *mem_path, Error * "on", false); } + if (machine->device_plane >= accel_nr_planes(machine)) { + error_report("Invalid plane specified: %d (highest supported plane: %d)", + machine->device_plane, accel_nr_planes(machine) - 1); + exit(EXIT_FAILURE); + } + accel_init_interfaces(ACCEL_GET_CLASS(machine->accelerator)); machine_class->init(machine); phase_advance(PHASE_MACHINE_INITIALIZED); @@ -1761,6 +1774,15 @@ void qdev_machine_creation_done(void) register_global_state(); } +uint8_t qdev_default_plane(void) +{ + if (current_machine != NULL) { + return current_machine->device_plane; + } else { + return 0; + } +} + static const TypeInfo machine_info = { .name = TYPE_MACHINE, .parent = TYPE_OBJECT, diff --git a/include/hw/core/boards.h b/include/hw/core/boards.h index b8dad0a1074d..d2d1336939ed 100644 --- a/include/hw/core/boards.h +++ b/include/hw/core/boards.h @@ -447,6 +447,9 @@ struct MachineState { * Set to false by default for all regular use. */ bool new_accel_vmfd_on_reset; + + /* Default plane to receive device IRQs */ + uint8_t device_plane; }; /* diff --git a/include/hw/core/qdev.h b/include/hw/core/qdev.h index f99a8979ccb1..83ad1d5f1550 100644 --- a/include/hw/core/qdev.h +++ b/include/hw/core/qdev.h @@ -560,6 +560,7 @@ void qdev_simple_device_unplug_cb(HotplugHandler *hotplug_dev, DeviceState *dev, Error **errp); void qdev_machine_creation_done(void); bool qdev_machine_modified(void); +uint8_t qdev_default_plane(void); /** * qdev_add_unplug_blocker: Add an unplug blocker to a device -- 2.53.0
