Message ID | 20210922161405.140018-9-damien.hedde@greensocs.com |
---|---|
State | New |
Headers | show |
Series | Initial support for machine creation via QMP | expand |
On Thu, Sep 23, 2021 at 2:53 AM Damien Hedde <damien.hedde@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.hedde@greensocs.com> Reviewed-by: Alistair Francis <alistair.francis@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 > >
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; }
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.hedde@greensocs.com> --- softmmu/qdev-monitor.c | 11 +++++++++++ 1 file changed, 11 insertions(+)