mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2025-06-23 14:07:42 +00:00
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:
parent
1933d60c29
commit
665c2ee93f
@ -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:
|
||||||
|
@ -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;
|
||||||
|
}
|
||||||
|
@ -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))
|
||||||
|
@ -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_ */
|
||||||
|
Loading…
Reference in New Issue
Block a user