Skip to content

Commit 2d802d0

Browse files
taoyuhonglijinxia
authored andcommitted
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>
1 parent 64a9b2b commit 2d802d0

File tree

5 files changed

+31
-20
lines changed

5 files changed

+31
-20
lines changed

tools/acrn-manager/acrn_mngr.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ struct mngr_msg {
2727
int err;
2828

2929
/* ack of WAKEUP_REASON */
30-
int reason;
30+
unsigned reason;
3131

3232
/* ack of DM_QUERY */
3333
int state;

tools/acrn-manager/acrn_vm_ops.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -392,7 +392,7 @@ int suspend_vm(char *vmname)
392392
return ack.data.err;
393393
}
394394

395-
int resume_vm(char *vmname)
395+
int resume_vm(char *vmname, unsigned reason)
396396
{
397397
struct mngr_msg req;
398398
struct mngr_msg ack;
@@ -401,6 +401,8 @@ int resume_vm(char *vmname)
401401
req.msgid = DM_RESUME;
402402
req.timestamp = time(NULL);
403403

404+
req.data.reason = reason;
405+
404406
send_msg(vmname, &req, &ack);
405407

406408
if (ack.data.err) {

tools/acrn-manager/acrnctl.c

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -466,23 +466,27 @@ static int acrnctl_do_suspend(int argc, char *argv[])
466466
static int acrnctl_do_resume(int argc, char *argv[])
467467
{
468468
struct vmmngr_struct *s;
469-
int i;
469+
unsigned reason = 0;
470470

471-
for (i = 1; i < argc; i++) {
472-
s = vmmngr_find(argv[i]);
473-
if (!s) {
474-
printf("Can't find vm %s\n", argv[i]);
475-
continue;
476-
}
471+
s = vmmngr_find(argv[1]);
472+
if (!s) {
473+
printf("Can't find vm %s\n", argv[1]);
474+
return -1;
475+
}
477476

478-
switch (s->state) {
479-
case VM_PAUSED:
480-
resume_vm(argv[i]);
481-
break;
482-
default:
483-
printf("%s current state %s, can't resume\n",
484-
argv[i], state_str[s->state]);
485-
}
477+
if (argc == 3) {
478+
sscanf(argv[2], "%x", &reason);
479+
reason = (reason & (0xff << 24)) ? 0 : reason;
480+
}
481+
482+
switch (s->state) {
483+
case VM_PAUSED:
484+
resume_vm(argv[1], reason);
485+
printf("resume %s reason(0x%x\n", argv[1], reason);
486+
break;
487+
default:
488+
printf("%s current state %s, can't resume\n",
489+
argv[1], state_str[s->state]);
486490
}
487491

488492
return 0;

tools/acrn-manager/acrnctl.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,6 @@ int start_vm(char *vmname);
5656
int pause_vm(char *vmname);
5757
int continue_vm(char *vmname);
5858
int suspend_vm(char *vmname);
59-
int resume_vm(char *vmname);
59+
int resume_vm(char *vmname, unsigned reason);
6060

6161
#endif /* _ACRNCTL_H_ */

tools/acrn-manager/acrnd.c

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -105,11 +105,13 @@ static void try_do_works(void)
105105
}
106106

107107
static void acrnd_run_vm(char *name);
108+
unsigned get_sos_wakeup_reason(void);
108109

109110
/* Time to run/resume VM */
110111
void acrnd_vm_timer_func(struct work_arg *arg)
111112
{
112113
struct vmmngr_struct *vm;
114+
unsigned reason;
113115

114116
if (!arg) {
115117
pdebug();
@@ -128,7 +130,8 @@ void acrnd_vm_timer_func(struct work_arg *arg)
128130
acrnd_run_vm(arg->name);
129131
break;
130132
case VM_PAUSED:
131-
resume_vm(arg->name);
133+
reason = get_sos_wakeup_reason();
134+
resume_vm(arg->name, reason);
132135
break;
133136
default:
134137
pdebug();
@@ -235,6 +238,7 @@ static int active_all_vms(void)
235238
struct vmmngr_struct *vm;
236239
int ret = 0;
237240
pid_t pid;
241+
unsigned reason;
238242

239243
vmmngr_update();
240244

@@ -246,7 +250,8 @@ static int active_all_vms(void)
246250
acrnd_run_vm(vm->name);
247251
break;
248252
case VM_PAUSED:
249-
ret += resume_vm(vm->name);
253+
reason = get_sos_wakeup_reason();
254+
ret += resume_vm(vm->name, reason);
250255
break;
251256
default:
252257
pdebug();

0 commit comments

Comments
 (0)