mirror of
https://github.com/qemu/qemu.git
synced 2026-04-05 21:46:25 +00:00
migration: Rename MIG_EVENT_PRECOPY_* to MIG_EVENT_*
All three events are shared between precopy and postcopy, rather than precopy specific. For example, both precopy and postcopy will go through a SETUP process. Meanwhile, both FAILED and DONE notifiers will be notified for either precopy or postcopy on completions / failures. Rename them to make them match what they do, and shorter. Reviewed-by: Fabiano Rosas <farosas@suse.de> Acked-by: Stefan Hajnoczi <stefanha@redhat.com> Signed-off-by: Peter Xu <peterx@redhat.com> Link: https://lore.kernel.org/qemu-devel/20260126213614.3815900-6-peterx@redhat.com [fixed-up entry in scsi-disk.c that got merged first] Signed-off-by: Fabiano Rosas <farosas@suse.de>
This commit is contained in:
@@ -774,7 +774,7 @@ static void vm_change_state_handler(void *opaque, bool running,
|
||||
static int kvm_arm_gicv3_notifier(NotifierWithReturn *notifier,
|
||||
MigrationEvent *e, Error **errp)
|
||||
{
|
||||
if (e->type == MIG_EVENT_PRECOPY_DONE) {
|
||||
if (e->type == MIG_EVENT_DONE) {
|
||||
GICv3State *s = container_of(notifier, GICv3State, cpr_notifier);
|
||||
return kvm_device_access(s->dev_fd, KVM_DEV_ARM_VGIC_GRP_CTRL,
|
||||
KVM_DEV_ARM_VGIC_SAVE_PENDING_TABLES,
|
||||
|
||||
@@ -3789,7 +3789,7 @@ static void virtio_net_handle_migration_primary(VirtIONet *n, MigrationEvent *e)
|
||||
|
||||
should_be_hidden = qatomic_read(&n->failover_primary_hidden);
|
||||
|
||||
if (e->type == MIG_EVENT_PRECOPY_SETUP && !should_be_hidden) {
|
||||
if (e->type == MIG_EVENT_SETUP && !should_be_hidden) {
|
||||
if (failover_unplug_primary(n, dev)) {
|
||||
vmstate_unregister(VMSTATE_IF(dev), qdev_get_vmsd(dev), dev);
|
||||
qapi_event_send_unplug_primary(dev->id);
|
||||
@@ -3797,7 +3797,7 @@ static void virtio_net_handle_migration_primary(VirtIONet *n, MigrationEvent *e)
|
||||
} else {
|
||||
warn_report("couldn't unplug primary device");
|
||||
}
|
||||
} else if (e->type == MIG_EVENT_PRECOPY_FAILED) {
|
||||
} else if (e->type == MIG_EVENT_FAILED) {
|
||||
/* We already unplugged the device let's plug it back */
|
||||
if (!failover_replug_primary(n, dev, &err)) {
|
||||
if (err) {
|
||||
|
||||
@@ -2747,14 +2747,14 @@ static SCSIRequest *scsi_new_request(SCSIDevice *d, uint32_t tag, uint32_t lun,
|
||||
static int scsi_block_migration_notifier(NotifierWithReturn *notifier,
|
||||
MigrationEvent *e, Error **errp)
|
||||
{
|
||||
if (e->type == MIG_EVENT_PRECOPY_FAILED) {
|
||||
if (e->type == MIG_EVENT_FAILED) {
|
||||
SCSIDiskState *s =
|
||||
container_of(notifier, SCSIDiskState, migration_notifier);
|
||||
SCSIDevice *d = &s->qdev;
|
||||
Error *local_err = NULL;
|
||||
|
||||
if (!scsi_generic_pr_state_preempt(d, &local_err)) {
|
||||
/* MIG_EVENT_PRECOPY_FAILED cannot fail, so just warn */
|
||||
/* MIG_EVENT_FAILED cannot fail, so just warn */
|
||||
error_prepend(&local_err, "scsi-block migration rollback: ");
|
||||
warn_report_err(local_err);
|
||||
}
|
||||
|
||||
@@ -137,7 +137,7 @@ static int vfio_cpr_fail_notifier(NotifierWithReturn *notifier,
|
||||
container_of(notifier, VFIOLegacyContainer, cpr.transfer_notifier);
|
||||
VFIOContainer *bcontainer = VFIO_IOMMU(container);
|
||||
|
||||
if (e->type != MIG_EVENT_PRECOPY_FAILED) {
|
||||
if (e->type != MIG_EVENT_FAILED) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
int vfio_cpr_reboot_notifier(NotifierWithReturn *notifier,
|
||||
MigrationEvent *e, Error **errp)
|
||||
{
|
||||
if (e->type == MIG_EVENT_PRECOPY_SETUP &&
|
||||
if (e->type == MIG_EVENT_SETUP &&
|
||||
!runstate_check(RUN_STATE_SUSPENDED) && !vm_get_suspended()) {
|
||||
|
||||
error_setg(errp,
|
||||
@@ -186,7 +186,7 @@ static int vfio_cpr_kvm_close_notifier(NotifierWithReturn *notifier,
|
||||
MigrationEvent *e,
|
||||
Error **errp)
|
||||
{
|
||||
if (e->type == MIG_EVENT_PRECOPY_DONE) {
|
||||
if (e->type == MIG_EVENT_DONE) {
|
||||
vfio_kvm_device_close();
|
||||
}
|
||||
return 0;
|
||||
@@ -272,9 +272,9 @@ static int vfio_cpr_pci_notifier(NotifierWithReturn *notifier,
|
||||
VFIOPCIDevice *vdev =
|
||||
container_of(notifier, VFIOPCIDevice, cpr.transfer_notifier);
|
||||
|
||||
if (e->type == MIG_EVENT_PRECOPY_SETUP) {
|
||||
if (e->type == MIG_EVENT_SETUP) {
|
||||
return vfio_cpr_set_msi_virq(vdev, errp, false);
|
||||
} else if (e->type == MIG_EVENT_PRECOPY_FAILED) {
|
||||
} else if (e->type == MIG_EVENT_FAILED) {
|
||||
return vfio_cpr_set_msi_virq(vdev, errp, true);
|
||||
}
|
||||
return 0;
|
||||
|
||||
@@ -917,10 +917,10 @@ static int vfio_migration_state_notifier(NotifierWithReturn *notifier,
|
||||
|
||||
trace_vfio_migration_state_notifier(vbasedev->name, e->type);
|
||||
|
||||
if (e->type == MIG_EVENT_PRECOPY_FAILED) {
|
||||
if (e->type == MIG_EVENT_FAILED) {
|
||||
/*
|
||||
* MigrationNotifyFunc may not return an error code and an Error
|
||||
* object for MIG_EVENT_PRECOPY_FAILED. Hence, report the error
|
||||
* object for MIG_EVENT_FAILED. Hence, report the error
|
||||
* locally and ignore the errp argument.
|
||||
*/
|
||||
ret = vfio_migration_set_state_or_reset(vbasedev,
|
||||
|
||||
@@ -62,19 +62,15 @@ bool migration_thread_is_self(void);
|
||||
/*
|
||||
* Notifiers may receive events in any of the following orders:
|
||||
*
|
||||
* - MIG_EVENT_PRECOPY_SETUP [-> MIG_EVENT_POSTCOPY_START]
|
||||
* -> MIG_EVENT_PRECOPY_DONE
|
||||
*
|
||||
* - MIG_EVENT_PRECOPY_SETUP [-> MIG_EVENT_POSTCOPY_START]
|
||||
* -> MIG_EVENT_PRECOPY_FAILED
|
||||
*
|
||||
* - MIG_EVENT_PRECOPY_FAILED
|
||||
* - MIG_EVENT_SETUP [-> MIG_EVENT_POSTCOPY_START] -> MIG_EVENT_DONE
|
||||
* - MIG_EVENT_SETUP [-> MIG_EVENT_POSTCOPY_START] -> MIG_EVENT_FAILED
|
||||
* - MIG_EVENT_FAILED
|
||||
*/
|
||||
typedef enum MigrationEventType {
|
||||
MIG_EVENT_PRECOPY_SETUP,
|
||||
MIG_EVENT_PRECOPY_DONE,
|
||||
MIG_EVENT_PRECOPY_FAILED,
|
||||
MIG_EVENT_SETUP,
|
||||
MIG_EVENT_POSTCOPY_START,
|
||||
MIG_EVENT_DONE,
|
||||
MIG_EVENT_FAILED,
|
||||
MIG_EVENT_MAX
|
||||
} MigrationEventType;
|
||||
|
||||
@@ -84,7 +80,7 @@ typedef struct MigrationEvent {
|
||||
|
||||
/*
|
||||
* A MigrationNotifyFunc may return an error code and an Error object,
|
||||
* but only when @e->type is MIG_EVENT_PRECOPY_SETUP. The code is an int
|
||||
* but only when @e->type is MIG_EVENT_SETUP. The code is an int
|
||||
* to allow for different failure modes and recovery actions.
|
||||
*/
|
||||
typedef int (*MigrationNotifyFunc)(NotifierWithReturn *notify,
|
||||
|
||||
@@ -164,7 +164,7 @@ static void cpr_exec_cb(void *opaque)
|
||||
err = NULL;
|
||||
|
||||
/* Note, we can go from state COMPLETED to FAILED */
|
||||
migration_call_notifiers(MIG_EVENT_PRECOPY_FAILED, NULL);
|
||||
migration_call_notifiers(MIG_EVENT_FAILED, NULL);
|
||||
|
||||
if (!migration_block_activate(&err)) {
|
||||
/* error was already reported */
|
||||
@@ -182,12 +182,12 @@ static int cpr_exec_notifier(NotifierWithReturn *notifier, MigrationEvent *e,
|
||||
{
|
||||
MigrationState *s = migrate_get_current();
|
||||
|
||||
if (e->type == MIG_EVENT_PRECOPY_DONE) {
|
||||
if (e->type == MIG_EVENT_DONE) {
|
||||
QEMUBH *cpr_exec_bh = qemu_bh_new(cpr_exec_cb, NULL);
|
||||
assert(s->state == MIGRATION_STATUS_COMPLETED);
|
||||
qemu_bh_schedule(cpr_exec_bh);
|
||||
qemu_notify_event();
|
||||
} else if (e->type == MIG_EVENT_PRECOPY_FAILED) {
|
||||
} else if (e->type == MIG_EVENT_FAILED) {
|
||||
cpr_exec_unpersist_state();
|
||||
}
|
||||
return 0;
|
||||
|
||||
@@ -1337,7 +1337,7 @@ static void migration_cleanup(MigrationState *s)
|
||||
* migration completed successfully.
|
||||
*/
|
||||
if (!migration_has_failed(s)) {
|
||||
migration_call_notifiers(MIG_EVENT_PRECOPY_DONE, NULL);
|
||||
migration_call_notifiers(MIG_EVENT_DONE, NULL);
|
||||
}
|
||||
|
||||
yank_unregister_instance(MIGRATION_YANK_INSTANCE);
|
||||
@@ -1541,7 +1541,7 @@ int migration_call_notifiers(MigrationEventType type, Error **errp)
|
||||
notifier = (NotifierWithReturn *)elem->data;
|
||||
ret = notifier->notify(notifier, &e, errp);
|
||||
if (ret) {
|
||||
assert(type == MIG_EVENT_PRECOPY_SETUP);
|
||||
assert(type == MIG_EVENT_SETUP);
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
@@ -3331,7 +3331,7 @@ static void migration_iteration_finish(MigrationState *s)
|
||||
* Notify FAILED before starting VM, so that devices can invoke
|
||||
* necessary fallbacks before vCPUs run again.
|
||||
*/
|
||||
migration_call_notifiers(MIG_EVENT_PRECOPY_FAILED, NULL);
|
||||
migration_call_notifiers(MIG_EVENT_FAILED, NULL);
|
||||
|
||||
if (runstate_is_live(s->vm_old_state)) {
|
||||
if (!runstate_check(RUN_STATE_SHUTDOWN)) {
|
||||
@@ -3769,7 +3769,7 @@ void migration_start_outgoing(MigrationState *s)
|
||||
rate_limit = migrate_max_bandwidth();
|
||||
|
||||
/* Notify before starting migration thread */
|
||||
if (migration_call_notifiers(MIG_EVENT_PRECOPY_SETUP, &local_err)) {
|
||||
if (migration_call_notifiers(MIG_EVENT_SETUP, &local_err)) {
|
||||
goto fail;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -378,9 +378,9 @@ static int vdpa_net_migration_state_notifier(NotifierWithReturn *notifier,
|
||||
{
|
||||
VhostVDPAState *s = container_of(notifier, VhostVDPAState, migration_state);
|
||||
|
||||
if (e->type == MIG_EVENT_PRECOPY_SETUP) {
|
||||
if (e->type == MIG_EVENT_SETUP) {
|
||||
vhost_vdpa_net_log_global_enable(s, true);
|
||||
} else if (e->type == MIG_EVENT_PRECOPY_FAILED) {
|
||||
} else if (e->type == MIG_EVENT_FAILED) {
|
||||
vhost_vdpa_net_log_global_enable(s, false);
|
||||
}
|
||||
return 0;
|
||||
|
||||
@@ -583,13 +583,13 @@ static int migration_state_notifier(NotifierWithReturn *notifier,
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (e->type == MIG_EVENT_PRECOPY_SETUP) {
|
||||
if (e->type == MIG_EVENT_SETUP) {
|
||||
spice_server_migrate_start(spice_server);
|
||||
} else if (e->type == MIG_EVENT_PRECOPY_DONE ||
|
||||
} else if (e->type == MIG_EVENT_DONE ||
|
||||
e->type == MIG_EVENT_POSTCOPY_START) {
|
||||
spice_server_migrate_end(spice_server, true);
|
||||
spice_have_target_host = false;
|
||||
} else if (e->type == MIG_EVENT_PRECOPY_FAILED) {
|
||||
} else if (e->type == MIG_EVENT_FAILED) {
|
||||
spice_server_migrate_end(spice_server, false);
|
||||
spice_have_target_host = false;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user