On Thu, Dec 15, 2016 at 9:35 PM, Dr. David Alan Gilbert <dgilb...@redhat.com> wrote: > * 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?
No, because I believe that is defined as static in qdev_monitor.c which was one of the reasons I faced a difficulty with this one. > (I was thinking you needed to check klass to make sure it wasn't null) Right. I will include the check in v2. Ashijeet > >> + 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