aboutsummaryrefslogtreecommitdiff
path: root/hw/core
diff options
context:
space:
mode:
authorDamien Hedde <damien.hedde@greensocs.com>2021-10-29 16:22:56 +0200
committerPhilippe Mathieu-Daudé <philmd@redhat.com>2021-11-01 19:44:11 +0100
commitb5fdf4102fa3ecc35e7b84a398ccb3e00ca08944 (patch)
treeb44087ebe5ff4c7de51029ec17e2d92990e69bbb /hw/core
parent9e8e393bb795ff6c6963c47376369e90b1d40467 (diff)
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')
-rw-r--r--hw/core/machine.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/hw/core/machine.c b/hw/core/machine.c
index dc15f5f9e5..7c4004ac5a 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;