mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2025-06-22 21:47:22 +00:00
tools: acrn-manager: fix acrnctl reset issue
Wait for targeting VM stopping before starting it again Tracked-On: projectacrn/acrn-hypervisor#926 Signed-off-by: Yan, Like <like.yan@intel.com> Acked-by: Yin Fengwei <fengwei.yin@intel.com>
This commit is contained in:
parent
f42209c567
commit
4ae88bb676
@ -50,7 +50,7 @@ static pthread_mutex_t vmmngr_mutex = PTHREAD_MUTEX_INITIALIZER;
|
||||
struct vmmngr_list_struct vmmngr_head;
|
||||
static unsigned long update_count = 0;
|
||||
|
||||
struct vmmngr_struct *vmmngr_find(char *name)
|
||||
struct vmmngr_struct *vmmngr_find(const char *name)
|
||||
{
|
||||
struct vmmngr_struct *s;
|
||||
|
||||
|
@ -38,6 +38,8 @@
|
||||
#define RESUME_DESC "Resume virtual machine from suspend state"
|
||||
#define RESET_DESC "Stop and then start virtual machine VM_NAME"
|
||||
|
||||
#define STOP_TIMEOUT 10U
|
||||
|
||||
struct acrnctl_cmd {
|
||||
const char *cmd;
|
||||
const char desc[128]; /* Description of the cmd */
|
||||
@ -492,6 +494,25 @@ static int acrnctl_do_resume(int argc, char *argv[])
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int wait_vm_stop(const char * vmname, unsigned int timeout)
|
||||
{
|
||||
unsigned long t = timeout;
|
||||
struct vmmngr_struct *s;
|
||||
|
||||
do {
|
||||
/* list and update the vm status */
|
||||
vmmngr_update();
|
||||
|
||||
s = vmmngr_find(vmname);
|
||||
if (s->state == VM_CREATED)
|
||||
return 0;
|
||||
|
||||
sleep(1);
|
||||
} while (t--);
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
static int acrnctl_do_reset(int argc, char *argv[])
|
||||
{
|
||||
struct vmmngr_struct *s;
|
||||
@ -511,6 +532,11 @@ static int acrnctl_do_reset(int argc, char *argv[])
|
||||
case VM_STARTED:
|
||||
case VM_PAUSED:
|
||||
stop_vm(argv[i]);
|
||||
if (wait_vm_stop(argv[i], STOP_TIMEOUT)) {
|
||||
printf("Failed to stop %s in %u sec\n",
|
||||
argv[i], STOP_TIMEOUT);
|
||||
break;
|
||||
}
|
||||
start_vm(argv[i]);
|
||||
break;
|
||||
default:
|
||||
|
@ -28,7 +28,7 @@ extern const char *state_str[];
|
||||
*
|
||||
* @return vmmngr_struct * if find, NULL not find
|
||||
*/
|
||||
struct vmmngr_struct *vmmngr_find(char *vmname);
|
||||
struct vmmngr_struct *vmmngr_find(const char *vmname);
|
||||
|
||||
/* Per-vm vm managerment struct */
|
||||
struct vmmngr_struct {
|
||||
|
Loading…
Reference in New Issue
Block a user