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