[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v4 6/8] hvm/mtrr: copy hardware state for Dom0
Copy the state found on the hardware when creating a PVH Dom0. Since the memory map provided to a PVH Dom0 is based on the native one using the same set of MTRR ranges should provide Dom0 with a sane MTRR state without having to manually build it in Xen. Signed-off-by: Roger Pau Monné <roger.pau@xxxxxxxxxx> Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx> --- Cc: Jan Beulich <jbeulich@xxxxxxxx> Cc: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> --- Changes since v1: - Introduce and use the FE shift into the deftype MTRR MSR. --- xen/arch/x86/hvm/mtrr.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/xen/arch/x86/hvm/mtrr.c b/xen/arch/x86/hvm/mtrr.c index 54dede0ea6..48facbb32a 100644 --- a/xen/arch/x86/hvm/mtrr.c +++ b/xen/arch/x86/hvm/mtrr.c @@ -185,6 +185,32 @@ int hvm_vcpu_cacheattr_init(struct vcpu *v) ((uint64_t)PAT_TYPE_UC_MINUS << 48) | /* PAT6: UC- */ ((uint64_t)PAT_TYPE_UNCACHABLE << 56); /* PAT7: UC */ + if ( is_hardware_domain(v->domain) ) + { + /* Copy values from the host. */ + struct domain *d = v->domain; + unsigned int i; + + if ( mtrr_state.have_fixed ) + for ( i = 0; i < NUM_FIXED_MSR; i++ ) + mtrr_fix_range_msr_set(d, m, i, + ((uint64_t *)mtrr_state.fixed_ranges)[i]); + + for ( i = 0; i < num_var_ranges; i++ ) + { + mtrr_var_range_msr_set(d, m, MSR_IA32_MTRR_PHYSBASE(i), + mtrr_state.var_ranges[i].base); + mtrr_var_range_msr_set(d, m, MSR_IA32_MTRR_PHYSMASK(i), + mtrr_state.var_ranges[i].mask); + } + + mtrr_def_type_msr_set(d, m, + mtrr_state.def_type | + MASK_INSR(mtrr_state.fixed_enabled, + MTRRdefType_FE) | + MASK_INSR(mtrr_state.enabled, MTRRdefType_E)); + } + return 0; } -- 2.17.1 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |