return 0;
}
-static int pre_config_core(struct guest_info * info, v3_cfg_tree_t * core_cfg) {
+static int determine_paging_mode(struct guest_info *info, v3_cfg_tree_t * core_cfg)
+{
extern v3_cpu_arch_t v3_cpu_types[];
- v3_cfg_tree_t * paging_cfg = v3_cfg_subtree(core_cfg, "paging");
- char * paging = v3_cfg_val(paging_cfg, NULL);
- if (paging) {
- if ((strcasecmp(paging, "nested") == 0)) {
+ v3_cfg_tree_t *vm_tree = info->vm_info->cfg_data->cfg;
+ v3_cfg_tree_t *pg_tree = v3_cfg_subtree(vm_tree, "paging");
+ char *pg_type = v3_cfg_val(pg_tree, "type");
+ char *pg_mode = v3_cfg_val(pg_tree, "mode");
+
+ PrintDebug("Paging mode specified as %s(%s)\n", pg_type, pg_mode);
+
+ if (pg_type) {
+ if ((strcasecmp(pg_type, "nested") == 0)) {
if (v3_cpu_types[info->cpu_id] == V3_SVM_REV3_CPU) {
info->shdw_pg_mode = NESTED_PAGING;
} else {
PrintError("Nested paging not supported on this hardware. Defaulting to shadow paging\n");
info->shdw_pg_mode = SHADOW_PAGING;
}
- } else if ((strcasecmp(paging, "shadow") == 0)) {
+ } else if ((strcasecmp(pg_type, "shadow") == 0)) {
info->shdw_pg_mode = SHADOW_PAGING;
} else {
- PrintError("Invalid paging type specified in configuration. Defaulting to shadow paging\n");
+ PrintError("Invalid paging type (%s) specified in configuration. Defaulting to shadow paging\n", pg_type);
info->shdw_pg_mode = SHADOW_PAGING;
}
} else {
PrintError("Guest paging mode incorrectly set.\n");
return -1;
}
+ return 0;
+}
+
+static int pre_config_core(struct guest_info * info, v3_cfg_tree_t * core_cfg) {
+
+ if (!determine_paging_mode(info, core_cfg))
+ return -1;
v3_init_core(info);
int v3_init_shdw_impl(struct v3_vm_info * vm) {
struct v3_shdw_impl_state * impl_state = &(vm->shdw_impl);
v3_cfg_tree_t * pg_cfg = v3_cfg_subtree(vm->cfg_data->cfg, "paging");
- char * type_name = v3_cfg_val(pg_cfg, NULL);
+ char * type_name = v3_cfg_val(pg_cfg, "type");
char * impl_name = v3_cfg_val(pg_cfg, "mode");
struct v3_shdw_pg_impl * impl = NULL;
+ PrintDebug("Checking if shadow paging requested.\n");
if (type_name && (strcasecmp(type_name, "shadow") != 0)) {
PrintDebug("Shadow paging not specified for VM.\n");
return 0;
<!-- Basic VMM system flags -->
<telemetry>enable</telemetry>
- <paging mode="VTLB">shadow</paging>
+ <paging type="shadow" mode="VTLB"/>
+ <!-- <paging type="nested" mode="4KB"/> -->
<schedule_hz>100</schedule_hz>
<cores count="1"><core /></cores>