tools: acrnctl: Add support for continuing vm

Add command continue to start vm from pause state.

Signed-off-by: Kaige Fu <kaige.fu@intel.com>
Reviewed-by: Geoffroy Van Cutsem <geoffroy.vancutsem@intel.com>
Reviewed-by: Yan, Like <like.yan@intel.com>
Acked-by: Eddie Dong <eddie.dong@intel.com>
This commit is contained in:
Kaige Fu 2018-05-31 10:30:25 +08:00 committed by lijinxia
parent 1933d60c29
commit 665c2ee93f
4 changed files with 53 additions and 0 deletions

View File

@ -28,6 +28,7 @@ You can see the available ``acrnctl`` commands by running:
del del
add add
pause pause
continue
Use acrnctl [cmd] help for details Use acrnctl [cmd] help for details
Here are some usage examples: Here are some usage examples:

View File

@ -220,3 +220,23 @@ int pause_vm(char *vmname)
return ack.err; return ack.err;
} }
int continue_vm(char *vmname)
{
struct req_dm_continue req;
struct ack_dm_continue ack;
req.msg.magic = MNGR_MSG_MAGIC;
req.msg.msgid = DM_CONTINUE;
req.msg.timestamp = time(NULL);
req.msg.len = sizeof(req);
send_msg(vmname, (struct mngr_msg *)&req,
(struct mngr_msg *)&ack, sizeof(ack));
if (ack.err) {
printf("Unable to continue vm. errno(%d)\n", ack.err);
}
return ack.err;
}

View File

@ -33,6 +33,7 @@
#define DEL_DESC "Delete virtual machine VM_NAME" #define DEL_DESC "Delete virtual machine VM_NAME"
#define ADD_DESC "Add one virtual machine with SCRIPTS and OPTIONS" #define ADD_DESC "Add one virtual machine with SCRIPTS and OPTIONS"
#define PAUSE_DESC "Block all vCPUs of virtual machine VM_NAME" #define PAUSE_DESC "Block all vCPUs of virtual machine VM_NAME"
#define CONTINUE_DESC "Start virtual machine from pause state"
struct acrnctl_cmd { struct acrnctl_cmd {
const char *cmd; const char *cmd;
@ -404,6 +405,35 @@ static int acrnctl_do_pause(int argc, char *argv[])
return 0; return 0;
} }
static int acrnctl_do_continue(int argc, char *argv[])
{
struct vmmngr_struct *s;
int i;
for (i = 1; i < argc; i++) {
s = vmmngr_find(argv[i]);
if (!s) {
printf("Can't find vm %s\n", argv[i]);
continue;
}
/* Per current implemention, we can't know if vm is in paused
state. Send continue cmd to acrn-dm when VM_STARTED and will
correct it later when we have a way to check if vm has been
paused */
switch (s->state) {
case VM_STARTED:
continue_vm(argv[i]);
break;
default:
printf("%s current state %s, can't continue\n",
argv[i], state_str[s->state]);
}
}
return 0;
}
/* Default args validation function */ /* Default args validation function */
int df_valid_args(struct acrnctl_cmd *cmd, int argc, char *argv[]) int df_valid_args(struct acrnctl_cmd *cmd, int argc, char *argv[])
{ {
@ -458,6 +488,7 @@ struct acrnctl_cmd acmds[] = {
ACMD("del", acrnctl_do_del, DEL_DESC, df_valid_args), ACMD("del", acrnctl_do_del, DEL_DESC, df_valid_args),
ACMD("add", acrnctl_do_add, ADD_DESC, valid_add_args), ACMD("add", acrnctl_do_add, ADD_DESC, valid_add_args),
ACMD("pause", acrnctl_do_pause, PAUSE_DESC, df_valid_args), ACMD("pause", acrnctl_do_pause, PAUSE_DESC, df_valid_args),
ACMD("continue", acrnctl_do_continue, CONTINUE_DESC, df_valid_args),
}; };
#define NCMD (sizeof(acmds)/sizeof(struct acrnctl_cmd)) #define NCMD (sizeof(acmds)/sizeof(struct acrnctl_cmd))

View File

@ -60,5 +60,6 @@ int list_vm(void);
int stop_vm(char *vmname); int stop_vm(char *vmname);
int start_vm(char *vmname); int start_vm(char *vmname);
int pause_vm(char *vmname); int pause_vm(char *vmname);
int continue_vm(char *vmname);
#endif /* _ACRNCTL_H_ */ #endif /* _ACRNCTL_H_ */