Am 16.11.2010 00:24, Alex Williamson wrote: > On Tue, 2010-11-16 at 00:11 +0100, Jan Kiszka wrote: >> Am 16.11.2010 00:06, Alex Williamson wrote: >>> Use register_device_unmigratable() to declare ourselves as >>> non-migratable. >>> >>> Signed-off-by: Alex Williamson <alex.williamson@xxxxxxxxxx> >>> --- >>> >>> v2: Use dummy vmsd instead of dummy save_state >>> >>> hw/device-assignment.c | 10 ++++++++++ >>> 1 files changed, 10 insertions(+), 0 deletions(-) >>> >>> diff --git a/hw/device-assignment.c b/hw/device-assignment.c >>> index bde231d..154bb1a 100644 >>> --- a/hw/device-assignment.c >>> +++ b/hw/device-assignment.c >>> @@ -1434,6 +1434,10 @@ static void assigned_dev_unregister_msix_mmio(AssignedDevice *dev) >>> dev->msix_table_page = NULL; >>> } >>> >>> +static const VMStateDescription vmstate_assigned_device = { >>> + .name = "pci-assign" >>> +}; >>> + >>> static int assigned_initfn(struct PCIDevice *pci_dev) >>> { >>> AssignedDevice *dev = DO_UPCAST(AssignedDevice, dev, pci_dev); >>> @@ -1490,6 +1494,11 @@ static int assigned_initfn(struct PCIDevice *pci_dev) >>> >>> assigned_dev_load_option_rom(dev); >>> QLIST_INSERT_HEAD(&devs, dev, next); >>> + >>> + /* Register a vmsd so that we can mark it unmigratable. */ >>> + vmstate_register(&dev->dev.qdev, 0, &vmstate_assigned_device, dev); >> >> Almost: You can register this vmstate description via assign_info >> (.qdev.vmsd = ....). > > Only if you have some other suggestion on where to call > register_device_unmigratable rather than init. qdev_init looks like > this: > > int qdev_init(DeviceState *dev) > { > int rc; > > assert(dev->state == DEV_STATE_CREATED); > rc = dev->info->init(dev, dev->info); > if (rc < 0) { > qdev_free(dev); > return rc; > } > qemu_register_reset(qdev_reset, dev); > if (dev->info->vmsd) { > vmstate_register_with_alias_id(dev, -1, dev->info->vmsd, dev, > dev->instance_id_alias, > dev->alias_required_for_version); > } > dev->state = DEV_STATE_INITIALIZED; > return 0; > } > > So the save state entry hasn't been inserted yet for me to attach the > no_migrate flag to from init :( I see. I think that's a sign register_device_unmigratable should be obsoleted as well by introducing no_migrate to vmstate (one day, vmsd == NULL could replace this flag). BTW, ivshmem could resolve its need for dynamic no_migrate by introducing two device types: one that is migratable (ivshmem-master) and one that isn't (normal peer devices). Jan
Attachment:
signature.asc
Description: OpenPGP digital signature