On 28.10.2024 16:49, Alejandro Vallejo wrote:
> --- a/xen/arch/x86/xstate.c
> +++ b/xen/arch/x86/xstate.c
> @@ -1021,9 +1021,10 @@ int handle_xsetbv(u32 index, u64 new_bv)
>
> uint64_t read_bndcfgu(void)
> {
> + uint64_t ret = 0;
Seeing the purpose of the variable, imo it would better be named bndcfgu.
Jan
> 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);
> @@ -1049,7 +1050,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 )
> + ret = bndcsr->bndcfgu;
> +
> + vcpu_unmap_xsave_area(v, xstate);
> +
> + return ret;
> }
>
> void xstate_set_init(uint64_t mask)