mirror of
https://github.com/mii443/qemu.git
synced 2025-08-22 23:25:48 +00:00
Merge tag 'migration-next-pull-request' of https://gitlab.com/peterx/qemu into staging
Migration pull request - Fabiano's fixed-ram patches (1-5 only) - Peter's cleanups on multifd tls IOC referencing - Steve's cpr patches for vfio (migration patches only) - Fabiano's fix on mbps stats racing with COMPLETE state - Fabiano's fix on return path thread hang # -----BEGIN PGP SIGNATURE----- # # iIcEABYKADAWIQS5GE3CDMRX2s990ak7X8zN86vXBgUCZd7AbhIccGV0ZXJ4QHJl # ZGhhdC5jb20ACgkQO1/MzfOr1wbg0gDyA3Vg3pIqCJ+u+hLZ+QKxY/pnu8Y5kF+E # HK2IdslQUQD+OX4ATUnl+CGMiVX9fjs1fKx0Z0Qetq8gC1YJF13yuA0= # =P2QF # -----END PGP SIGNATURE----- # gpg: Signature made Wed 28 Feb 2024 05:11:10 GMT # gpg: using EDDSA key B9184DC20CC457DACF7DD1A93B5FCCCDF3ABD706 # gpg: issuer "peterx@redhat.com" # gpg: Good signature from "Peter Xu <xzpeter@gmail.com>" [marginal] # gpg: aka "Peter Xu <peterx@redhat.com>" [marginal] # gpg: WARNING: This key is not certified with sufficiently trusted signatures! # gpg: It is not certain that the signature belongs to the owner. # Primary key fingerprint: B918 4DC2 0CC4 57DA CF7D D1A9 3B5F CCCD F3AB D706 * tag 'migration-next-pull-request' of https://gitlab.com/peterx/qemu: (25 commits) migration: Use migrate_has_error() in close_return_path_on_source() migration: Join the return path thread before releasing to_dst_file migration: Fix qmp_query_migrate mbps value migration: options incompatible with cpr migration: update cpr-reboot description migration: stop vm for cpr migration: notifier error checking migration: refactor migrate_fd_connect failures migration: per-mode notifiers migration: MigrationNotifyFunc migration: remove postcopy_after_devices migration: MigrationEvent for notifiers migration: convert to NotifierWithReturn migration: remove error from notifier data notify: pass error to notifier with return migration/multifd: Drop unnecessary helper to destroy IOC migration/multifd: Cleanup outgoing_args in state destroy migration/multifd: Make multifd_channel_connect() return void migration/multifd: Drop registered_yank migration/multifd: Cleanup TLS iochannel referencing ... Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
@ -62,7 +62,7 @@ typedef struct VFIORegion {
|
||||
typedef struct VFIOMigration {
|
||||
struct VFIODevice *vbasedev;
|
||||
VMChangeStateEntry *vm_state;
|
||||
Notifier migration_state;
|
||||
NotifierWithReturn migration_state;
|
||||
uint32_t device_state;
|
||||
int data_fd;
|
||||
void *data_buffer;
|
||||
|
@ -221,7 +221,7 @@ struct VirtIONet {
|
||||
DeviceListener primary_listener;
|
||||
QDict *primary_opts;
|
||||
bool primary_opts_from_json;
|
||||
Notifier migration_state;
|
||||
NotifierWithReturn migration_state;
|
||||
VirtioNetRssData rss_data;
|
||||
struct NetRxPkt *rx_pkt;
|
||||
struct EBPFRSSContext ebpf_rss;
|
||||
|
@ -31,7 +31,6 @@ typedef enum PrecopyNotifyReason {
|
||||
|
||||
typedef struct PrecopyNotifyData {
|
||||
enum PrecopyNotifyReason reason;
|
||||
Error **errp;
|
||||
} PrecopyNotifyData;
|
||||
|
||||
void precopy_infrastructure_init(void);
|
||||
@ -61,15 +60,51 @@ void migration_object_init(void);
|
||||
void migration_shutdown(void);
|
||||
bool migration_is_idle(void);
|
||||
bool migration_is_active(MigrationState *);
|
||||
void migration_add_notifier(Notifier *notify,
|
||||
void (*func)(Notifier *notifier, void *data));
|
||||
void migration_remove_notifier(Notifier *notify);
|
||||
void migration_call_notifiers(MigrationState *s);
|
||||
bool migrate_mode_is_cpr(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;
|
||||
|
||||
/*
|
||||
* 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
|
||||
* to allow for different failure modes and recovery actions.
|
||||
*/
|
||||
typedef int (*MigrationNotifyFunc)(NotifierWithReturn *notify,
|
||||
MigrationEvent *e, Error **errp);
|
||||
|
||||
/*
|
||||
* 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,
|
||||
MigrationNotifyFunc func);
|
||||
|
||||
/*
|
||||
* Same as migration_add_notifier, but applies to be specified @mode.
|
||||
*/
|
||||
void migration_add_notifier_mode(NotifierWithReturn *notify,
|
||||
MigrationNotifyFunc func, MigMode mode);
|
||||
|
||||
void migration_remove_notifier(NotifierWithReturn *notify);
|
||||
int migration_call_notifiers(MigrationState *s, MigrationEventType type,
|
||||
Error **errp);
|
||||
bool migration_in_setup(MigrationState *);
|
||||
bool migration_has_finished(MigrationState *);
|
||||
bool migration_has_failed(MigrationState *);
|
||||
/* ...and after the device transmission */
|
||||
bool migration_in_postcopy_after_devices(MigrationState *);
|
||||
/* True if incoming migration entered POSTCOPY_INCOMING_DISCARD */
|
||||
bool migration_in_incoming_postcopy(void);
|
||||
/* True if incoming migration entered POSTCOPY_INCOMING_ADVISE */
|
||||
|
@ -45,12 +45,16 @@ bool notifier_list_empty(NotifierList *list);
|
||||
/* Same as Notifier but allows .notify() to return errors */
|
||||
typedef struct NotifierWithReturn NotifierWithReturn;
|
||||
|
||||
/* Return int to allow for different failure modes and recovery actions */
|
||||
typedef int (*NotifierWithReturnFunc)(NotifierWithReturn *notifier, void *data,
|
||||
Error **errp);
|
||||
|
||||
struct NotifierWithReturn {
|
||||
/**
|
||||
* Return 0 on success (next notifier will be invoked), otherwise
|
||||
* notifier_with_return_list_notify() will stop and return the value.
|
||||
*/
|
||||
int (*notify)(NotifierWithReturn *notifier, void *data);
|
||||
NotifierWithReturnFunc notify;
|
||||
QLIST_ENTRY(NotifierWithReturn) node;
|
||||
};
|
||||
|
||||
@ -69,6 +73,6 @@ void notifier_with_return_list_add(NotifierWithReturnList *list,
|
||||
void notifier_with_return_remove(NotifierWithReturn *notifier);
|
||||
|
||||
int notifier_with_return_list_notify(NotifierWithReturnList *list,
|
||||
void *data);
|
||||
void *data, Error **errp);
|
||||
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user