mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-06 01:03:55 -06:00
migration: Replace QemuSemaphore with QemuEvent
pause_event can utilize qemu_event_reset() to discard events. Signed-off-by: Akihiko Odaki <akihiko.odaki@daynix.com> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Link: https://lore.kernel.org/r/20250529-event-v5-7-53b285203794@daynix.com Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
5e2312f75a
commit
952691b7a6
2 changed files with 10 additions and 13 deletions
|
@ -1630,7 +1630,7 @@ void migration_cancel(void)
|
|||
}
|
||||
/* If the migration is paused, kick it out of the pause */
|
||||
if (old_state == MIGRATION_STATUS_PRE_SWITCHOVER) {
|
||||
qemu_sem_post(&s->pause_sem);
|
||||
qemu_event_set(&s->pause_event);
|
||||
}
|
||||
migrate_set_state(&s->state, old_state, MIGRATION_STATUS_CANCELLING);
|
||||
} while (s->state != MIGRATION_STATUS_CANCELLING);
|
||||
|
@ -2342,7 +2342,7 @@ void qmp_migrate_continue(MigrationStatus state, Error **errp)
|
|||
MigrationStatus_str(s->state));
|
||||
return;
|
||||
}
|
||||
qemu_sem_post(&s->pause_sem);
|
||||
qemu_event_set(&s->pause_event);
|
||||
}
|
||||
|
||||
int migration_rp_wait(MigrationState *s)
|
||||
|
@ -2911,21 +2911,18 @@ static bool migration_switchover_prepare(MigrationState *s)
|
|||
return true;
|
||||
}
|
||||
|
||||
/* Since leaving this state is not atomic with posting the semaphore
|
||||
/*
|
||||
* Since leaving this state is not atomic with setting the event
|
||||
* it's possible that someone could have issued multiple migrate_continue
|
||||
* and the semaphore is incorrectly positive at this point;
|
||||
* the docs say it's undefined to reinit a semaphore that's already
|
||||
* init'd, so use timedwait to eat up any existing posts.
|
||||
* and the event is incorrectly set at this point so reset it.
|
||||
*/
|
||||
while (qemu_sem_timedwait(&s->pause_sem, 1) == 0) {
|
||||
/* This block intentionally left blank */
|
||||
}
|
||||
qemu_event_reset(&s->pause_event);
|
||||
|
||||
/* Update [POSTCOPY_]ACTIVE to PRE_SWITCHOVER */
|
||||
migrate_set_state(&s->state, s->state, MIGRATION_STATUS_PRE_SWITCHOVER);
|
||||
bql_unlock();
|
||||
|
||||
qemu_sem_wait(&s->pause_sem);
|
||||
qemu_event_wait(&s->pause_event);
|
||||
|
||||
bql_lock();
|
||||
/*
|
||||
|
@ -4057,7 +4054,7 @@ static void migration_instance_finalize(Object *obj)
|
|||
qemu_mutex_destroy(&ms->qemu_file_lock);
|
||||
qemu_sem_destroy(&ms->wait_unplug_sem);
|
||||
qemu_sem_destroy(&ms->rate_limit_sem);
|
||||
qemu_sem_destroy(&ms->pause_sem);
|
||||
qemu_event_destroy(&ms->pause_event);
|
||||
qemu_sem_destroy(&ms->postcopy_pause_sem);
|
||||
qemu_sem_destroy(&ms->rp_state.rp_sem);
|
||||
qemu_sem_destroy(&ms->rp_state.rp_pong_acks);
|
||||
|
@ -4072,7 +4069,7 @@ static void migration_instance_init(Object *obj)
|
|||
ms->state = MIGRATION_STATUS_NONE;
|
||||
ms->mbps = -1;
|
||||
ms->pages_per_second = -1;
|
||||
qemu_sem_init(&ms->pause_sem, 0);
|
||||
qemu_event_init(&ms->pause_event, false);
|
||||
qemu_mutex_init(&ms->error_mutex);
|
||||
|
||||
migrate_params_init(&ms->parameters);
|
||||
|
|
|
@ -379,7 +379,7 @@ struct MigrationState {
|
|||
QemuSemaphore wait_unplug_sem;
|
||||
|
||||
/* Migration is paused due to pause-before-switchover */
|
||||
QemuSemaphore pause_sem;
|
||||
QemuEvent pause_event;
|
||||
|
||||
/* The semaphore is used to notify COLO thread that failover is finished */
|
||||
QemuSemaphore colo_exit_sem;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue