Juan Quintela | 7b1e1a2 | 2017-04-17 20:26:27 +0200 | [diff] [blame] | 1 | /* |
| 2 | * QEMU migration miscellaneus exported functions |
| 3 | * |
| 4 | * Copyright IBM, Corp. 2008 |
| 5 | * |
| 6 | * Authors: |
| 7 | * Anthony Liguori <aliguori@us.ibm.com> |
| 8 | * |
| 9 | * This work is licensed under the terms of the GNU GPL, version 2. See |
| 10 | * the COPYING file in the top-level directory. |
| 11 | * |
| 12 | */ |
| 13 | |
| 14 | #ifndef MIGRATION_MISC_H |
| 15 | #define MIGRATION_MISC_H |
| 16 | |
Juan Quintela | 1adc1ce | 2017-04-24 16:51:10 +0200 | [diff] [blame] | 17 | #include "qemu/notify.h" |
Steve Sistare | eea1e5c | 2023-10-25 12:44:24 -0700 | [diff] [blame] | 18 | #include "qapi/qapi-types-migration.h" |
Dr. David Alan Gilbert | ee3d96b | 2019-02-27 13:24:06 +0000 | [diff] [blame] | 19 | #include "qapi/qapi-types-net.h" |
Steve Sistare | f3bff6c | 2024-03-11 10:48:39 -0700 | [diff] [blame] | 20 | #include "migration/client-options.h" |
Juan Quintela | 1adc1ce | 2017-04-24 16:51:10 +0200 | [diff] [blame] | 21 | |
Juan Quintela | 7b1e1a2 | 2017-04-17 20:26:27 +0200 | [diff] [blame] | 22 | /* migration/ram.c */ |
| 23 | |
Wei Wang | bd22706 | 2018-12-11 16:24:51 +0800 | [diff] [blame] | 24 | typedef enum PrecopyNotifyReason { |
| 25 | PRECOPY_NOTIFY_SETUP = 0, |
| 26 | PRECOPY_NOTIFY_BEFORE_BITMAP_SYNC = 1, |
| 27 | PRECOPY_NOTIFY_AFTER_BITMAP_SYNC = 2, |
| 28 | PRECOPY_NOTIFY_COMPLETE = 3, |
| 29 | PRECOPY_NOTIFY_CLEANUP = 4, |
| 30 | PRECOPY_NOTIFY_MAX = 5, |
| 31 | } PrecopyNotifyReason; |
| 32 | |
| 33 | typedef struct PrecopyNotifyData { |
| 34 | enum PrecopyNotifyReason reason; |
Wei Wang | bd22706 | 2018-12-11 16:24:51 +0800 | [diff] [blame] | 35 | } PrecopyNotifyData; |
| 36 | |
| 37 | void precopy_infrastructure_init(void); |
| 38 | void precopy_add_notifier(NotifierWithReturn *n); |
| 39 | void precopy_remove_notifier(NotifierWithReturn *n); |
| 40 | int precopy_notify(PrecopyNotifyReason reason, Error **errp); |
| 41 | |
Juan Quintela | 7b1e1a2 | 2017-04-17 20:26:27 +0200 | [diff] [blame] | 42 | void ram_mig_init(void); |
Wei Wang | 6bcb05f | 2018-12-11 16:24:50 +0800 | [diff] [blame] | 43 | void qemu_guest_free_page_hint(void *addr, size_t len); |
David Hildenbrand | f161c88 | 2023-07-06 09:56:08 +0200 | [diff] [blame] | 44 | bool migrate_ram_is_ignored(RAMBlock *block); |
Juan Quintela | 7b1e1a2 | 2017-04-17 20:26:27 +0200 | [diff] [blame] | 45 | |
Juan Quintela | 2c9e6fe | 2017-04-21 14:31:22 +0200 | [diff] [blame] | 46 | /* migration/block.c */ |
| 47 | |
| 48 | #ifdef CONFIG_LIVE_BLOCK_MIGRATION |
| 49 | void blk_mig_init(void); |
| 50 | #else |
| 51 | static inline void blk_mig_init(void) {} |
| 52 | #endif |
| 53 | |
Dr. David Alan Gilbert | ee3d96b | 2019-02-27 13:24:06 +0000 | [diff] [blame] | 54 | AnnounceParameters *migrate_announce_params(void); |
Juan Quintela | b772274 | 2017-04-24 13:51:10 +0200 | [diff] [blame] | 55 | /* migration/savevm.c */ |
| 56 | |
| 57 | void dump_vmstate_json_to_file(FILE *out_fp); |
| 58 | |
Juan Quintela | c4b63b7 | 2017-04-24 19:02:44 +0200 | [diff] [blame] | 59 | /* migration/migration.c */ |
Peter Xu | e5cb7e7 | 2017-06-27 12:10:13 +0800 | [diff] [blame] | 60 | void migration_object_init(void); |
Dr. David Alan Gilbert | 892ae71 | 2019-02-27 16:49:00 +0000 | [diff] [blame] | 61 | void migration_shutdown(void); |
Juan Quintela | c4b63b7 | 2017-04-24 19:02:44 +0200 | [diff] [blame] | 62 | bool migration_is_idle(void); |
Steve Sistare | 3a6813b | 2024-03-11 10:48:50 -0700 | [diff] [blame] | 63 | bool migration_is_active(void); |
Steve Sistare | 9bb630c | 2024-03-11 10:48:54 -0700 | [diff] [blame] | 64 | bool migration_is_device(void); |
Steve Sistare | 6e78563 | 2024-03-11 10:48:53 -0700 | [diff] [blame] | 65 | bool migration_thread_is_self(void); |
Steve Sistare | 7dcb3c8 | 2024-03-11 10:48:49 -0700 | [diff] [blame] | 66 | bool migration_is_setup_or_active(void); |
Steve Sistare | 9d9babf | 2024-02-22 09:28:30 -0800 | [diff] [blame] | 67 | |
| 68 | typedef enum MigrationEventType { |
| 69 | MIG_EVENT_PRECOPY_SETUP, |
| 70 | MIG_EVENT_PRECOPY_DONE, |
| 71 | MIG_EVENT_PRECOPY_FAILED, |
| 72 | MIG_EVENT_MAX |
| 73 | } MigrationEventType; |
| 74 | |
| 75 | typedef struct MigrationEvent { |
| 76 | MigrationEventType type; |
| 77 | } MigrationEvent; |
| 78 | |
Steve Sistare | 4af667f | 2024-02-22 09:28:35 -0800 | [diff] [blame] | 79 | /* |
| 80 | * A MigrationNotifyFunc may return an error code and an Error object, |
| 81 | * but only when @e->type is MIG_EVENT_PRECOPY_SETUP. The code is an int |
| 82 | * to allow for different failure modes and recovery actions. |
| 83 | */ |
Steve Sistare | 5663dd3 | 2024-02-22 09:28:32 -0800 | [diff] [blame] | 84 | typedef int (*MigrationNotifyFunc)(NotifierWithReturn *notify, |
| 85 | MigrationEvent *e, Error **errp); |
| 86 | |
Steve Sistare | 9d9babf | 2024-02-22 09:28:30 -0800 | [diff] [blame] | 87 | /* |
| 88 | * Register the notifier @notify to be called when a migration event occurs |
| 89 | * for MIG_MODE_NORMAL, as specified by the MigrationEvent passed to @func. |
| 90 | * Notifiers may receive events in any of the following orders: |
| 91 | * - MIG_EVENT_PRECOPY_SETUP -> MIG_EVENT_PRECOPY_DONE |
| 92 | * - MIG_EVENT_PRECOPY_SETUP -> MIG_EVENT_PRECOPY_FAILED |
| 93 | * - MIG_EVENT_PRECOPY_FAILED |
| 94 | */ |
Steve Sistare | 3e77573 | 2024-02-22 09:28:29 -0800 | [diff] [blame] | 95 | void migration_add_notifier(NotifierWithReturn *notify, |
Steve Sistare | 5663dd3 | 2024-02-22 09:28:32 -0800 | [diff] [blame] | 96 | MigrationNotifyFunc func); |
Steve Sistare | 9d9babf | 2024-02-22 09:28:30 -0800 | [diff] [blame] | 97 | |
Steve Sistare | 6835f5a | 2024-02-22 09:28:33 -0800 | [diff] [blame] | 98 | /* |
| 99 | * Same as migration_add_notifier, but applies to be specified @mode. |
| 100 | */ |
| 101 | void migration_add_notifier_mode(NotifierWithReturn *notify, |
| 102 | MigrationNotifyFunc func, MigMode mode); |
| 103 | |
Steve Sistare | 3e77573 | 2024-02-22 09:28:29 -0800 | [diff] [blame] | 104 | void migration_remove_notifier(NotifierWithReturn *notify); |
Steve Sistare | aeaafb1 | 2024-03-11 10:48:51 -0700 | [diff] [blame] | 105 | bool migration_is_running(void); |
Steve Sistare | 20c64c8 | 2024-03-11 10:48:55 -0700 | [diff] [blame] | 106 | void migration_file_set_error(int err); |
| 107 | |
David Hildenbrand | 80fe315 | 2023-01-17 12:22:46 +0100 | [diff] [blame] | 108 | /* True if incoming migration entered POSTCOPY_INCOMING_DISCARD */ |
David Hildenbrand | 06df2e6 | 2020-06-26 09:22:33 +0200 | [diff] [blame] | 109 | bool migration_in_incoming_postcopy(void); |
Steve Sistare | c9539d9 | 2024-03-11 10:48:58 -0700 | [diff] [blame] | 110 | |
David Hildenbrand | 80fe315 | 2023-01-17 12:22:46 +0100 | [diff] [blame] | 111 | /* True if incoming migration entered POSTCOPY_INCOMING_ADVISE */ |
| 112 | bool migration_incoming_postcopy_advised(void); |
Steve Sistare | c9539d9 | 2024-03-11 10:48:58 -0700 | [diff] [blame] | 113 | |
Andrey Gruzdev | 1a8e44a | 2021-04-01 12:22:24 +0300 | [diff] [blame] | 114 | /* True if background snapshot is active */ |
| 115 | bool migration_in_bg_snapshot(void); |
Peter Xu | 3df663e | 2017-06-27 12:10:15 +0800 | [diff] [blame] | 116 | |
Vladimir Sementsov-Ogievskiy | b35ebdf | 2018-03-13 15:34:01 -0400 | [diff] [blame] | 117 | /* migration/block-dirty-bitmap.c */ |
| 118 | void dirty_bitmap_mig_init(void); |
| 119 | |
Juan Quintela | 7b1e1a2 | 2017-04-17 20:26:27 +0200 | [diff] [blame] | 120 | #endif |