@@ -1022,9 +1022,10 @@ int handle_xsetbv(u32 index, u64 new_bv)
uint64_t read_bndcfgu(void)
{
+ uint64_t bndcfgu = 0;
unsigned long cr0 = read_cr0();
- struct xsave_struct *xstate
- = idle_vcpu[smp_processor_id()]->arch.xsave_area;
+ struct vcpu *v = idle_vcpu[smp_processor_id()];
+ struct xsave_struct *xstate = VCPU_MAP_XSAVE_AREA(v);
const struct xstate_bndcsr *bndcsr;
ASSERT(cpu_has_mpx);
@@ -1050,7 +1051,12 @@ uint64_t read_bndcfgu(void)
if ( cr0 & X86_CR0_TS )
write_cr0(cr0);
- return xstate->xsave_hdr.xstate_bv & X86_XCR0_BNDCSR ? bndcsr->bndcfgu : 0;
+ if ( xstate->xsave_hdr.xstate_bv & X86_XCR0_BNDCSR )
+ bndcfgu = bndcsr->bndcfgu;
+
+ VCPU_UNMAP_XSAVE_AREA(v, xstate);
+
+ return bndcfgu;
}
void xstate_set_init(uint64_t mask)
No functional change. Signed-off-by: Alejandro Vallejo <alejandro.vallejo@cloud.com> --- v2: * s/ret/bndcfgu --- xen/arch/x86/xstate.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-)