|
[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 |