#include <palacios/vmm_cpuid.h>
#include <palacios/vmm_direct_paging.h>
+#ifdef CONFIG_VNET
+#include <palacios/vmm_vnet.h>
+#endif
+
+#ifdef CONFIG_LINUX_VIRTIO_NET
+ extern int v3_virtionic_pktprocess(struct guest_info * info);
+#endif
#ifdef CONFIG_TELEMETRY
#include <palacios/vmm_telemetry.h>
#endif
-
int v3_handle_svm_exit(struct guest_info * info, addr_t exit_code, addr_t exit_info1, addr_t exit_info2) {
#ifdef CONFIG_TELEMETRY
}
#endif
-
//PrintDebug("SVM Returned: Exit Code: %x\n",exit_code);
switch (exit_code) {
info->rip += 3;
if (v3_handle_hypercall(info) == -1) {
+ PrintError("Error handling Hypercall\n");
return -1;
}
-
+
break;
case VMEXIT_INTR:
// handled by interrupt dispatch earlier
}
break;
case VMEXIT_PAUSE:
- PrintDebug("Guest paused\n");
+ // PrintDebug("Guest paused\n");
if (v3_handle_svm_pause(info) == -1) {
return -1;
}
}
// END OF SWITCH (EXIT_CODE)
+
+#ifdef CONFIG_VNET
+ v3_vnet_pkt_process(info);
+#endif
+
+#ifdef CONFIG_LINUX_VIRTIO_NET
+ v3_virtionic_pktprocess(info);
+#endif
+
#ifdef CONFIG_TELEMETRY
if (info->enable_telemetry) {
v3_telemetry_end_exit(info, exit_code);
if (exit_code == VMEXIT_INTR) {
//PrintDebug("INTR ret IP = %x\n", guest_state->rip);
}
+
return 0;
}