From: Jack Lange Date: Thu, 23 Apr 2009 03:41:53 +0000 (-0500) Subject: renamed guest cpu/mem mode functions X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?p=palacios.git;a=commitdiff_plain;h=39849abeb743c4e6b669a790c307979fa8d51884 renamed guest cpu/mem mode functions --- diff --git a/palacios/include/palacios/vm_guest.h b/palacios/include/palacios/vm_guest.h index e2c2739..63decc2 100644 --- a/palacios/include/palacios/vm_guest.h +++ b/palacios/include/palacios/vm_guest.h @@ -187,8 +187,8 @@ struct guest_info { uint_t v3_get_addr_width(struct guest_info * info); -v3_cpu_mode_t v3_get_cpu_mode(struct guest_info * info); -v3_mem_mode_t v3_get_mem_mode(struct guest_info * info); +v3_cpu_mode_t v3_get_vm_cpu_mode(struct guest_info * info); +v3_mem_mode_t v3_get_vm_mem_mode(struct guest_info * info); const uchar_t * v3_cpu_mode_to_str(v3_cpu_mode_t mode); diff --git a/palacios/include/palacios/vmm.h b/palacios/include/palacios/vmm.h index 347157f..26c5c5e 100644 --- a/palacios/include/palacios/vmm.h +++ b/palacios/include/palacios/vmm.h @@ -224,6 +224,9 @@ typedef enum v3_cpu_arch {V3_INVALID_CPU, V3_SVM_CPU, V3_SVM_REV3_CPU, V3_VMX_CPU} v3_cpu_arch_t; +v3_cpu_mode_t v3_get_host_cpu_mode(); + + #endif //!__V3VEE__ diff --git a/palacios/src/palacios/svm_handler.c b/palacios/src/palacios/svm_handler.c index 6d38fb7..7d6b61b 100644 --- a/palacios/src/palacios/svm_handler.c +++ b/palacios/src/palacios/svm_handler.c @@ -64,8 +64,8 @@ int v3_handle_svm_exit(struct guest_info * info) { info->ctrl_regs.efer = guest_state->efer; get_vmcb_segments((vmcb_t*)(info->vmm_data), &(info->segments)); - info->cpu_mode = v3_get_cpu_mode(info); - info->mem_mode = v3_get_mem_mode(info); + info->cpu_mode = v3_get_vm_cpu_mode(info); + info->mem_mode = v3_get_vm_mem_mode(info); exit_code = guest_ctrl->exit_code; diff --git a/palacios/src/palacios/vmm_ctrl_regs.c b/palacios/src/palacios/vmm_ctrl_regs.c index 6f99e39..bdb6e12 100644 --- a/palacios/src/palacios/vmm_ctrl_regs.c +++ b/palacios/src/palacios/vmm_ctrl_regs.c @@ -118,7 +118,7 @@ static int handle_mov_to_cr0(struct guest_info * info, struct x86_instr * dec_in // Was there a paging transition // Meaning we need to change the page tables if (paging_transition) { - if (v3_get_mem_mode(info) == VIRTUAL_MEM) { + if (v3_get_vm_mem_mode(info) == VIRTUAL_MEM) { struct efer_64 * guest_efer = (struct efer_64 *)&(info->guest_efer); struct efer_64 * shadow_efer = (struct efer_64 *)&(info->ctrl_regs.efer); @@ -231,8 +231,8 @@ int v3_handle_cr0_read(struct guest_info * info) { if (dec_instr.op_type == V3_OP_MOVCR2) { PrintDebug("MOVCR2 (mode=%s)\n", v3_cpu_mode_to_str(info->cpu_mode)); - if ((v3_get_cpu_mode(info) == LONG) || - (v3_get_cpu_mode(info) == LONG_32_COMPAT)) { + if ((v3_get_vm_cpu_mode(info) == LONG) || + (v3_get_vm_cpu_mode(info) == LONG_32_COMPAT)) { struct cr0_64 * dst_reg = (struct cr0_64 *)(dec_instr.dst_operand.operand); if (info->shdw_pg_mode == SHADOW_PAGING) { @@ -382,8 +382,8 @@ int v3_handle_cr3_read(struct guest_info * info) { if (info->shdw_pg_mode == SHADOW_PAGING) { - if ((v3_get_cpu_mode(info) == LONG) || - (v3_get_cpu_mode(info) == LONG_32_COMPAT)) { + if ((v3_get_vm_cpu_mode(info) == LONG) || + (v3_get_vm_cpu_mode(info) == LONG_32_COMPAT)) { struct cr3_64 * dst_reg = (struct cr3_64 *)(dec_instr.dst_operand.operand); struct cr3_64 * guest_cr3 = (struct cr3_64 *)&(info->shdw_pg_state.guest_cr3); *dst_reg = *guest_cr3; @@ -396,8 +396,8 @@ int v3_handle_cr3_read(struct guest_info * info) { } else if (info->shdw_pg_mode == NESTED_PAGING) { // This is just a passthrough operation which we probably don't need here - if ((v3_get_cpu_mode(info) == LONG) || - (v3_get_cpu_mode(info) == LONG_32_COMPAT)) { + if ((v3_get_vm_cpu_mode(info) == LONG) || + (v3_get_vm_cpu_mode(info) == LONG_32_COMPAT)) { struct cr3_64 * dst_reg = (struct cr3_64 *)(dec_instr.dst_operand.operand); struct cr3_64 * guest_cr3 = (struct cr3_64 *)&(info->ctrl_regs.cr3); *dst_reg = *guest_cr3; @@ -431,7 +431,7 @@ int v3_handle_cr4_write(struct guest_info * info) { int ret; int flush_tlb=0; struct x86_instr dec_instr; - v3_cpu_mode_t cpu_mode = v3_get_cpu_mode(info); + v3_cpu_mode_t cpu_mode = v3_get_vm_cpu_mode(info); if (info->mem_mode == PHYSICAL_MEM) { ret = read_guest_pa_memory(info, get_addr_linear(info, info->rip, &(info->segments.cs)), 15, instr); @@ -451,7 +451,7 @@ int v3_handle_cr4_write(struct guest_info * info) { // Check to see if we need to flush the tlb - if (v3_get_mem_mode(info) == VIRTUAL_MEM) { + if (v3_get_vm_mem_mode(info) == VIRTUAL_MEM) { struct cr4_32 * new_cr4 = (struct cr4_32 *)(dec_instr.src_operand.operand); struct cr4_32 * cr4 = (struct cr4_32 *)&(info->ctrl_regs.cr4); @@ -479,7 +479,7 @@ int v3_handle_cr4_write(struct guest_info * info) { PrintDebug("Old CR4=%x\n", *(uint_t *)cr4); if ((info->shdw_pg_mode == SHADOW_PAGING)) { - if (v3_get_mem_mode(info) == PHYSICAL_MEM) { + if (v3_get_vm_mem_mode(info) == PHYSICAL_MEM) { if ((cr4->pae == 0) && (new_cr4->pae == 1)) { PrintDebug("Creating PAE passthrough tables\n"); diff --git a/palacios/src/palacios/vmm_direct_paging.c b/palacios/src/palacios/vmm_direct_paging.c index 257efa3..e6b1052 100644 --- a/palacios/src/palacios/vmm_direct_paging.c +++ b/palacios/src/palacios/vmm_direct_paging.c @@ -50,7 +50,7 @@ int v3_init_passthrough_pts(struct guest_info * info) { } int v3_reset_passthrough_pts(struct guest_info * info) { - v3_cpu_mode_t mode = v3_get_cpu_mode(info); + v3_cpu_mode_t mode = v3_get_vm_cpu_mode(info); // Delete the old direct map page tables switch(mode) { @@ -88,7 +88,7 @@ int v3_activate_passthrough_pt(struct guest_info * info) { int v3_handle_passthrough_pagefault(struct guest_info * info, addr_t fault_addr, pf_error_t error_code) { - v3_cpu_mode_t mode = v3_get_cpu_mode(info); + v3_cpu_mode_t mode = v3_get_vm_cpu_mode(info); switch(mode) { case REAL: @@ -137,7 +137,7 @@ int v3_handle_nested_pagefault(struct guest_info * info, addr_t fault_addr, pf_e } int v3_invalidate_passthrough_addr(struct guest_info * info, addr_t inv_addr) { - v3_cpu_mode_t mode = v3_get_cpu_mode(info); + v3_cpu_mode_t mode = v3_get_vm_cpu_mode(info); switch(mode) { case REAL: diff --git a/palacios/src/palacios/vmm_mem.c b/palacios/src/palacios/vmm_mem.c index 5d9b4ea..2bdf5aa 100644 --- a/palacios/src/palacios/vmm_mem.c +++ b/palacios/src/palacios/vmm_mem.c @@ -210,7 +210,7 @@ struct v3_shadow_region * insert_shadow_region(struct guest_info * info, // flush virtual page tables // 3 cases shadow, shadow passthrough, and nested if (info->shdw_pg_mode == SHADOW_PAGING) { - v3_mem_mode_t mem_mode = v3_get_mem_mode(info); + v3_mem_mode_t mem_mode = v3_get_vm_mem_mode(info); if (mem_mode == PHYSICAL_MEM) { addr_t cur_addr; @@ -338,7 +338,7 @@ void v3_delete_shadow_region(struct guest_info * info, struct v3_shadow_region * // flush virtual page tables // 3 cases shadow, shadow passthrough, and nested if (info->shdw_pg_mode == SHADOW_PAGING) { - v3_mem_mode_t mem_mode = v3_get_mem_mode(info); + v3_mem_mode_t mem_mode = v3_get_vm_mem_mode(info); if (mem_mode == PHYSICAL_MEM) { addr_t cur_addr; diff --git a/palacios/src/palacios/vmm_shadow_paging.c b/palacios/src/palacios/vmm_shadow_paging.c index a3c802f..b2d3b6c 100644 --- a/palacios/src/palacios/vmm_shadow_paging.c +++ b/palacios/src/palacios/vmm_shadow_paging.c @@ -78,7 +78,7 @@ int v3_init_shadow_page_state(struct guest_info * info) { // creates new shadow page tables // updates the shadow CR3 register to point to the new pts int v3_activate_shadow_pt(struct guest_info * info) { - switch (v3_get_cpu_mode(info)) { + switch (v3_get_vm_cpu_mode(info)) { case PROTECTED: return activate_shadow_pt_32(info); @@ -89,7 +89,7 @@ int v3_activate_shadow_pt(struct guest_info * info) { case LONG_16_COMPAT: return activate_shadow_pt_64(info); default: - PrintError("Invalid CPU mode: %s\n", v3_cpu_mode_to_str(v3_get_cpu_mode(info))); + PrintError("Invalid CPU mode: %s\n", v3_cpu_mode_to_str(v3_get_vm_cpu_mode(info))); return -1; } @@ -107,12 +107,12 @@ int v3_invalidate_shadow_pts(struct guest_info * info) { int v3_handle_shadow_pagefault(struct guest_info * info, addr_t fault_addr, pf_error_t error_code) { - if (v3_get_mem_mode(info) == PHYSICAL_MEM) { + if (v3_get_vm_mem_mode(info) == PHYSICAL_MEM) { // If paging is not turned on we need to handle the special cases return v3_handle_passthrough_pagefault(info, fault_addr, error_code); - } else if (v3_get_mem_mode(info) == VIRTUAL_MEM) { + } else if (v3_get_vm_mem_mode(info) == VIRTUAL_MEM) { - switch (v3_get_cpu_mode(info)) { + switch (v3_get_vm_cpu_mode(info)) { case PROTECTED: return handle_shadow_pagefault_32(info, fault_addr, error_code); break; @@ -124,7 +124,7 @@ int v3_handle_shadow_pagefault(struct guest_info * info, addr_t fault_addr, pf_e return handle_shadow_pagefault_64(info, fault_addr, error_code); break; default: - PrintError("Unhandled CPU Mode: %s\n", v3_cpu_mode_to_str(v3_get_cpu_mode(info))); + PrintError("Unhandled CPU Mode: %s\n", v3_cpu_mode_to_str(v3_get_vm_cpu_mode(info))); return -1; } } else { @@ -140,14 +140,14 @@ int v3_handle_shadow_invlpg(struct guest_info * info) { int ret = 0; addr_t vaddr = 0; - if (v3_get_mem_mode(info) != VIRTUAL_MEM) { + if (v3_get_vm_mem_mode(info) != VIRTUAL_MEM) { // Paging must be turned on... // should handle with some sort of fault I think PrintError("ERROR: INVLPG called in non paged mode\n"); return -1; } - if (v3_get_mem_mode(info) == PHYSICAL_MEM) { + if (v3_get_vm_mem_mode(info) == PHYSICAL_MEM) { ret = read_guest_pa_memory(info, get_addr_linear(info, info->rip, &(info->segments.cs)), 15, instr); } else { ret = read_guest_va_memory(info, get_addr_linear(info, info->rip, &(info->segments.cs)), 15, instr); @@ -174,7 +174,7 @@ int v3_handle_shadow_invlpg(struct guest_info * info) { info->rip += dec_instr.instr_length; - switch (v3_get_cpu_mode(info)) { + switch (v3_get_vm_cpu_mode(info)) { case PROTECTED: return handle_shadow_invlpg_32(info, vaddr); case PROTECTED_PAE: @@ -184,7 +184,7 @@ int v3_handle_shadow_invlpg(struct guest_info * info) { case LONG_16_COMPAT: return handle_shadow_invlpg_64(info, vaddr); default: - PrintError("Invalid CPU mode: %s\n", v3_cpu_mode_to_str(v3_get_cpu_mode(info))); + PrintError("Invalid CPU mode: %s\n", v3_cpu_mode_to_str(v3_get_vm_cpu_mode(info))); return -1; } } diff --git a/palacios/src/palacios/vmm_xed.c b/palacios/src/palacios/vmm_xed.c index 25ca076..3511f8a 100644 --- a/palacios/src/palacios/vmm_xed.c +++ b/palacios/src/palacios/vmm_xed.c @@ -645,7 +645,7 @@ static int get_memory_operand(struct guest_info * info, xed_decoded_inst_t * xe // This is a horrendous hack... // XED really screwed the pooch in calculating the displacement - if (v3_get_cpu_mode(info) == LONG) { + if (v3_get_vm_cpu_mode(info) == LONG) { displacement = mem_op.displacement; } else { displacement = MASK(mem_op.displacement, mem_op.displacement_size);