On Thu, Sep 23, 2021 at 2:53 AM Damien Hedde <damien.he...@greensocs.com> wrote: > > Add an early check to test if the requested sysbus device type > is allowed by the current machine before creating the device. This > impacts both -device cli option and device_add qmp command. > > Before this patch, the check was done well after the device has > been created (in a machine init done notifier). We can now report > the error right away. > > Signed-off-by: Damien Hedde <damien.he...@greensocs.com>
Reviewed-by: Alistair Francis <alistair.fran...@wdc.com> Alistair > --- > softmmu/qdev-monitor.c | 11 +++++++++++ > 1 file changed, 11 insertions(+) > > diff --git a/softmmu/qdev-monitor.c b/softmmu/qdev-monitor.c > index 47ccd90be8..f1c9242855 100644 > --- a/softmmu/qdev-monitor.c > +++ b/softmmu/qdev-monitor.c > @@ -40,6 +40,7 @@ > #include "qemu/cutils.h" > #include "hw/qdev-properties.h" > #include "hw/clock.h" > +#include "hw/boards.h" > > /* > * Aliases were a bad idea from the start. Let's keep them > @@ -268,6 +269,16 @@ static DeviceClass *qdev_get_device_class(const char > **driver, Error **errp) > return NULL; > } > > + if (object_class_dynamic_cast(oc, TYPE_SYS_BUS_DEVICE)) { > + /* sysbus devices need to be allowed by the machine */ > + MachineClass *mc = > MACHINE_CLASS(object_get_class(qdev_get_machine())); > + if (!machine_class_is_dynamic_sysbus_dev_allowed(mc, *driver)) { > + error_setg(errp, "'%s' is not an allowed pluggable sysbus device > " > + " type for the machine", *driver); > + return NULL; > + } > + } > + > return dc; > } > > -- > 2.33.0 > >