From 59fd4202d3e392044b42e90fda2f0999e6376dcd Mon Sep 17 00:00:00 2001 From: "yuhong.tao@intel.com" Date: Thu, 27 Jun 2019 14:05:02 +0000 Subject: [PATCH] tools: add force parameter to acrn VM stop operations Add 'force' parameter to acrn_stop(), which will be write to request message, the value of data.acrnd_stop.force. So we can tell DM to force stop VM, instead of telling UOS to shutdown itself. Tracked-On: #3484 Signed-off-by: Tao Yuhong Acked-by: Yan, Like --- misc/acrn-manager/acrn_vm_ops.c | 3 ++- misc/acrn-manager/acrnctl.c | 5 +++-- misc/acrn-manager/acrnctl.h | 2 +- misc/acrn-manager/acrnd.c | 2 +- 4 files changed, 7 insertions(+), 5 deletions(-) diff --git a/misc/acrn-manager/acrn_vm_ops.c b/misc/acrn-manager/acrn_vm_ops.c index 7e7dd2651..9b986a7e7 100644 --- a/misc/acrn-manager/acrn_vm_ops.c +++ b/misc/acrn-manager/acrn_vm_ops.c @@ -366,7 +366,7 @@ int start_vm(const char *vmname) return system(cmd); } -int stop_vm(const char *vmname) +int stop_vm(const char *vmname, int force) { struct mngr_msg req; struct mngr_msg ack; @@ -374,6 +374,7 @@ int stop_vm(const char *vmname) req.magic = MNGR_MSG_MAGIC; req.msgid = DM_STOP; req.timestamp = time(NULL); + req.data.acrnd_stop.force = force; send_msg(vmname, &req, &ack); if (ack.data.err) { diff --git a/misc/acrn-manager/acrnctl.c b/misc/acrn-manager/acrnctl.c index 469bec0f8..e55a43722 100644 --- a/misc/acrn-manager/acrnctl.c +++ b/misc/acrn-manager/acrnctl.c @@ -442,6 +442,7 @@ static int acrnctl_do_blkrescan(int argc, char *argv[]) static int acrnctl_do_stop(int argc, char *argv[]) { struct vmmngr_struct *s; + int force = 0; s = vmmngr_find(argv[1]); if (!s) { @@ -452,7 +453,7 @@ static int acrnctl_do_stop(int argc, char *argv[]) printf("%s is already (%s)\n", argv[1], state_str[s->state]); return -1; } - return stop_vm(argv[1]); + return stop_vm(argv[1], force); } @@ -697,7 +698,7 @@ static int acrnctl_do_reset(int argc, char *argv[]) switch(s->state) { case VM_STARTED: case VM_SUSPENDED: - ret = stop_vm(argv[1]); + ret = stop_vm(argv[1], 0); if (ret != 0) { break; } diff --git a/misc/acrn-manager/acrnctl.h b/misc/acrn-manager/acrnctl.h index 3de7c92de..9f514fd00 100644 --- a/misc/acrn-manager/acrnctl.h +++ b/misc/acrn-manager/acrnctl.h @@ -52,7 +52,7 @@ extern struct vmmngr_list_struct vmmngr_head; /* vm life cycle ops */ int list_vm(void); -int stop_vm(const char *vmname); +int stop_vm(const char *vmname, int force); int start_vm(const char *vmname); int pause_vm(const char *vmname); int continue_vm(const char *vmname); diff --git a/misc/acrn-manager/acrnd.c b/misc/acrn-manager/acrnd.c index 3e8f527af..5dfbf394b 100644 --- a/misc/acrn-manager/acrnd.c +++ b/misc/acrn-manager/acrnd.c @@ -289,7 +289,7 @@ static void stop_all_vms(void) vmmngr_update(); LIST_FOREACH(vm, &vmmngr_head, list) { - err = stop_vm(vm->name); + err = stop_vm(vm->name, 0); if (err != 0) { fprintf(stderr, "Fail to send stop cmd to vm %s\n", vm->name); } else {