11f0776f1SJuan Quintela /* 21f0776f1SJuan Quintela * QEMU migration capabilities 31f0776f1SJuan Quintela * 41f0776f1SJuan Quintela * Copyright (c) 2012-2023 Red Hat Inc 51f0776f1SJuan Quintela * 61f0776f1SJuan Quintela * Authors: 71f0776f1SJuan Quintela * Orit Wasserman <owasserm@redhat.com> 81f0776f1SJuan Quintela * Juan Quintela <quintela@redhat.com> 91f0776f1SJuan Quintela * 101f0776f1SJuan Quintela * This work is licensed under the terms of the GNU GPL, version 2 or later. 111f0776f1SJuan Quintela * See the COPYING file in the top-level directory. 121f0776f1SJuan Quintela */ 131f0776f1SJuan Quintela 141f0776f1SJuan Quintela #include "qemu/osdep.h" 151f0776f1SJuan Quintela #include "migration.h" 161f0776f1SJuan Quintela #include "options.h" 171f0776f1SJuan Quintela 181f0776f1SJuan Quintela bool migrate_auto_converge(void) 191f0776f1SJuan Quintela { 201f0776f1SJuan Quintela MigrationState *s; 211f0776f1SJuan Quintela 221f0776f1SJuan Quintela s = migrate_get_current(); 231f0776f1SJuan Quintela 241f0776f1SJuan Quintela return s->capabilities[MIGRATION_CAPABILITY_AUTO_CONVERGE]; 251f0776f1SJuan Quintela } 261f0776f1SJuan Quintela 271f0776f1SJuan Quintela bool migrate_background_snapshot(void) 281f0776f1SJuan Quintela { 291f0776f1SJuan Quintela MigrationState *s; 301f0776f1SJuan Quintela 311f0776f1SJuan Quintela s = migrate_get_current(); 321f0776f1SJuan Quintela 331f0776f1SJuan Quintela return s->capabilities[MIGRATION_CAPABILITY_BACKGROUND_SNAPSHOT]; 341f0776f1SJuan Quintela } 351f0776f1SJuan Quintela 369d4b1e5fSJuan Quintela bool migrate_block(void) 379d4b1e5fSJuan Quintela { 389d4b1e5fSJuan Quintela MigrationState *s; 399d4b1e5fSJuan Quintela 409d4b1e5fSJuan Quintela s = migrate_get_current(); 419d4b1e5fSJuan Quintela 429d4b1e5fSJuan Quintela return s->capabilities[MIGRATION_CAPABILITY_BLOCK]; 439d4b1e5fSJuan Quintela } 449d4b1e5fSJuan Quintela 455e804644SJuan Quintela bool migrate_colo(void) 465e804644SJuan Quintela { 475e804644SJuan Quintela MigrationState *s = migrate_get_current(); 485e804644SJuan Quintela return s->capabilities[MIGRATION_CAPABILITY_X_COLO]; 495e804644SJuan Quintela } 505e804644SJuan Quintela 51a7a94d14SJuan Quintela bool migrate_compress(void) 52a7a94d14SJuan Quintela { 53a7a94d14SJuan Quintela MigrationState *s; 54a7a94d14SJuan Quintela 55a7a94d14SJuan Quintela s = migrate_get_current(); 56a7a94d14SJuan Quintela 57a7a94d14SJuan Quintela return s->capabilities[MIGRATION_CAPABILITY_COMPRESS]; 58a7a94d14SJuan Quintela } 59a7a94d14SJuan Quintela 601f0776f1SJuan Quintela bool migrate_dirty_bitmaps(void) 611f0776f1SJuan Quintela { 621f0776f1SJuan Quintela MigrationState *s; 631f0776f1SJuan Quintela 641f0776f1SJuan Quintela s = migrate_get_current(); 651f0776f1SJuan Quintela 661f0776f1SJuan Quintela return s->capabilities[MIGRATION_CAPABILITY_DIRTY_BITMAPS]; 671f0776f1SJuan Quintela } 681f0776f1SJuan Quintela 69b890902cSJuan Quintela bool migrate_events(void) 70b890902cSJuan Quintela { 71b890902cSJuan Quintela MigrationState *s; 72b890902cSJuan Quintela 73b890902cSJuan Quintela s = migrate_get_current(); 74b890902cSJuan Quintela 75b890902cSJuan Quintela return s->capabilities[MIGRATION_CAPABILITY_EVENTS]; 76b890902cSJuan Quintela } 77b890902cSJuan Quintela 781f0776f1SJuan Quintela bool migrate_ignore_shared(void) 791f0776f1SJuan Quintela { 801f0776f1SJuan Quintela MigrationState *s; 811f0776f1SJuan Quintela 821f0776f1SJuan Quintela s = migrate_get_current(); 831f0776f1SJuan Quintela 841f0776f1SJuan Quintela return s->capabilities[MIGRATION_CAPABILITY_X_IGNORE_SHARED]; 851f0776f1SJuan Quintela } 861f0776f1SJuan Quintela 871f0776f1SJuan Quintela bool migrate_late_block_activate(void) 881f0776f1SJuan Quintela { 891f0776f1SJuan Quintela MigrationState *s; 901f0776f1SJuan Quintela 911f0776f1SJuan Quintela s = migrate_get_current(); 921f0776f1SJuan Quintela 931f0776f1SJuan Quintela return s->capabilities[MIGRATION_CAPABILITY_LATE_BLOCK_ACTIVATE]; 941f0776f1SJuan Quintela } 951f0776f1SJuan Quintela 9651b07548SJuan Quintela bool migrate_multifd(void) 9751b07548SJuan Quintela { 9851b07548SJuan Quintela MigrationState *s; 9951b07548SJuan Quintela 10051b07548SJuan Quintela s = migrate_get_current(); 10151b07548SJuan Quintela 10251b07548SJuan Quintela return s->capabilities[MIGRATION_CAPABILITY_MULTIFD]; 10351b07548SJuan Quintela } 10451b07548SJuan Quintela 1051f0776f1SJuan Quintela bool migrate_pause_before_switchover(void) 1061f0776f1SJuan Quintela { 1071f0776f1SJuan Quintela MigrationState *s; 1081f0776f1SJuan Quintela 1091f0776f1SJuan Quintela s = migrate_get_current(); 1101f0776f1SJuan Quintela 1111f0776f1SJuan Quintela return s->capabilities[MIGRATION_CAPABILITY_PAUSE_BEFORE_SWITCHOVER]; 1121f0776f1SJuan Quintela } 1131f0776f1SJuan Quintela 1141f0776f1SJuan Quintela bool migrate_postcopy_blocktime(void) 1151f0776f1SJuan Quintela { 1161f0776f1SJuan Quintela MigrationState *s; 1171f0776f1SJuan Quintela 1181f0776f1SJuan Quintela s = migrate_get_current(); 1191f0776f1SJuan Quintela 1201f0776f1SJuan Quintela return s->capabilities[MIGRATION_CAPABILITY_POSTCOPY_BLOCKTIME]; 1211f0776f1SJuan Quintela } 1221f0776f1SJuan Quintela 1231f0776f1SJuan Quintela bool migrate_postcopy_preempt(void) 1241f0776f1SJuan Quintela { 1251f0776f1SJuan Quintela MigrationState *s; 1261f0776f1SJuan Quintela 1271f0776f1SJuan Quintela s = migrate_get_current(); 1281f0776f1SJuan Quintela 1291f0776f1SJuan Quintela return s->capabilities[MIGRATION_CAPABILITY_POSTCOPY_PREEMPT]; 1301f0776f1SJuan Quintela } 1311f0776f1SJuan Quintela 1321f0776f1SJuan Quintela bool migrate_postcopy_ram(void) 1331f0776f1SJuan Quintela { 1341f0776f1SJuan Quintela MigrationState *s; 1351f0776f1SJuan Quintela 1361f0776f1SJuan Quintela s = migrate_get_current(); 1371f0776f1SJuan Quintela 1381f0776f1SJuan Quintela return s->capabilities[MIGRATION_CAPABILITY_POSTCOPY_RAM]; 1391f0776f1SJuan Quintela } 1401f0776f1SJuan Quintela 1411f0776f1SJuan Quintela bool migrate_release_ram(void) 1421f0776f1SJuan Quintela { 1431f0776f1SJuan Quintela MigrationState *s; 1441f0776f1SJuan Quintela 1451f0776f1SJuan Quintela s = migrate_get_current(); 1461f0776f1SJuan Quintela 1471f0776f1SJuan Quintela return s->capabilities[MIGRATION_CAPABILITY_RELEASE_RAM]; 1481f0776f1SJuan Quintela } 1491f0776f1SJuan Quintela 150*38ad1110SJuan Quintela bool migrate_return_path(void) 151*38ad1110SJuan Quintela { 152*38ad1110SJuan Quintela MigrationState *s; 153*38ad1110SJuan Quintela 154*38ad1110SJuan Quintela s = migrate_get_current(); 155*38ad1110SJuan Quintela 156*38ad1110SJuan Quintela return s->capabilities[MIGRATION_CAPABILITY_RETURN_PATH]; 157*38ad1110SJuan Quintela } 158*38ad1110SJuan Quintela 1591f0776f1SJuan Quintela bool migrate_validate_uuid(void) 1601f0776f1SJuan Quintela { 1611f0776f1SJuan Quintela MigrationState *s; 1621f0776f1SJuan Quintela 1631f0776f1SJuan Quintela s = migrate_get_current(); 1641f0776f1SJuan Quintela 1651f0776f1SJuan Quintela return s->capabilities[MIGRATION_CAPABILITY_VALIDATE_UUID]; 1661f0776f1SJuan Quintela } 1671f0776f1SJuan Quintela 16887dca0c9SJuan Quintela bool migrate_xbzrle(void) 16987dca0c9SJuan Quintela { 17087dca0c9SJuan Quintela MigrationState *s; 17187dca0c9SJuan Quintela 17287dca0c9SJuan Quintela s = migrate_get_current(); 17387dca0c9SJuan Quintela 17487dca0c9SJuan Quintela return s->capabilities[MIGRATION_CAPABILITY_XBZRLE]; 17587dca0c9SJuan Quintela } 17687dca0c9SJuan Quintela 1771f0776f1SJuan Quintela bool migrate_zero_blocks(void) 1781f0776f1SJuan Quintela { 1791f0776f1SJuan Quintela MigrationState *s; 1801f0776f1SJuan Quintela 1811f0776f1SJuan Quintela s = migrate_get_current(); 1821f0776f1SJuan Quintela 1831f0776f1SJuan Quintela return s->capabilities[MIGRATION_CAPABILITY_ZERO_BLOCKS]; 1841f0776f1SJuan Quintela } 185b4bc342cSJuan Quintela 186b4bc342cSJuan Quintela bool migrate_zero_copy_send(void) 187b4bc342cSJuan Quintela { 188b4bc342cSJuan Quintela MigrationState *s; 189b4bc342cSJuan Quintela 190b4bc342cSJuan Quintela s = migrate_get_current(); 191b4bc342cSJuan Quintela 192b4bc342cSJuan Quintela return s->capabilities[MIGRATION_CAPABILITY_ZERO_COPY_SEND]; 193b4bc342cSJuan Quintela } 194