hv: debug: show vcpu thread status in vcpu_list debug command

Due to vcpu and its thread are two different perspective modules, each
of them has its own status. Dump both states for better understanding
of system status.

Tracked-On: #4329
Signed-off-by: Shuo A Liu <shuo.a.liu@intel.com>
Acked-by: Eddie Dong <eddie.dong@intel.com>
This commit is contained in:
Shuo A Liu 2020-01-08 09:20:18 +08:00 committed by wenlingz
parent db708fc3e8
commit 3edde2608c
1 changed files with 26 additions and 10 deletions

View File

@ -637,12 +637,12 @@ static int32_t shell_list_vcpu(__unused int32_t argc, __unused char **argv)
char temp_str[MAX_STR_SIZE]; char temp_str[MAX_STR_SIZE];
struct acrn_vm *vm; struct acrn_vm *vm;
struct acrn_vcpu *vcpu; struct acrn_vcpu *vcpu;
char state[32]; char vcpu_state_str[32], thread_state_str[32];
uint16_t i; uint16_t i;
uint16_t idx; uint16_t idx;
shell_puts("\r\nVM ID PCPU ID VCPU ID VCPU ROLE VCPU STATE" shell_puts("\r\nVM ID PCPU ID VCPU ID VCPU ROLE VCPU STATE THREAD STATE"
"\r\n===== ======= ======= ========= ==========\r\n"); "\r\n===== ======= ======= ========= ========== ==========\r\n");
for (idx = 0U; idx < CONFIG_MAX_VM_NUM; idx++) { for (idx = 0U; idx < CONFIG_MAX_VM_NUM; idx++) {
vm = get_vm_from_vmid(idx); vm = get_vm_from_vmid(idx);
@ -652,31 +652,47 @@ static int32_t shell_list_vcpu(__unused int32_t argc, __unused char **argv)
foreach_vcpu(i, vm, vcpu) { foreach_vcpu(i, vm, vcpu) {
switch (vcpu->state) { switch (vcpu->state) {
case VCPU_INIT: case VCPU_INIT:
(void)strncpy_s(state, 32U, "Init", 32U); (void)strncpy_s(vcpu_state_str, 32U, "Init", 32U);
break; break;
case VCPU_PAUSED: case VCPU_PAUSED:
(void)strncpy_s(state, 32U, "Paused", 32U); (void)strncpy_s(vcpu_state_str, 32U, "Paused", 32U);
break; break;
case VCPU_RUNNING: case VCPU_RUNNING:
(void)strncpy_s(state, 32U, "Running", 32U); (void)strncpy_s(vcpu_state_str, 32U, "Running", 32U);
break; break;
case VCPU_ZOMBIE: case VCPU_ZOMBIE:
(void)strncpy_s(state, 32U, "Zombie", 32U); (void)strncpy_s(vcpu_state_str, 32U, "Zombie", 32U);
break; break;
default: default:
(void)strncpy_s(state, 32U, "Unknown", 32U); (void)strncpy_s(vcpu_state_str, 32U, "Unknown", 32U);
break;
}
switch (vcpu->thread_obj.status) {
case THREAD_STS_RUNNING:
(void)strncpy_s(thread_state_str, 32U, "RUNNING", 32U);
break;
case THREAD_STS_RUNNABLE:
(void)strncpy_s(thread_state_str, 32U, "RUNNABLE", 32U);
break;
case THREAD_STS_BLOCKED:
(void)strncpy_s(thread_state_str, 32U, "BLOCKED", 32U);
break;
default:
(void)strncpy_s(thread_state_str, 32U, "UNKNOWN", 32U);
break;
} }
/* Create output string consisting of VM name /* Create output string consisting of VM name
* and VM id * and VM id
*/ */
snprintf(temp_str, MAX_STR_SIZE, snprintf(temp_str, MAX_STR_SIZE,
" %-9d %-10d %-7hu %-12s %-16s\r\n", " %-9d %-10d %-7hu %-12s %-16s %-16s\r\n",
vm->vm_id, vm->vm_id,
pcpuid_from_vcpu(vcpu), pcpuid_from_vcpu(vcpu),
vcpu->vcpu_id, vcpu->vcpu_id,
is_vcpu_bsp(vcpu) ? is_vcpu_bsp(vcpu) ?
"PRIMARY" : "SECONDARY", "PRIMARY" : "SECONDARY",
state); vcpu_state_str, thread_state_str);
/* Output information for this task */ /* Output information for this task */
shell_puts(temp_str); shell_puts(temp_str);
} }