1bb8dd242SNico Boehr /* SPDX-License-Identifier: GPL-2.0-only */ 2bb8dd242SNico Boehr /* 3bb8dd242SNico Boehr * Migration-related functions 4bb8dd242SNico Boehr * 5bb8dd242SNico Boehr * Copyright IBM Corp. 2022 6bb8dd242SNico Boehr * Author: Nico Boehr <nrb@linux.ibm.com> 7bb8dd242SNico Boehr */ 8bb8dd242SNico Boehr #include <libcflat.h> 9bb8dd242SNico Boehr #include "migrate.h" 10bb8dd242SNico Boehr 1114ea7bdaSNicholas Piggin /* 1214ea7bdaSNicholas Piggin * Initiate migration and wait for it to complete. 1314ea7bdaSNicholas Piggin */ migrate(void)1414ea7bdaSNicholas Pigginvoid migrate(void) 15bb8dd242SNico Boehr { 16bb8dd242SNico Boehr puts("Now migrate the VM, then press a key to continue...\n"); 17bb8dd242SNico Boehr (void)getchar(); 18bb8dd242SNico Boehr report_info("Migration complete"); 19bb8dd242SNico Boehr } 20bb8dd242SNico Boehr 21bb8dd242SNico Boehr /* 2271e3516bSNicholas Piggin * Like migrate() but suppress output and logs, useful for intensive 2371e3516bSNicholas Piggin * migration stress testing without polluting logs. Test cases should 2471e3516bSNicholas Piggin * provide relevant information about migration in failure reports. 2571e3516bSNicholas Piggin */ migrate_quiet(void)2671e3516bSNicholas Pigginvoid migrate_quiet(void) 2771e3516bSNicholas Piggin { 2871e3516bSNicholas Piggin puts("Now migrate the VM (quiet)\n"); 2971e3516bSNicholas Piggin (void)getchar(); 3071e3516bSNicholas Piggin } 3171e3516bSNicholas Piggin 3271e3516bSNicholas Piggin /* 33bb8dd242SNico Boehr * Initiate migration and wait for it to complete. 34bb8dd242SNico Boehr * If this function is called more than once, it is a no-op. 35bb8dd242SNico Boehr */ migrate_once(void)36bb8dd242SNico Boehrvoid migrate_once(void) 37bb8dd242SNico Boehr { 38bb8dd242SNico Boehr static bool migrated; 39bb8dd242SNico Boehr 40bb8dd242SNico Boehr if (migrated) 41bb8dd242SNico Boehr return; 42bb8dd242SNico Boehr migrated = true; 43fa8914bcSNicholas Piggin 44bb8dd242SNico Boehr migrate(); 45bb8dd242SNico Boehr } 46fa8914bcSNicholas Piggin 47fa8914bcSNicholas Piggin /* 48fa8914bcSNicholas Piggin * When the test has been started in migration mode, but the test case is 49fa8914bcSNicholas Piggin * skipped and no migration point is reached, this can be used to tell the 50fa8914bcSNicholas Piggin * harness not to mark it as a failure to migrate. 51fa8914bcSNicholas Piggin */ migrate_skip(void)52fa8914bcSNicholas Pigginvoid migrate_skip(void) 53fa8914bcSNicholas Piggin { 54fa8914bcSNicholas Piggin static bool did_migrate_skip; 55fa8914bcSNicholas Piggin 56fa8914bcSNicholas Piggin if (did_migrate_skip) 57fa8914bcSNicholas Piggin return; 58fa8914bcSNicholas Piggin did_migrate_skip = true; 59fa8914bcSNicholas Piggin 60fa8914bcSNicholas Piggin puts("Skipped VM migration (quiet)\n"); 61fa8914bcSNicholas Piggin (void)getchar(); 62fa8914bcSNicholas Piggin } 63*956004acSNicholas Piggin migrate_begin_continuous(void)64*956004acSNicholas Pigginvoid migrate_begin_continuous(void) 65*956004acSNicholas Piggin { 66*956004acSNicholas Piggin puts("Begin continuous migration\n"); 67*956004acSNicholas Piggin (void)getchar(); 68*956004acSNicholas Piggin } 69*956004acSNicholas Piggin migrate_end_continuous(void)70*956004acSNicholas Pigginvoid migrate_end_continuous(void) 71*956004acSNicholas Piggin { 72*956004acSNicholas Piggin /* 73*956004acSNicholas Piggin * Migration can split this output between source and dest QEMU 74*956004acSNicholas Piggin * output files, print twice and match once to always cope with 75*956004acSNicholas Piggin * a split. 76*956004acSNicholas Piggin */ 77*956004acSNicholas Piggin puts("End continuous migration\n"); 78*956004acSNicholas Piggin puts("End continuous migration (quiet)\n"); 79*956004acSNicholas Piggin (void)getchar(); 80*956004acSNicholas Piggin } 81