} else {
switch (v3_intr_pending(info)) {
case V3_EXTERNAL_IRQ: {
- uint32_t irq = v3_get_intr(info);
+ int irq = v3_get_intr(info);
+
+ if (irq<0) {
+ break;
+ }
guest_ctrl->guest_ctrl.V_IRQ = 1;
guest_ctrl->guest_ctrl.V_INTR_VECTOR = irq;
uint64_t entry_tsc = 0;
uint64_t exit_tsc = 0;
+#ifdef V3_CONFIG_PWRSTAT_TELEMETRY
+ v3_pwrstat_telemetry_enter(info);
+#endif
+
#ifdef V3_CONFIG_PMU_TELEMETRY
v3_pmu_telemetry_enter(info);
#endif
+
+
rdtscll(entry_tsc);
v3_svm_launch((vmcb_t *)V3_PAddr(info->vmm_data), &(info->vm_regs), (vmcb_t *)host_vmcbs[V3_Get_CPU()]);
#ifdef V3_CONFIG_PMU_TELEMETRY
v3_pmu_telemetry_exit(info);
#endif
+
+#ifdef V3_CONFIG_PWRSTAT_TELEMETRY
+ v3_pwrstat_telemetry_exit(info);
+#endif
+
guest_cycles = exit_tsc - entry_tsc;
}
v3_pmu_telemetry_start(info);
#endif
+#ifdef V3_CONFIG_PWRSTAT_TELEMETRY
+ v3_pwrstat_telemetry_start(info);
+#endif
+
while (1) {
if (info->vm_info->run_state == VM_STOPPED) {
#ifdef V3_CONFIG_PMU_TELEMETRY
v3_pmu_telemetry_end(info);
#endif
+
+#ifdef V3_CONFIG_PWRSTAT_TELEMETRY
+ v3_pwrstat_telemetry_end(info);
+#endif
// Need to take down the other cores on error...
return 0;