[PATCH v2] HV: Enclose debug specific code with #ifdef HV_DEBUG #ifdef


Kaige Fu
 

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

This patch enclose these codes with #ifdef HV_DEBUG.

---
v1 -> v2:
- Enclose suf related codes with #ifdef HV_DEBUG

Signed-off-by: Kaige Fu <kaige.fu@intel.com>
---
hypervisor/common/hv_main.c | 12 +++++++++---
hypervisor/common/hypercall.c | 7 +++++++
hypervisor/include/arch/x86/per_cpu.h | 4 +++-
3 files changed, 19 insertions(+), 4 deletions(-)

diff --git a/hypervisor/common/hv_main.c b/hypervisor/common/hv_main.c
index 15f1d9d..e3657f9 100644
--- a/hypervisor/common/hv_main.c
+++ b/hypervisor/common/hv_main.c
@@ -59,11 +59,13 @@ void vcpu_thread(struct vcpu *vcpu)
continue;
}

+#ifdef HV_DEBUG
vmexit_end = rdtsc();
if (vmexit_begin != 0UL) {
per_cpu(vmexit_time, vcpu->pcpu_id)[basic_exit_reason]
+= (vmexit_end - vmexit_begin);
}
+#endif
TRACE_2L(TRACE_VM_ENTER, 0UL, 0UL);

/* Restore guest TSC_AUX */
@@ -79,7 +81,9 @@ void vcpu_thread(struct vcpu *vcpu)
continue;
}

+#ifdef HV_DEBUG
vmexit_begin = rdtsc();
+#endif

vcpu->arch_vcpu.nrexits++;
/* Save guest TSC_AUX */
@@ -90,16 +94,18 @@ void vcpu_thread(struct vcpu *vcpu)
CPU_IRQ_ENABLE();
/* Dispatch handler */
ret = vmexit_handler(vcpu);
+ basic_exit_reason = vcpu->arch_vcpu.exit_reason & 0xFFFFU;
if (ret < 0) {
pr_fatal("dispatch VM exit handler failed for reason"
- " %d, ret = %d!",
- vcpu->arch_vcpu.exit_reason & 0xFFFFU, ret);
+ " %d, ret = %d!", basic_exit_reason, ret);
vcpu_inject_gp(vcpu, 0U);
continue;
}

- basic_exit_reason = vcpu->arch_vcpu.exit_reason & 0xFFFFU;
+#ifdef HV_DEBUG
per_cpu(vmexit_cnt, vcpu->pcpu_id)[basic_exit_reason]++;
+#endif
+
TRACE_2L(TRACE_VM_EXIT, basic_exit_reason, vcpu_get_rip(vcpu));
} while (1);
}
diff --git a/hypervisor/common/hypercall.c b/hypervisor/common/hypercall.c
index f8efb35..4d9a23b 100644
--- a/hypervisor/common/hypercall.c
+++ b/hypervisor/common/hypercall.c
@@ -788,6 +788,7 @@ hcall_reset_ptdev_intr_info(struct vm *vm, uint16_t vmid, uint64_t param)
return ret;
}

+#ifdef HV_DEBUG
int32_t hcall_setup_sbuf(struct vm *vm, uint64_t param)
{
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);
}
+#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)
{
diff --git a/hypervisor/include/arch/x86/per_cpu.h b/hypervisor/include/arch/x86/per_cpu.h
index 4076e27..758f9c2 100644
--- a/hypervisor/include/arch/x86/per_cpu.h
+++ b/hypervisor/include/arch/x86/per_cpu.h
@@ -19,10 +19,12 @@
#include "arch/x86/guest/instr_emul.h"

struct per_cpu_region {
+#ifdef HV_DEBUG
uint64_t *sbuf[ACRN_SBUF_ID_MAX];
- uint64_t irq_count[NR_IRQS];
uint64_t vmexit_cnt[64];
uint64_t vmexit_time[64];
+#endif
+ uint64_t irq_count[NR_IRQS];
uint64_t softirq_pending;
uint64_t spurious;
uint64_t vmxon_region_pa;
--
2.7.4


Eddie Dong
 

-----Original Message-----
From: acrn-dev@lists.projectacrn.org
[mailto:acrn-dev@lists.projectacrn.org] On Behalf Of Kaige Fu
Sent: Tuesday, August 14, 2018 10:58 AM
To: acrn-dev@lists.projectacrn.org
Subject: [acrn-dev] [PATCH v2] 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 enclose these codes with #ifdef HV_DEBUG.

---
v1 -> v2:
- Enclose suf related codes with #ifdef HV_DEBUG

Signed-off-by: Kaige Fu <kaige.fu@intel.com>
---
hypervisor/common/hv_main.c | 12 +++++++++---
hypervisor/common/hypercall.c | 7 +++++++
hypervisor/include/arch/x86/per_cpu.h | 4 +++-
3 files changed, 19 insertions(+), 4 deletions(-)

diff --git a/hypervisor/common/hv_main.c b/hypervisor/common/hv_main.c
index 15f1d9d..e3657f9 100644
--- a/hypervisor/common/hv_main.c
+++ b/hypervisor/common/hv_main.c
@@ -59,11 +59,13 @@ void vcpu_thread(struct vcpu *vcpu)
continue;
}

+#ifdef HV_DEBUG
vmexit_end = rdtsc();
if (vmexit_begin != 0UL) {
per_cpu(vmexit_time, vcpu->pcpu_id)[basic_exit_reason]
+= (vmexit_end - vmexit_begin);
}
+#endif
TRACE_2L(TRACE_VM_ENTER, 0UL, 0UL);

/* Restore guest TSC_AUX */
@@ -79,7 +81,9 @@ void vcpu_thread(struct vcpu *vcpu)
continue;
}

+#ifdef HV_DEBUG
vmexit_begin = rdtsc();
+#endif

vcpu->arch_vcpu.nrexits++;
/* Save guest TSC_AUX */
@@ -90,16 +94,18 @@ void vcpu_thread(struct vcpu *vcpu)
CPU_IRQ_ENABLE();
/* Dispatch handler */
ret = vmexit_handler(vcpu);
+ basic_exit_reason = vcpu->arch_vcpu.exit_reason & 0xFFFFU;
if (ret < 0) {
pr_fatal("dispatch VM exit handler failed for reason"
- " %d, ret = %d!",
- vcpu->arch_vcpu.exit_reason & 0xFFFFU, ret);
+ " %d, ret = %d!", basic_exit_reason, ret);
vcpu_inject_gp(vcpu, 0U);
continue;
}

- basic_exit_reason = vcpu->arch_vcpu.exit_reason & 0xFFFFU;
+#ifdef HV_DEBUG
per_cpu(vmexit_cnt, vcpu->pcpu_id)[basic_exit_reason]++;
+#endif
+
TRACE_2L(TRACE_VM_EXIT, basic_exit_reason,
vcpu_get_rip(vcpu));
} while (1);
}
diff --git a/hypervisor/common/hypercall.c
b/hypervisor/common/hypercall.c index f8efb35..4d9a23b 100644
--- a/hypervisor/common/hypercall.c
+++ b/hypervisor/common/hypercall.c
@@ -788,6 +788,7 @@ hcall_reset_ptdev_intr_info(struct vm *vm, uint16_t
vmid, uint64_t param)
return ret;
}

+#ifdef HV_DEBUG
int32_t hcall_setup_sbuf(struct vm *vm, uint64_t param) {
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); }
+#else
+int32_t hcall_setup_sbuf(__unused struct vm *vm, __unused uint64_t
+param) {
+ return -ENODEV;
+}
+#endif
We also need to do this compile option protection in vmcall.c side for HC_SETUP_SBUF.


The rest is fine. Fixed it and PR with my ack.


int32_t hcall_get_cpu_pm_state(struct vm *vm, uint64_t cmd, uint64_t
param) { diff --git a/hypervisor/include/arch/x86/per_cpu.h
b/hypervisor/include/arch/x86/per_cpu.h
index 4076e27..758f9c2 100644
--- a/hypervisor/include/arch/x86/per_cpu.h
+++ b/hypervisor/include/arch/x86/per_cpu.h
@@ -19,10 +19,12 @@
#include "arch/x86/guest/instr_emul.h"

struct per_cpu_region {
+#ifdef HV_DEBUG
uint64_t *sbuf[ACRN_SBUF_ID_MAX];
- uint64_t irq_count[NR_IRQS];
uint64_t vmexit_cnt[64];
uint64_t vmexit_time[64];
+#endif
+ uint64_t irq_count[NR_IRQS];
uint64_t softirq_pending;
uint64_t spurious;
uint64_t vmxon_region_pa;
--
2.7.4



Kaige Fu
 

On 08-14 Tue 03:44, Eddie Dong wrote:


-----Original Message-----
From: acrn-dev@lists.projectacrn.org
[mailto:acrn-dev@lists.projectacrn.org] On Behalf Of Kaige Fu
Sent: Tuesday, August 14, 2018 10:58 AM
To: acrn-dev@lists.projectacrn.org
Subject: [acrn-dev] [PATCH v2] 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 enclose these codes with #ifdef HV_DEBUG.

---
v1 -> v2:
- Enclose suf related codes with #ifdef HV_DEBUG

Signed-off-by: Kaige Fu <kaige.fu@intel.com>
---
hypervisor/common/hv_main.c | 12 +++++++++---
hypervisor/common/hypercall.c | 7 +++++++
hypervisor/include/arch/x86/per_cpu.h | 4 +++-
3 files changed, 19 insertions(+), 4 deletions(-)

diff --git a/hypervisor/common/hv_main.c b/hypervisor/common/hv_main.c
index 15f1d9d..e3657f9 100644
--- a/hypervisor/common/hv_main.c
+++ b/hypervisor/common/hv_main.c
@@ -59,11 +59,13 @@ void vcpu_thread(struct vcpu *vcpu)
continue;
}

+#ifdef HV_DEBUG
vmexit_end = rdtsc();
if (vmexit_begin != 0UL) {
per_cpu(vmexit_time, vcpu->pcpu_id)[basic_exit_reason]
+= (vmexit_end - vmexit_begin);
}
+#endif
TRACE_2L(TRACE_VM_ENTER, 0UL, 0UL);

/* Restore guest TSC_AUX */
@@ -79,7 +81,9 @@ void vcpu_thread(struct vcpu *vcpu)
continue;
}

+#ifdef HV_DEBUG
vmexit_begin = rdtsc();
+#endif

vcpu->arch_vcpu.nrexits++;
/* Save guest TSC_AUX */
@@ -90,16 +94,18 @@ void vcpu_thread(struct vcpu *vcpu)
CPU_IRQ_ENABLE();
/* Dispatch handler */
ret = vmexit_handler(vcpu);
+ basic_exit_reason = vcpu->arch_vcpu.exit_reason & 0xFFFFU;
if (ret < 0) {
pr_fatal("dispatch VM exit handler failed for reason"
- " %d, ret = %d!",
- vcpu->arch_vcpu.exit_reason & 0xFFFFU, ret);
+ " %d, ret = %d!", basic_exit_reason, ret);
vcpu_inject_gp(vcpu, 0U);
continue;
}

- basic_exit_reason = vcpu->arch_vcpu.exit_reason & 0xFFFFU;
+#ifdef HV_DEBUG
per_cpu(vmexit_cnt, vcpu->pcpu_id)[basic_exit_reason]++;
+#endif
+
TRACE_2L(TRACE_VM_EXIT, basic_exit_reason,
vcpu_get_rip(vcpu));
} while (1);
}
diff --git a/hypervisor/common/hypercall.c
b/hypervisor/common/hypercall.c index f8efb35..4d9a23b 100644
--- a/hypervisor/common/hypercall.c
+++ b/hypervisor/common/hypercall.c
@@ -788,6 +788,7 @@ hcall_reset_ptdev_intr_info(struct vm *vm, uint16_t
vmid, uint64_t param)
return ret;
}

+#ifdef HV_DEBUG
int32_t hcall_setup_sbuf(struct vm *vm, uint64_t param) {
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); }
+#else
+int32_t hcall_setup_sbuf(__unused struct vm *vm, __unused uint64_t
+param) {
+ return -ENODEV;
+}
+#endif
We also need to do this compile option protection in vmcall.c side for HC_SETUP_SBUF.


The rest is fine. Fixed it and PR with my ack.
Will fix it when PR.


int32_t hcall_get_cpu_pm_state(struct vm *vm, uint64_t cmd, uint64_t
param) { diff --git a/hypervisor/include/arch/x86/per_cpu.h
b/hypervisor/include/arch/x86/per_cpu.h
index 4076e27..758f9c2 100644
--- a/hypervisor/include/arch/x86/per_cpu.h
+++ b/hypervisor/include/arch/x86/per_cpu.h
@@ -19,10 +19,12 @@
#include "arch/x86/guest/instr_emul.h"

struct per_cpu_region {
+#ifdef HV_DEBUG
uint64_t *sbuf[ACRN_SBUF_ID_MAX];
- uint64_t irq_count[NR_IRQS];
uint64_t vmexit_cnt[64];
uint64_t vmexit_time[64];
+#endif
+ uint64_t irq_count[NR_IRQS];
uint64_t softirq_pending;
uint64_t spurious;
uint64_t vmxon_region_pa;
--
2.7.4