1*1f0776f1SJuan Quintela /* 2*1f0776f1SJuan Quintela * QEMU migration capabilities 3*1f0776f1SJuan Quintela * 4*1f0776f1SJuan Quintela * Copyright (c) 2012-2023 Red Hat Inc 5*1f0776f1SJuan Quintela * 6*1f0776f1SJuan Quintela * Authors: 7*1f0776f1SJuan Quintela * Orit Wasserman <owasserm@redhat.com> 8*1f0776f1SJuan Quintela * Juan Quintela <quintela@redhat.com> 9*1f0776f1SJuan Quintela * 10*1f0776f1SJuan Quintela * This work is licensed under the terms of the GNU GPL, version 2 or later. 11*1f0776f1SJuan Quintela * See the COPYING file in the top-level directory. 12*1f0776f1SJuan Quintela */ 13*1f0776f1SJuan Quintela 14*1f0776f1SJuan Quintela #include "qemu/osdep.h" 15*1f0776f1SJuan Quintela #include "migration.h" 16*1f0776f1SJuan Quintela #include "options.h" 17*1f0776f1SJuan Quintela 18*1f0776f1SJuan Quintela bool migrate_auto_converge(void) 19*1f0776f1SJuan Quintela { 20*1f0776f1SJuan Quintela MigrationState *s; 21*1f0776f1SJuan Quintela 22*1f0776f1SJuan Quintela s = migrate_get_current(); 23*1f0776f1SJuan Quintela 24*1f0776f1SJuan Quintela return s->capabilities[MIGRATION_CAPABILITY_AUTO_CONVERGE]; 25*1f0776f1SJuan Quintela } 26*1f0776f1SJuan Quintela 27*1f0776f1SJuan Quintela bool migrate_background_snapshot(void) 28*1f0776f1SJuan Quintela { 29*1f0776f1SJuan Quintela MigrationState *s; 30*1f0776f1SJuan Quintela 31*1f0776f1SJuan Quintela s = migrate_get_current(); 32*1f0776f1SJuan Quintela 33*1f0776f1SJuan Quintela return s->capabilities[MIGRATION_CAPABILITY_BACKGROUND_SNAPSHOT]; 34*1f0776f1SJuan Quintela } 35*1f0776f1SJuan Quintela 36*1f0776f1SJuan Quintela bool migrate_dirty_bitmaps(void) 37*1f0776f1SJuan Quintela { 38*1f0776f1SJuan Quintela MigrationState *s; 39*1f0776f1SJuan Quintela 40*1f0776f1SJuan Quintela s = migrate_get_current(); 41*1f0776f1SJuan Quintela 42*1f0776f1SJuan Quintela return s->capabilities[MIGRATION_CAPABILITY_DIRTY_BITMAPS]; 43*1f0776f1SJuan Quintela } 44*1f0776f1SJuan Quintela 45*1f0776f1SJuan Quintela bool migrate_ignore_shared(void) 46*1f0776f1SJuan Quintela { 47*1f0776f1SJuan Quintela MigrationState *s; 48*1f0776f1SJuan Quintela 49*1f0776f1SJuan Quintela s = migrate_get_current(); 50*1f0776f1SJuan Quintela 51*1f0776f1SJuan Quintela return s->capabilities[MIGRATION_CAPABILITY_X_IGNORE_SHARED]; 52*1f0776f1SJuan Quintela } 53*1f0776f1SJuan Quintela 54*1f0776f1SJuan Quintela bool migrate_late_block_activate(void) 55*1f0776f1SJuan Quintela { 56*1f0776f1SJuan Quintela MigrationState *s; 57*1f0776f1SJuan Quintela 58*1f0776f1SJuan Quintela s = migrate_get_current(); 59*1f0776f1SJuan Quintela 60*1f0776f1SJuan Quintela return s->capabilities[MIGRATION_CAPABILITY_LATE_BLOCK_ACTIVATE]; 61*1f0776f1SJuan Quintela } 62*1f0776f1SJuan Quintela 63*1f0776f1SJuan Quintela bool migrate_pause_before_switchover(void) 64*1f0776f1SJuan Quintela { 65*1f0776f1SJuan Quintela MigrationState *s; 66*1f0776f1SJuan Quintela 67*1f0776f1SJuan Quintela s = migrate_get_current(); 68*1f0776f1SJuan Quintela 69*1f0776f1SJuan Quintela return s->capabilities[MIGRATION_CAPABILITY_PAUSE_BEFORE_SWITCHOVER]; 70*1f0776f1SJuan Quintela } 71*1f0776f1SJuan Quintela 72*1f0776f1SJuan Quintela bool migrate_postcopy_blocktime(void) 73*1f0776f1SJuan Quintela { 74*1f0776f1SJuan Quintela MigrationState *s; 75*1f0776f1SJuan Quintela 76*1f0776f1SJuan Quintela s = migrate_get_current(); 77*1f0776f1SJuan Quintela 78*1f0776f1SJuan Quintela return s->capabilities[MIGRATION_CAPABILITY_POSTCOPY_BLOCKTIME]; 79*1f0776f1SJuan Quintela } 80*1f0776f1SJuan Quintela 81*1f0776f1SJuan Quintela bool migrate_postcopy_preempt(void) 82*1f0776f1SJuan Quintela { 83*1f0776f1SJuan Quintela MigrationState *s; 84*1f0776f1SJuan Quintela 85*1f0776f1SJuan Quintela s = migrate_get_current(); 86*1f0776f1SJuan Quintela 87*1f0776f1SJuan Quintela return s->capabilities[MIGRATION_CAPABILITY_POSTCOPY_PREEMPT]; 88*1f0776f1SJuan Quintela } 89*1f0776f1SJuan Quintela 90*1f0776f1SJuan Quintela bool migrate_postcopy_ram(void) 91*1f0776f1SJuan Quintela { 92*1f0776f1SJuan Quintela MigrationState *s; 93*1f0776f1SJuan Quintela 94*1f0776f1SJuan Quintela s = migrate_get_current(); 95*1f0776f1SJuan Quintela 96*1f0776f1SJuan Quintela return s->capabilities[MIGRATION_CAPABILITY_POSTCOPY_RAM]; 97*1f0776f1SJuan Quintela } 98*1f0776f1SJuan Quintela 99*1f0776f1SJuan Quintela bool migrate_release_ram(void) 100*1f0776f1SJuan Quintela { 101*1f0776f1SJuan Quintela MigrationState *s; 102*1f0776f1SJuan Quintela 103*1f0776f1SJuan Quintela s = migrate_get_current(); 104*1f0776f1SJuan Quintela 105*1f0776f1SJuan Quintela return s->capabilities[MIGRATION_CAPABILITY_RELEASE_RAM]; 106*1f0776f1SJuan Quintela } 107*1f0776f1SJuan Quintela 108*1f0776f1SJuan Quintela bool migrate_validate_uuid(void) 109*1f0776f1SJuan Quintela { 110*1f0776f1SJuan Quintela MigrationState *s; 111*1f0776f1SJuan Quintela 112*1f0776f1SJuan Quintela s = migrate_get_current(); 113*1f0776f1SJuan Quintela 114*1f0776f1SJuan Quintela return s->capabilities[MIGRATION_CAPABILITY_VALIDATE_UUID]; 115*1f0776f1SJuan Quintela } 116*1f0776f1SJuan Quintela 117*1f0776f1SJuan Quintela bool migrate_zero_blocks(void) 118*1f0776f1SJuan Quintela { 119*1f0776f1SJuan Quintela MigrationState *s; 120*1f0776f1SJuan Quintela 121*1f0776f1SJuan Quintela s = migrate_get_current(); 122*1f0776f1SJuan Quintela 123*1f0776f1SJuan Quintela return s->capabilities[MIGRATION_CAPABILITY_ZERO_BLOCKS]; 124*1f0776f1SJuan Quintela } 125