tools: rework on vm ops

There are some problems to use VM operations in a deamon process,
such as Acrnd.  the list_vm() does not return VM informations, it
just print VM information to stdio, so we have get_vm_list()
to get VM list head vmngr_head; get_vm_list() always creates a
new fresh vm list every time, and must use put_vm_list() to delete
old list. So Acrnd need to create and destroy vm list frequently.
In fact we just need the vmngr_head to be an extern variable. And
to make it refreshable.We can insert new VMs, remove dead ones,
and update their state.

Reviewed-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-06-23 00:08:59 +08:00
committed by lijinxia
parent f0fe17de96
commit c4f9a2fd70
6 changed files with 224 additions and 89 deletions

View File

@@ -21,23 +21,7 @@ enum vm_state {
VM_UNTRACKED, /* VM not created by acrnctl, or its launch script can change vm name */
};
static const char *state_str[] = {
[VM_STATE_UNKNOWN] = "unknown",
[VM_CREATED] = "stopped",
[VM_STARTED] = "started",
[VM_PAUSED] = "paused",
[VM_UNTRACKED] = "untracked",
};
/**
* @brief search all vm and store it in vmmngr_head
*/
void get_vm_list(void);
/**
* @brief free all vmmngr_struct allocated by get_vm_list
*/
void put_vm_list(void);
extern const char *state_str[];
/**
* @brief search vm indentified by vm from vmmngr_head
@@ -50,11 +34,21 @@ struct vmmngr_struct *vmmngr_find(char *vmname);
struct vmmngr_struct {
char name[MAX_NAME_LEN];
unsigned long state;
unsigned long update; /* update count, remove a vm if no update for it */
LIST_ENTRY(vmmngr_struct) list;
};
int shell_cmd(const char *cmd, char *outbuf, int len);
/* update names and states of VMs in SOS
* before you stop, start, pause, resume, suspend continue a VM
* use a name, it is better to run vmmngr_update() first
* and use vmngr_find() to check is this VM is still available
*/
void vmmngr_update(void);
extern LIST_HEAD(vmmngr_list_struct, vmmngr_struct) vmmngr_head;
/* vm life cycle ops */
int list_vm(void);
int stop_vm(char *vmname);