xref: /kvmtool/builtin-balloon.c (revision 5cac5d9c4394e316884ea3d7b07b4adb637bab22)
1*5cac5d9cSSasha Levin #include <stdio.h>
2*5cac5d9cSSasha Levin #include <string.h>
3*5cac5d9cSSasha Levin #include <signal.h>
4*5cac5d9cSSasha Levin 
5*5cac5d9cSSasha Levin #include <kvm/util.h>
6*5cac5d9cSSasha Levin #include <kvm/kvm-cmd.h>
7*5cac5d9cSSasha Levin #include <kvm/kvm-balloon.h>
8*5cac5d9cSSasha Levin #include <kvm/kvm.h>
9*5cac5d9cSSasha Levin 
10*5cac5d9cSSasha Levin int kvm_cmd_balloon(int argc, const char **argv, const char *prefix)
11*5cac5d9cSSasha Levin {
12*5cac5d9cSSasha Levin 	int pid;
13*5cac5d9cSSasha Levin 	int amount, i;
14*5cac5d9cSSasha Levin 	int inflate = 0;
15*5cac5d9cSSasha Levin 
16*5cac5d9cSSasha Levin 	if (argc != 3)
17*5cac5d9cSSasha Levin 		die("Usage: kvm balloon [command] [instance name] [amount]\n");
18*5cac5d9cSSasha Levin 
19*5cac5d9cSSasha Levin 	pid = kvm__get_pid_by_instance(argv[1]);
20*5cac5d9cSSasha Levin 	if (pid < 0)
21*5cac5d9cSSasha Levin 		die("Failed locating instance name");
22*5cac5d9cSSasha Levin 
23*5cac5d9cSSasha Levin 	if (strcmp(argv[0], "inflate") == 0)
24*5cac5d9cSSasha Levin 		inflate = 1;
25*5cac5d9cSSasha Levin 	else if (strcmp(argv[0], "deflate"))
26*5cac5d9cSSasha Levin 		die("command can be either 'inflate' or 'deflate'");
27*5cac5d9cSSasha Levin 
28*5cac5d9cSSasha Levin 	amount = atoi(argv[2]);
29*5cac5d9cSSasha Levin 
30*5cac5d9cSSasha Levin 	for (i = 0; i < amount; i++)
31*5cac5d9cSSasha Levin 		kill(pid, inflate ? SIGKVMADDMEM : SIGKVMDELMEM);
32*5cac5d9cSSasha Levin 
33*5cac5d9cSSasha Levin 	return 0;
34*5cac5d9cSSasha Levin }
35