From 8c2ab95f4942e4f26366f1544ec3820e67797611 Mon Sep 17 00:00:00 2001 From: Tao Yuhong Date: Wed, 23 Jan 2019 23:06:28 +0800 Subject: [PATCH] tools: acrnd: fix wait_for_stop() return wrong vm state Ported form apl_sdc_stable branch. The wait_for_stop() first check if all VM are stopped or suspended. It first check if VMs are stopped, then check if they are suspend. If the VMs change state from running to stoped, after check VMs stopped fail, before start check suspend state. wait_for_stop() will mistake resopnse 'All vms have entered S3 state successfully' To fix that, wait_for_stop() must only update VMs's state once, and see if they are stopped, or suspended. Tracked-On: #2398 Signed-off-by: Tao Yuhong Signed-off-by: Wei Liu Reviewed-by: Yin Fengwei Acked-by: Yan, Like --- tools/acrn-manager/acrnd.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/acrn-manager/acrnd.c b/tools/acrn-manager/acrnd.c index 5db66d6833..f1cf798a21 100644 --- a/tools/acrn-manager/acrnd.c +++ b/tools/acrn-manager/acrnd.c @@ -453,10 +453,8 @@ static int check_vms_status(unsigned int status) { struct vmmngr_struct *s; - vmmngr_update(); - LIST_FOREACH(s, &vmmngr_head, list) - if (s->state != status && s->state != VM_CREATED) + if (s->state != status) return -1; return 0; @@ -470,6 +468,8 @@ static int wait_for_stop(unsigned int timeout) /* list and update the vm status */ do { + vmmngr_update(); + printf("Waiting %lu seconds for all vms enter S3/S5 state\n", t); if (check_vms_status(VM_CREATED) == 0) {