switch (v3_cpu_types[cpu_id]) {
- #ifdef CONFIG_SVM
- case V3_VMX_CPU:
- case V3_VMX_EPT_CPU:
- PrintDebug("Machine is SVM Capable\n");
+#ifdef CONFIG_SVM
+ case V3_SVM_CPU:
+ case V3_SVM_REV3_CPU:
+ PrintDebug("Deinitializing SVM CPU %d\n", cpu_id);
v3_deinit_svm_cpu(cpu_id);
break;
#endif
#ifdef CONFIG_VMX
- case V3_SVM_CPU:
- case V3_SVM_REV3_CPU:
- PrintDebug("Machine is VMX Capable\n");
+ case V3_VMX_CPU:
+ case V3_VMX_EPT_CPU:
+ PrintDebug("Deinitializing VMX CPU %d\n", cpu_id);
v3_deinit_vmx_cpu(cpu_id);
break;
#endif
struct v3_vm_info * v3_create_vm(void * cfg, void * priv_data, char * name) {
struct v3_vm_info * vm = v3_config_guest(cfg, priv_data);
- V3_Print("CORE 0 RIP=%p\n", (void *)(addr_t)(vm->cores[0].rip));
-
-
if (vm == NULL) {
PrintError("Could not configure guest\n");
return NULL;
}
+ V3_Print("CORE 0 RIP=%p\n", (void *)(addr_t)(vm->cores[0].rip));
+
if (name == NULL) {
name = "[V3_VM]";
} else if (strlen(name) >= 128) {
i--; // We reset the logical core idx. Not strictly necessary I guess...
} else {
+
+ /* This assumes that the core 0 thread has been mapped to physical core 0 */
+ if (i == V3_Get_CPU()) {
+ // We skip the local CPU because it is reserved for vcore 0
+ continue;
+ }
+
core_idx = i;
}
major = core_idx / 8;
minor = core_idx % 8;
- /* This assumes that the core 0 thread has been mapped to physical core 0 */
- if (core_idx == V3_Get_CPU()) {
- // We skip the local CPU because it is reserved for vcore 0
- continue;
- }
-
if ((core_mask[major] & (0x1 << minor)) == 0) {
PrintError("Logical CPU %d not available for virtual core %d; not started\n",
break;
}
- V3_Print("Yielding\n");
-
v3_yield(NULL);
}