HV: Enclose debug specific code with #ifdef HV_DEBUG

Thare some debug specific code which don't run on release version, such as vmexit_time,
vmexit_cnt, sbuf related codes, etc...

This patch encloses the codes with #ifdef HV_DEBUG.

Signed-off-by: Kaige Fu <kaige.fu@intel.com>
Acked-by: Eddie Dong <eddie.dong@intel.com>
This commit is contained in:
Kaige Fu 2018-08-13 13:20:24 +08:00 committed by lijinxia
parent b0861621d9
commit b5a233da9f
4 changed files with 21 additions and 4 deletions

View File

@ -155,9 +155,11 @@ int vmcall_vmexit_handler(struct vcpu *vcpu)
ret = hcall_reset_ptdev_intr_info(vm, (uint16_t)param1, param2); ret = hcall_reset_ptdev_intr_info(vm, (uint16_t)param1, param2);
break; break;
#ifdef HV_DEBUG
case HC_SETUP_SBUF: case HC_SETUP_SBUF:
ret = hcall_setup_sbuf(vm, param1); ret = hcall_setup_sbuf(vm, param1);
break; break;
#endif
case HC_WORLD_SWITCH: case HC_WORLD_SWITCH:
ret = hcall_world_switch(vcpu); ret = hcall_world_switch(vcpu);

View File

@ -59,11 +59,13 @@ void vcpu_thread(struct vcpu *vcpu)
continue; continue;
} }
#ifdef HV_DEBUG
vmexit_end = rdtsc(); vmexit_end = rdtsc();
if (vmexit_begin != 0UL) { if (vmexit_begin != 0UL) {
per_cpu(vmexit_time, vcpu->pcpu_id)[basic_exit_reason] per_cpu(vmexit_time, vcpu->pcpu_id)[basic_exit_reason]
+= (vmexit_end - vmexit_begin); += (vmexit_end - vmexit_begin);
} }
#endif
TRACE_2L(TRACE_VM_ENTER, 0UL, 0UL); TRACE_2L(TRACE_VM_ENTER, 0UL, 0UL);
/* Restore guest TSC_AUX */ /* Restore guest TSC_AUX */
@ -79,7 +81,9 @@ void vcpu_thread(struct vcpu *vcpu)
continue; continue;
} }
#ifdef HV_DEBUG
vmexit_begin = rdtsc(); vmexit_begin = rdtsc();
#endif
vcpu->arch_vcpu.nrexits++; vcpu->arch_vcpu.nrexits++;
/* Save guest TSC_AUX */ /* Save guest TSC_AUX */
@ -90,16 +94,18 @@ void vcpu_thread(struct vcpu *vcpu)
CPU_IRQ_ENABLE(); CPU_IRQ_ENABLE();
/* Dispatch handler */ /* Dispatch handler */
ret = vmexit_handler(vcpu); ret = vmexit_handler(vcpu);
basic_exit_reason = vcpu->arch_vcpu.exit_reason & 0xFFFFU;
if (ret < 0) { if (ret < 0) {
pr_fatal("dispatch VM exit handler failed for reason" pr_fatal("dispatch VM exit handler failed for reason"
" %d, ret = %d!", " %d, ret = %d!", basic_exit_reason, ret);
vcpu->arch_vcpu.exit_reason & 0xFFFFU, ret);
vcpu_inject_gp(vcpu, 0U); vcpu_inject_gp(vcpu, 0U);
continue; continue;
} }
basic_exit_reason = vcpu->arch_vcpu.exit_reason & 0xFFFFU; #ifdef HV_DEBUG
per_cpu(vmexit_cnt, vcpu->pcpu_id)[basic_exit_reason]++; per_cpu(vmexit_cnt, vcpu->pcpu_id)[basic_exit_reason]++;
#endif
TRACE_2L(TRACE_VM_EXIT, basic_exit_reason, vcpu_get_rip(vcpu)); TRACE_2L(TRACE_VM_EXIT, basic_exit_reason, vcpu_get_rip(vcpu));
} while (1); } while (1);
} }

View File

@ -788,6 +788,7 @@ hcall_reset_ptdev_intr_info(struct vm *vm, uint16_t vmid, uint64_t param)
return ret; return ret;
} }
#ifdef HV_DEBUG
int32_t hcall_setup_sbuf(struct vm *vm, uint64_t param) int32_t hcall_setup_sbuf(struct vm *vm, uint64_t param)
{ {
struct sbuf_setup_param ssp; struct sbuf_setup_param ssp;
@ -808,6 +809,12 @@ int32_t hcall_setup_sbuf(struct vm *vm, uint64_t param)
return sbuf_share_setup(ssp.pcpu_id, ssp.sbuf_id, hva); return sbuf_share_setup(ssp.pcpu_id, ssp.sbuf_id, hva);
} }
#else
int32_t hcall_setup_sbuf(__unused struct vm *vm, __unused uint64_t param)
{
return -ENODEV;
}
#endif
int32_t hcall_get_cpu_pm_state(struct vm *vm, uint64_t cmd, uint64_t param) int32_t hcall_get_cpu_pm_state(struct vm *vm, uint64_t cmd, uint64_t param)
{ {

View File

@ -19,10 +19,12 @@
#include "arch/x86/guest/instr_emul.h" #include "arch/x86/guest/instr_emul.h"
struct per_cpu_region { struct per_cpu_region {
#ifdef HV_DEBUG
uint64_t *sbuf[ACRN_SBUF_ID_MAX]; uint64_t *sbuf[ACRN_SBUF_ID_MAX];
uint64_t irq_count[NR_IRQS];
uint64_t vmexit_cnt[64]; uint64_t vmexit_cnt[64];
uint64_t vmexit_time[64]; uint64_t vmexit_time[64];
#endif
uint64_t irq_count[NR_IRQS];
uint64_t softirq_pending; uint64_t softirq_pending;
uint64_t spurious; uint64_t spurious;
uint64_t vmxon_region_pa; uint64_t vmxon_region_pa;