X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Fsrc%2Fpalacios%2Fsvm_msr.c;h=82614f128e68dc3d411da636ea5b2f46e9a20148;hb=ed8feff1d5dd6bf028cd5ba0960ec125505d7597;hp=dcc653e9961511e6fe6acc5a5ae6534f96400bea;hpb=29e825c5f095066bbb5ebbec5a5af1419d883264;p=palacios.git diff --git a/palacios/src/palacios/svm_msr.c b/palacios/src/palacios/svm_msr.c index dcc653e..82614f1 100644 --- a/palacios/src/palacios/svm_msr.c +++ b/palacios/src/palacios/svm_msr.c @@ -19,7 +19,7 @@ #include #include - +#include #include @@ -30,9 +30,9 @@ #define AMD_7_8_GEN_MSRS_START 0xc0010000 #define AMD_7_8_GEN_MSRS_END 0xc0011fff -#define PENTIUM_MSRS_INDEX (0x0 * 4) -#define AMD_6_GEN_MSRS_INDEX (0x800 * 4) -#define AMD_7_8_GEN_MSRS_INDEX (0x1000 * 4) +#define PENTIUM_MSRS_INDEX (0) +#define AMD_6_GEN_MSRS_INDEX (0x2000) +#define AMD_7_8_GEN_MSRS_INDEX (0x4000) @@ -71,7 +71,7 @@ static int update_map(struct guest_info * info, uint_t msr, int hook_reads, int *(bitmap + major) &= ~(mask << minor); *(bitmap + major) |= (val << minor); - + return 0; } @@ -84,58 +84,9 @@ int v3_init_svm_msr_map(struct guest_info * info) { msr_map->arch_data = V3_VAddr(V3_AllocPages(2)); memset(msr_map->arch_data, 0, PAGE_SIZE_4KB * 2); - return 0; -} - - - -int v3_handle_msr_write(struct guest_info * info) { - uint_t msr_num = info->vm_regs.rcx; - struct v3_msr msr_val; - struct v3_msr_hook * hook = NULL; - - hook = v3_get_msr_hook(info, msr_num); - - if (!hook) { - PrintError("Hook for MSR write %d not found\n", msr_num); - return -1; - } - - msr_val.value = 0; - msr_val.lo = info->vm_regs.rax; - msr_val.hi = info->vm_regs.rdx; - - if (hook->write(msr_num, msr_val, hook->priv_data) == -1) { - PrintError("Error in MSR hook Write\n"); - return -1; - } + v3_refresh_msr_map(info); return 0; } - -int v3_handle_msr_read(struct guest_info * info) { - uint_t msr_num = info->vm_regs.rcx; - struct v3_msr msr_val; - struct v3_msr_hook * hook = NULL; - - hook = v3_get_msr_hook(info, msr_num); - - if (!hook) { - PrintError("Hook for MSR read %d not found\n", msr_num); - return -1; - } - - msr_val.value = 0; - - if (hook->read(msr_num, &msr_val, hook->priv_data) == -1) { - PrintError("Error in MSR hook Read\n"); - return -1; - } - - info->vm_regs.rax = msr_val.lo; - info->vm_regs.rdx = msr_val.hi; - - return 0; -}