tools: vm_resume() requires wakeup reason

DM need to know wakeup reason when resume the VM, so
vm_resume(char *name) is updated to vm_resume(char *name, unsigned reason),
in acrn_vm_ops.c

Acked-by: Yan Like <like.yan@intel.com>
Signed-off-by: Tao Yuhong <yuhong.tao@intel.com>
This commit is contained in:
yuhong.tao@intel.com 2018-08-10 18:31:55 +08:00 committed by lijinxia
parent 64a9b2b423
commit 2d802d0afe
5 changed files with 31 additions and 20 deletions

View File

@ -27,7 +27,7 @@ struct mngr_msg {
int err; int err;
/* ack of WAKEUP_REASON */ /* ack of WAKEUP_REASON */
int reason; unsigned reason;
/* ack of DM_QUERY */ /* ack of DM_QUERY */
int state; int state;

View File

@ -392,7 +392,7 @@ int suspend_vm(char *vmname)
return ack.data.err; return ack.data.err;
} }
int resume_vm(char *vmname) int resume_vm(char *vmname, unsigned reason)
{ {
struct mngr_msg req; struct mngr_msg req;
struct mngr_msg ack; struct mngr_msg ack;
@ -401,6 +401,8 @@ int resume_vm(char *vmname)
req.msgid = DM_RESUME; req.msgid = DM_RESUME;
req.timestamp = time(NULL); req.timestamp = time(NULL);
req.data.reason = reason;
send_msg(vmname, &req, &ack); send_msg(vmname, &req, &ack);
if (ack.data.err) { if (ack.data.err) {

View File

@ -466,23 +466,27 @@ static int acrnctl_do_suspend(int argc, char *argv[])
static int acrnctl_do_resume(int argc, char *argv[]) static int acrnctl_do_resume(int argc, char *argv[])
{ {
struct vmmngr_struct *s; struct vmmngr_struct *s;
int i; unsigned reason = 0;
for (i = 1; i < argc; i++) { s = vmmngr_find(argv[1]);
s = vmmngr_find(argv[i]); if (!s) {
if (!s) { printf("Can't find vm %s\n", argv[1]);
printf("Can't find vm %s\n", argv[i]); return -1;
continue; }
}
switch (s->state) { if (argc == 3) {
case VM_PAUSED: sscanf(argv[2], "%x", &reason);
resume_vm(argv[i]); reason = (reason & (0xff << 24)) ? 0 : reason;
break; }
default:
printf("%s current state %s, can't resume\n", switch (s->state) {
argv[i], state_str[s->state]); case VM_PAUSED:
} resume_vm(argv[1], reason);
printf("resume %s reason(0x%x\n", argv[1], reason);
break;
default:
printf("%s current state %s, can't resume\n",
argv[1], state_str[s->state]);
} }
return 0; return 0;

View File

@ -56,6 +56,6 @@ int start_vm(char *vmname);
int pause_vm(char *vmname); int pause_vm(char *vmname);
int continue_vm(char *vmname); int continue_vm(char *vmname);
int suspend_vm(char *vmname); int suspend_vm(char *vmname);
int resume_vm(char *vmname); int resume_vm(char *vmname, unsigned reason);
#endif /* _ACRNCTL_H_ */ #endif /* _ACRNCTL_H_ */

View File

@ -105,11 +105,13 @@ static void try_do_works(void)
} }
static void acrnd_run_vm(char *name); static void acrnd_run_vm(char *name);
unsigned get_sos_wakeup_reason(void);
/* Time to run/resume VM */ /* Time to run/resume VM */
void acrnd_vm_timer_func(struct work_arg *arg) void acrnd_vm_timer_func(struct work_arg *arg)
{ {
struct vmmngr_struct *vm; struct vmmngr_struct *vm;
unsigned reason;
if (!arg) { if (!arg) {
pdebug(); pdebug();
@ -128,7 +130,8 @@ void acrnd_vm_timer_func(struct work_arg *arg)
acrnd_run_vm(arg->name); acrnd_run_vm(arg->name);
break; break;
case VM_PAUSED: case VM_PAUSED:
resume_vm(arg->name); reason = get_sos_wakeup_reason();
resume_vm(arg->name, reason);
break; break;
default: default:
pdebug(); pdebug();
@ -235,6 +238,7 @@ static int active_all_vms(void)
struct vmmngr_struct *vm; struct vmmngr_struct *vm;
int ret = 0; int ret = 0;
pid_t pid; pid_t pid;
unsigned reason;
vmmngr_update(); vmmngr_update();
@ -246,7 +250,8 @@ static int active_all_vms(void)
acrnd_run_vm(vm->name); acrnd_run_vm(vm->name);
break; break;
case VM_PAUSED: case VM_PAUSED:
ret += resume_vm(vm->name); reason = get_sos_wakeup_reason();
ret += resume_vm(vm->name, reason);
break; break;
default: default:
pdebug(); pdebug();