xref: /kvm-unit-tests/lib/migrate.c (revision 956004acda727b12b14ef0b5283984754ee7616d)
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 Piggin void 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 Piggin void 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 Boehr void 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 Piggin void 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 Piggin void 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 Piggin void 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