diff options
| author | Steve Sistare <steven.sistare@oracle.com> | 2024-02-22 09:28:30 -0800 |
|---|---|---|
| committer | Peter Xu <peterx@redhat.com> | 2024-02-28 11:31:28 +0800 |
| commit | 9d9babf78d8f0a2f26b8dd5de3767bd4a4e2020e (patch) | |
| tree | 81614f1d26e880cb76cd8d2b4157e7ea1b52adb7 /include/migration/misc.h | |
| parent | 3e7757301cc93eaca47cad855630467804b1a2a4 (diff) | |
| download | focaccia-qemu-9d9babf78d8f0a2f26b8dd5de3767bd4a4e2020e.tar.gz focaccia-qemu-9d9babf78d8f0a2f26b8dd5de3767bd4a4e2020e.zip | |
migration: MigrationEvent for notifiers
Passing MigrationState to notifiers is unsound because they could access unstable migration state internals or even modify the state. Instead, pass the minimal info needed in a new MigrationEvent struct, which could be extended in the future if needed. Suggested-by: Peter Xu <peterx@redhat.com> Signed-off-by: Steve Sistare <steven.sistare@oracle.com> Reviewed-by: Peter Xu <peterx@redhat.com> Reviewed-by: David Hildenbrand <david@redhat.com> Link: https://lore.kernel.org/r/1708622920-68779-5-git-send-email-steven.sistare@oracle.com Signed-off-by: Peter Xu <peterx@redhat.com>
Diffstat (limited to 'include/migration/misc.h')
| -rw-r--r-- | include/migration/misc.h | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/include/migration/misc.h b/include/migration/misc.h index b62e351d96..9e4abae97f 100644 --- a/include/migration/misc.h +++ b/include/migration/misc.h @@ -60,10 +60,31 @@ void migration_object_init(void); void migration_shutdown(void); bool migration_is_idle(void); bool migration_is_active(MigrationState *); + +typedef enum MigrationEventType { + MIG_EVENT_PRECOPY_SETUP, + MIG_EVENT_PRECOPY_DONE, + MIG_EVENT_PRECOPY_FAILED, + MIG_EVENT_MAX +} MigrationEventType; + +typedef struct MigrationEvent { + MigrationEventType type; +} MigrationEvent; + +/* + * Register the notifier @notify to be called when a migration event occurs + * for MIG_MODE_NORMAL, as specified by the MigrationEvent passed to @func. + * Notifiers may receive events in any of the following orders: + * - MIG_EVENT_PRECOPY_SETUP -> MIG_EVENT_PRECOPY_DONE + * - MIG_EVENT_PRECOPY_SETUP -> MIG_EVENT_PRECOPY_FAILED + * - MIG_EVENT_PRECOPY_FAILED + */ void migration_add_notifier(NotifierWithReturn *notify, NotifierWithReturnFunc func); + void migration_remove_notifier(NotifierWithReturn *notify); -void migration_call_notifiers(MigrationState *s); +void migration_call_notifiers(MigrationState *s, MigrationEventType type); bool migration_in_setup(MigrationState *); bool migration_has_finished(MigrationState *); bool migration_has_failed(MigrationState *); |