diff options
author | Damien Hedde <damien.hedde@greensocs.com> | 2021-10-29 16:22:56 +0200 |
---|---|---|
committer | Philippe Mathieu-Daudé <philmd@redhat.com> | 2021-11-01 19:44:11 +0100 |
commit | b5fdf4102fa3ecc35e7b84a398ccb3e00ca08944 (patch) | |
tree | b44087ebe5ff4c7de51029ec17e2d92990e69bbb /hw/core/machine.c | |
parent | 9e8e393bb795ff6c6963c47376369e90b1d40467 (diff) | |
download | qemu-b5fdf4102fa3ecc35e7b84a398ccb3e00ca08944.zip qemu-b5fdf4102fa3ecc35e7b84a398ccb3e00ca08944.tar.gz qemu-b5fdf4102fa3ecc35e7b84a398ccb3e00ca08944.tar.bz2 |
machine: add device_type_is_dynamic_sysbus function
Right now the allowance check for adding a sysbus device using
-device cli option (or device_add qmp command) is done well after
the device has been created. It is done during the machine init done
notifier: machine_init_notify() in hw/core/machine.c
This new function will allow us to do the check at the right time and
issue an error if it fails.
Also make device_is_dynamic_sysbus() use the new function.
Signed-off-by: Damien Hedde <damien.hedde@greensocs.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
Acked-by: Eduardo Habkost <ehabkost@redhat.com>
Message-Id: <20211029142258.484907-2-damien.hedde@greensocs.com>
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Diffstat (limited to 'hw/core/machine.c')
-rw-r--r-- | hw/core/machine.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/hw/core/machine.c b/hw/core/machine.c index dc15f5f..7c4004a 100644 --- a/hw/core/machine.c +++ b/hw/core/machine.c @@ -548,18 +548,25 @@ void machine_class_allow_dynamic_sysbus_dev(MachineClass *mc, const char *type) bool device_is_dynamic_sysbus(MachineClass *mc, DeviceState *dev) { - bool allowed = false; - strList *wl; Object *obj = OBJECT(dev); if (!object_dynamic_cast(obj, TYPE_SYS_BUS_DEVICE)) { return false; } + return device_type_is_dynamic_sysbus(mc, object_get_typename(obj)); +} + +bool device_type_is_dynamic_sysbus(MachineClass *mc, const char *type) +{ + bool allowed = false; + strList *wl; + ObjectClass *klass = object_class_by_name(type); + for (wl = mc->allowed_dynamic_sysbus_devices; !allowed && wl; wl = wl->next) { - allowed |= !!object_dynamic_cast(obj, wl->value); + allowed |= !!object_class_dynamic_cast(klass, wl->value); } return allowed; |