blob: 9ec96a995c93a42aad621595f0ed58596c532328 [file] [log] [blame]
Juan Quintela20a519a2017-04-20 14:48:46 +02001/*
2 * QEMU save vm functions
3 *
4 * Copyright (c) 2003-2008 Fabrice Bellard
5 * Copyright (c) 2009-2017 Red Hat Inc
6 *
7 * Authors:
8 * Juan Quintela <quintela@redhat.com>
9 *
10 * This work is licensed under the terms of the GNU GPL, version 2 or later.
11 * See the COPYING file in the top-level directory.
12 */
13
14#ifndef MIGRATION_SAVEVM_H
15#define MIGRATION_SAVEVM_H
16
Juan Quintelac3d2e2e2017-04-24 17:36:46 +020017#define QEMU_VM_FILE_MAGIC 0x5145564d
18#define QEMU_VM_FILE_VERSION_COMPAT 0x00000002
19#define QEMU_VM_FILE_VERSION 0x00000003
20
21#define QEMU_VM_EOF 0x00
22#define QEMU_VM_SECTION_START 0x01
23#define QEMU_VM_SECTION_PART 0x02
24#define QEMU_VM_SECTION_END 0x03
25#define QEMU_VM_SECTION_FULL 0x04
26#define QEMU_VM_SUBSECTION 0x05
27#define QEMU_VM_VMDESCRIPTION 0x06
28#define QEMU_VM_CONFIGURATION 0x07
29#define QEMU_VM_COMMAND 0x08
30#define QEMU_VM_SECTION_FOOTER 0x7e
31
Juan Quintela20a519a2017-04-20 14:48:46 +020032bool qemu_savevm_state_blocked(Error **errp);
Dr. David Alan Gilbert3af85542021-02-02 13:55:21 +000033void qemu_savevm_non_migratable_list(strList **reasons);
Avihai Horon08fc4cb2023-09-06 18:08:51 +030034int qemu_savevm_state_prepare(Error **errp);
Cédric Le Goater057a2002024-03-20 07:49:02 +010035int qemu_savevm_state_setup(QEMUFile *f, Error **errp);
Jens Freimannc7e0acd2019-10-29 12:49:02 +010036bool qemu_savevm_state_guest_unplug_pending(void);
Peter Xud1b8ead2018-05-02 18:47:31 +080037int qemu_savevm_state_resume_prepare(MigrationState *s);
Juan Quintela20a519a2017-04-20 14:48:46 +020038void qemu_savevm_state_header(QEMUFile *f);
39int qemu_savevm_state_iterate(QEMUFile *f, bool postcopy);
40void qemu_savevm_state_cleanup(void);
41void qemu_savevm_state_complete_postcopy(QEMUFile *f);
Fam Zhenga1fbe752017-06-17 00:06:58 +080042int qemu_savevm_state_complete_precopy(QEMUFile *f, bool iterable_only,
43 bool inactivate_disks);
Juan Quintela24beea42023-02-08 14:48:02 +010044void qemu_savevm_state_pending_exact(uint64_t *must_precopy,
45 uint64_t *can_postcopy);
46void qemu_savevm_state_pending_estimate(uint64_t *must_precopy,
47 uint64_t *can_postcopy);
Juan Quintela20a519a2017-04-20 14:48:46 +020048void qemu_savevm_send_ping(QEMUFile *f, uint32_t value);
49void qemu_savevm_send_open_return_path(QEMUFile *f);
50int qemu_savevm_send_packaged(QEMUFile *f, const uint8_t *buf, size_t len);
51void qemu_savevm_send_postcopy_advise(QEMUFile *f);
52void qemu_savevm_send_postcopy_listen(QEMUFile *f);
53void qemu_savevm_send_postcopy_run(QEMUFile *f);
Peter Xu3f5875e2018-05-02 18:47:29 +080054void qemu_savevm_send_postcopy_resume(QEMUFile *f);
Peter Xuf25d4222018-05-02 18:47:27 +080055void qemu_savevm_send_recv_bitmap(QEMUFile *f, char *block_name);
Juan Quintela20a519a2017-04-20 14:48:46 +020056
57void qemu_savevm_send_postcopy_ram_discard(QEMUFile *f, const char *name,
58 uint16_t len,
59 uint64_t *start_list,
60 uint64_t *length_list);
Zhang Chenaad555c2018-09-03 12:38:47 +080061void qemu_savevm_send_colo_enable(QEMUFile *f);
Zhang Chen3f6df992018-09-03 12:38:54 +080062void qemu_savevm_live_state(QEMUFile *f);
63int qemu_save_device_state(QEMUFile *f);
Juan Quintela20a519a2017-04-20 14:48:46 +020064
65int qemu_loadvm_state(QEMUFile *f);
Juan Quintelaacb5ea82017-06-28 11:52:26 +020066void qemu_loadvm_state_cleanup(void);
Zhang Chen3f6df992018-09-03 12:38:54 +080067int qemu_loadvm_state_main(QEMUFile *f, MigrationIncomingState *mis);
68int qemu_load_device_state(QEMUFile *f);
Avihai Horon1b4adb12023-06-21 14:11:55 +030069int qemu_loadvm_approve_switchover(void);
Andrey Gruzdev85182782021-01-29 13:14:06 +030070int qemu_savevm_state_complete_precopy_non_iterable(QEMUFile *f,
71 bool in_postcopy, bool inactivate_disks);
Juan Quintela20a519a2017-04-20 14:48:46 +020072
73#endif