* Ashijeet Acharya (ashijeetacha...@gmail.com) wrote: > Introduce checks for the unmigratable flag in the VMStateDescription > structs of respective devices when user attempts to add them. If the > "--only-migratable" was specified, all unmigratable devices will > rightly fail to add. This feature is made compatible for both "-device" > and "-usbdevice" command line options and covers their hmp and qmp > counterparts as well. > > Signed-off-by: Ashijeet Acharya <ashijeetacha...@gmail.com> > --- > hw/usb/bus.c | 15 +++++++++++++++ > qdev-monitor.c | 9 +++++++++ > 2 files changed, 24 insertions(+) > > diff --git a/hw/usb/bus.c b/hw/usb/bus.c > index 25913ad..8796788 100644 > --- a/hw/usb/bus.c > +++ b/hw/usb/bus.c > @@ -8,6 +8,7 @@ > #include "monitor/monitor.h" > #include "trace.h" > #include "qemu/cutils.h" > +#include "migration/migration.h" > > static void usb_bus_dev_print(Monitor *mon, DeviceState *qdev, int indent); > > @@ -686,6 +687,8 @@ USBDevice *usbdevice_create(const char *cmdline) > const char *params; > int len; > USBDevice *dev; > + ObjectClass *klass; > + DeviceClass *dc; > > params = strchr(cmdline,':'); > if (params) { > @@ -720,6 +723,18 @@ USBDevice *usbdevice_create(const char *cmdline) > return NULL; > } > > + klass = object_class_by_name(f->name);
> + dc = DEVICE_CLASS(klass); Would qdev_get_device_class work here instead of that pair? (I was thinking you needed to check klass to make sure it wasn't null) > + if (only_migratable) { > + if (dc->vmsd->unmigratable) { > + error_report("Device %s is not migratable, but --only-migratable > " > + "was specified", f->name); > + return NULL; > + } > + } > + > if (f->usbdevice_init) { > dev = f->usbdevice_init(bus, params); > } else { > diff --git a/qdev-monitor.c b/qdev-monitor.c > index c73410c..81d01df 100644 > --- a/qdev-monitor.c > +++ b/qdev-monitor.c > @@ -29,6 +29,7 @@ > #include "qemu/error-report.h" > #include "qemu/help_option.h" > #include "sysemu/block-backend.h" > +#include "migration/migration.h" > > /* > * Aliases were a bad idea from the start. Let's keep them > @@ -577,6 +578,14 @@ DeviceState *qdev_device_add(QemuOpts *opts, Error > **errp) > return NULL; > } > > + if (only_migratable) { > + if (dc->vmsd->unmigratable) { > + error_setg(errp, "Device %s is not migratable, but " > + "--only-migratable was specified", driver); > + return NULL; > + } > + } > + > /* find bus */ > path = qemu_opt_get(opts, "bus"); > if (path != NULL) { > -- > 2.6.2 > -- Dr. David Alan Gilbert / dgilb...@redhat.com / Manchester, UK