#include <palacios/vmm_checkpoint.h>
#endif
-
v3_cpu_arch_t v3_cpu_types[V3_CONFIG_MAX_CPUS];
v3_cpu_arch_t v3_mach_type = V3_INVALID_CPU;
v3_cpu_types[i] = V3_INVALID_CPU;
}
+#ifdef V3_CONFIG_CACHEPART
+ v3_init_cachepart();
+#endif
+
// Parse host-os defined options into an easily-accessed format.
v3_parse_options(options);
v3_init_hvm();
#endif
+
// Memory manager initialization
v3_init_mem();
v3_deinit_options();
+#ifdef V3_CONFIG_CACHEPART
+ v3_deinit_cachepart();
+#endif
}
PrintDebug(vm, VCORE_NONE, "Creating virtual core %u on logical core %u\n",
vcore_id, core->pcpu_id);
- sprintf(core->exec_name, "%s-%u", vm->name, vcore_id);
+ sprintf(core->exec_name, "%s-%d", vm->name, vcore_id);
PrintDebug(vm, VCORE_NONE, "run: core=%u, func=0x%p, arg=0x%p, name=%s\n",
core->pcpu_id, start_core, core, core->exec_name);
- core->core_thread = V3_CREATE_THREAD_ON_CPU(core->pcpu_id, start_core, core, core->exec_name);
+
+ // Resource controls for cores can be independent, but
+ // currently are not, hence this copy.
+ core->resource_control = vm->resource_control;
+
+ core->core_thread = V3_CREATE_THREAD_ON_CPU(core->pcpu_id, start_core, core, core->exec_name, &core->resource_control);
if (core->core_thread == NULL) {
PrintError(vm, VCORE_NONE, "Thread creation failed\n");
#endif
break;
case V3_VM_RESET_CORE_RANGE:
- start = ((uint32_t*)data)[0];
- end = ((uint32_t*)data)[1];
+ if (data) {
+ start = ((uint32_t*)data)[0];
+ end = ((uint32_t*)data)[1];
+ } else {
+ return -1;
+ }
break;
default:
PrintError(vm,VCORE_NONE,"Unsupported reset type %d for this VM\n",t);
new_hpa = V3_AllocPagesExtended(num_pages,
PAGE_SIZE_4KB,
new_node,
- 0, 0); // no constraints given new shadow pager impl
+ vm->resource_control.pg_filter_func,
+ vm->resource_control.pg_filter_state);
if (!new_hpa) {
PrintError(vm, VCORE_NONE, "Cannot allocate memory for new base region...\n");