xref: /kvmtool/builtin-balloon.c (revision c9cba7910f52a48ecc99c9976bab69883aa3ef58)
15cac5d9cSSasha Levin #include <stdio.h>
25cac5d9cSSasha Levin #include <string.h>
35cac5d9cSSasha Levin #include <signal.h>
45cac5d9cSSasha Levin 
55cac5d9cSSasha Levin #include <kvm/util.h>
65cac5d9cSSasha Levin #include <kvm/kvm-cmd.h>
72a24f96dSSasha Levin #include <kvm/builtin-balloon.h>
8*c9cba791SPekka Enberg #include <kvm/parse-options.h>
95cac5d9cSSasha Levin #include <kvm/kvm.h>
105cac5d9cSSasha Levin 
11*c9cba791SPekka Enberg static const char * const balloon_usage[] = {
12*c9cba791SPekka Enberg 	"kvm balloon {inflate|deflate} <size in MiB> <instance name>",
13*c9cba791SPekka Enberg 	NULL
14*c9cba791SPekka Enberg };
15*c9cba791SPekka Enberg 
16*c9cba791SPekka Enberg static const struct option balloon_options[] = {
17*c9cba791SPekka Enberg 	OPT_END()
18*c9cba791SPekka Enberg };
19*c9cba791SPekka Enberg 
205cac5d9cSSasha Levin int kvm_cmd_balloon(int argc, const char **argv, const char *prefix)
215cac5d9cSSasha Levin {
225cac5d9cSSasha Levin 	int pid;
235cac5d9cSSasha Levin 	int amount, i;
245cac5d9cSSasha Levin 	int inflate = 0;
255cac5d9cSSasha Levin 
265cac5d9cSSasha Levin 	if (argc != 3)
27*c9cba791SPekka Enberg 		usage_with_options(balloon_usage, balloon_options);
285cac5d9cSSasha Levin 
29561509e7SAsias He 	pid = kvm__get_pid_by_instance(argv[2]);
305cac5d9cSSasha Levin 	if (pid < 0)
315cac5d9cSSasha Levin 		die("Failed locating instance name");
325cac5d9cSSasha Levin 
335cac5d9cSSasha Levin 	if (strcmp(argv[0], "inflate") == 0)
345cac5d9cSSasha Levin 		inflate = 1;
355cac5d9cSSasha Levin 	else if (strcmp(argv[0], "deflate"))
365cac5d9cSSasha Levin 		die("command can be either 'inflate' or 'deflate'");
375cac5d9cSSasha Levin 
38561509e7SAsias He 	amount = atoi(argv[1]);
395cac5d9cSSasha Levin 
405cac5d9cSSasha Levin 	for (i = 0; i < amount; i++)
415cac5d9cSSasha Levin 		kill(pid, inflate ? SIGKVMADDMEM : SIGKVMDELMEM);
425cac5d9cSSasha Levin 
435cac5d9cSSasha Levin 	return 0;
445cac5d9cSSasha Levin }
45