|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH for-4.17 v2.1 2/3] amd/virt_ssbd: set SSBD at vCPU context switch
On 29.10.2022 15:12, Roger Pau Monne wrote:
> --- a/xen/arch/x86/hvm/svm/svm.c
> +++ b/xen/arch/x86/hvm/svm/svm.c
> @@ -973,6 +973,16 @@ static void cf_check svm_ctxt_switch_from(struct vcpu *v)
>
> /* Resume use of ISTs now that the host TR is reinstated. */
> enable_each_ist(idt_tables[cpu]);
> +
> + /*
> + * Clear previous guest selection of SSBD if set. Note that
> SPEC_CTRL.SSBD
> + * is already cleared by svm_vmexit_spec_ctrl.
> + */
> + if ( v->arch.msrs->virt_spec_ctrl.raw & SPEC_CTRL_SSBD )
> + {
> + ASSERT(v->domain->arch.cpuid->extd.virt_ssbd);
> + amd_set_ssbd(false);
> + }
> }
Aren't you potentially turning off SSBD here just to ...
> @@ -1000,6 +1010,13 @@ static void cf_check svm_ctxt_switch_to(struct vcpu *v)
>
> if ( cpu_has_msr_tsc_aux )
> wrmsr_tsc_aux(v->arch.msrs->tsc_aux);
> +
> + /* Load SSBD if set by the guest. */
> + if ( v->arch.msrs->virt_spec_ctrl.raw & SPEC_CTRL_SSBD )
> + {
> + ASSERT(v->domain->arch.cpuid->extd.virt_ssbd);
> + amd_set_ssbd(true);
> + }
> }
... turn it on here again? IOW wouldn't switching better be isolated to
just svm_ctxt_switch_to(), doing nothing if already in the intended mode?
> --- a/xen/arch/x86/msr.c
> +++ b/xen/arch/x86/msr.c
> @@ -697,7 +697,15 @@ int guest_wrmsr(struct vcpu *v, uint32_t msr, uint64_t
> val)
> msrs->spec_ctrl.raw &= ~SPEC_CTRL_SSBD;
> }
> else
> + {
> msrs->virt_spec_ctrl.raw = val & SPEC_CTRL_SSBD;
> + if ( v == curr )
> + /*
> + * Propagate the value to hardware, as it won't be context
> + * switched on vmentry.
> + */
I have to admit that I find "on vmentry" in the comment misleading: Reading
it I first thought you're still alluding to the old model. Plus I also find
the combination of "context switched" and "on vmentry" problematic, as we
generally mean something else when we say "context switch".
> + goto set_reg;
It's not clear why you want to use hvm_set_reg() in the first place - the
comment says "propagate to hardware", which would mean wrmsrl() in the
usual case. Here it would mean a direct call to amd_set_ssbd() imo. That
would then also be in line with all other "v == curr" conditionals, none
of which apply to any "goto set_reg". ..._set_reg(), aiui, is meant only
for use in cases where vCPU state needs updating such that proper state
would be loaded later (e.g. during VM entry).
Jan
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |