}
}
+/*
+ * unconditional cpu yield
+ * if the yielding thread is a guest context, the guest quantum is reset on resumption
+ * Non guest context threads should call this function with a NULL argument
+ */
void v3_yield(struct guest_info * info) {
V3_Yield();
- rdtscll(info->yield_start_cycle);
+
+ if (info) {
+ rdtscll(info->yield_start_cycle);
+ }
}
(os_hooks)->interrupt_cpu(info, logical_cpu);
}
}
+
+
+
+int v3_vm_enter(struct guest_info * info) {
+ switch (v3_cpu_types[info->cpu_id]) {
+#ifdef CONFIG_SVM
+ case V3_SVM_CPU:
+ case V3_SVM_REV3_CPU:
+ return v3_svm_enter(info);
+ break;
+#endif
+#if CONFIG_VMX && 0
+ case V3_VMX_CPU:
+ case V3_VMX_EPT_CPU:
+ return v3_vmx_enter(info);
+ break;
+#endif
+ default:
+ PrintError("Attemping to enter a guest on an invalid CPU\n");
+ return -1;
+ }
+}