mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-02 15:23:53 -06:00
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>
This commit is contained in:
parent
3e7757301c
commit
9d9babf78d
7 changed files with 51 additions and 27 deletions
|
@ -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 *);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue