xref: /kvmtool/builtin-balloon.c (revision 2a24f96d648d5a281ae506ca6125404d1edbe7f5)
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>
7*2a24f96dSSasha Levin #include <kvm/builtin-balloon.h>
85cac5d9cSSasha Levin #include <kvm/kvm.h>
95cac5d9cSSasha Levin 
105cac5d9cSSasha Levin int kvm_cmd_balloon(int argc, const char **argv, const char *prefix)
115cac5d9cSSasha Levin {
125cac5d9cSSasha Levin 	int pid;
135cac5d9cSSasha Levin 	int amount, i;
145cac5d9cSSasha Levin 	int inflate = 0;
155cac5d9cSSasha Levin 
165cac5d9cSSasha Levin 	if (argc != 3)
175cac5d9cSSasha Levin 		die("Usage: kvm balloon [command] [instance name] [amount]\n");
185cac5d9cSSasha Levin 
195cac5d9cSSasha Levin 	pid = kvm__get_pid_by_instance(argv[1]);
205cac5d9cSSasha Levin 	if (pid < 0)
215cac5d9cSSasha Levin 		die("Failed locating instance name");
225cac5d9cSSasha Levin 
235cac5d9cSSasha Levin 	if (strcmp(argv[0], "inflate") == 0)
245cac5d9cSSasha Levin 		inflate = 1;
255cac5d9cSSasha Levin 	else if (strcmp(argv[0], "deflate"))
265cac5d9cSSasha Levin 		die("command can be either 'inflate' or 'deflate'");
275cac5d9cSSasha Levin 
285cac5d9cSSasha Levin 	amount = atoi(argv[2]);
295cac5d9cSSasha Levin 
305cac5d9cSSasha Levin 	for (i = 0; i < amount; i++)
315cac5d9cSSasha Levin 		kill(pid, inflate ? SIGKVMADDMEM : SIGKVMDELMEM);
325cac5d9cSSasha Levin 
335cac5d9cSSasha Levin 	return 0;
345cac5d9cSSasha Levin }
35