Message ID | 1f4a8233-7f7b-dbd9-26f5-69e3eb659fa2@suse.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [for-4.12,and,older] x86/msr: fix handling of MSR_IA32_PERF_{STATUS/CTL} (again) | expand |
On Thu, Feb 04, 2021 at 10:36:06AM +0100, Jan Beulich wrote: > X86_VENDOR_* aren't bit masks in the older trees. > > Reported-by: James Dingwall <james@dingwall.me.uk> > Signed-off-by: Jan Beulich <jbeulich@suse.com> Acked-by: Roger Pau Monné <roger.pau@citrix.com> Should this have a set of Fixes tag for the commit hashes on <= 4.12? Thanks, Roger.
On 04.02.2021 10:40, Roger Pau Monné wrote: > On Thu, Feb 04, 2021 at 10:36:06AM +0100, Jan Beulich wrote: >> X86_VENDOR_* aren't bit masks in the older trees. >> >> Reported-by: James Dingwall <james@dingwall.me.uk> >> Signed-off-by: Jan Beulich <jbeulich@suse.com> > > Acked-by: Roger Pau Monné <roger.pau@citrix.com> Thanks. > Should this have a set of Fixes tag for the commit hashes on <= 4.12? I'd prefer Fixes: to only reference non-backports. The tag is mainly meant to allow noticing what needs backporting, after all. Jan
Hi Jan, On Thu, Feb 04, 2021 at 10:36:06AM +0100, Jan Beulich wrote: > X86_VENDOR_* aren't bit masks in the older trees. > > Reported-by: James Dingwall <james@dingwall.me.uk> > Signed-off-by: Jan Beulich <jbeulich@suse.com> > > --- a/xen/arch/x86/msr.c > +++ b/xen/arch/x86/msr.c > @@ -226,7 +226,8 @@ int guest_rdmsr(const struct vcpu *v, ui > */ > case MSR_IA32_PERF_STATUS: > case MSR_IA32_PERF_CTL: > - if ( !(cp->x86_vendor & (X86_VENDOR_INTEL | X86_VENDOR_CENTAUR)) ) > + if ( cp->x86_vendor != X86_VENDOR_INTEL && > + cp->x86_vendor != X86_VENDOR_CENTAUR ) > goto gp_fault; > > *val = 0; Thanks for this patch, I've applied it and the Windows guest no longer crashes. Regards, James
On 04/02/2021 09:36, Jan Beulich wrote: > X86_VENDOR_* aren't bit masks in the older trees. > > Reported-by: James Dingwall <james@dingwall.me.uk> > Signed-off-by: Jan Beulich <jbeulich@suse.com> Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
On 04.02.2021 10:36, Jan Beulich wrote: > X86_VENDOR_* aren't bit masks in the older trees. > > Reported-by: James Dingwall <james@dingwall.me.uk> > Signed-off-by: Jan Beulich <jbeulich@suse.com> > > --- a/xen/arch/x86/msr.c > +++ b/xen/arch/x86/msr.c > @@ -226,7 +226,8 @@ int guest_rdmsr(const struct vcpu *v, ui > */ > case MSR_IA32_PERF_STATUS: > case MSR_IA32_PERF_CTL: > - if ( !(cp->x86_vendor & (X86_VENDOR_INTEL | X86_VENDOR_CENTAUR)) ) > + if ( cp->x86_vendor != X86_VENDOR_INTEL && > + cp->x86_vendor != X86_VENDOR_CENTAUR ) > goto gp_fault; > > *val = 0; Darn - this was only half of it. There's a similar construct in guest_wrmsr() which also wants replacing. Jan
On 04/02/2021 15:53, Jan Beulich wrote: > On 04.02.2021 10:36, Jan Beulich wrote: >> X86_VENDOR_* aren't bit masks in the older trees. >> >> Reported-by: James Dingwall <james@dingwall.me.uk> >> Signed-off-by: Jan Beulich <jbeulich@suse.com> >> >> --- a/xen/arch/x86/msr.c >> +++ b/xen/arch/x86/msr.c >> @@ -226,7 +226,8 @@ int guest_rdmsr(const struct vcpu *v, ui >> */ >> case MSR_IA32_PERF_STATUS: >> case MSR_IA32_PERF_CTL: >> - if ( !(cp->x86_vendor & (X86_VENDOR_INTEL | X86_VENDOR_CENTAUR)) ) >> + if ( cp->x86_vendor != X86_VENDOR_INTEL && >> + cp->x86_vendor != X86_VENDOR_CENTAUR ) >> goto gp_fault; >> >> *val = 0; > Darn - this was only half of it. There's a similar construct > in guest_wrmsr() which also wants replacing. I really should have renamed the constants when I changed their layout... My R-by stands in light of that change. ~Andrew
--- a/xen/arch/x86/msr.c +++ b/xen/arch/x86/msr.c @@ -226,7 +226,8 @@ int guest_rdmsr(const struct vcpu *v, ui */ case MSR_IA32_PERF_STATUS: case MSR_IA32_PERF_CTL: - if ( !(cp->x86_vendor & (X86_VENDOR_INTEL | X86_VENDOR_CENTAUR)) ) + if ( cp->x86_vendor != X86_VENDOR_INTEL && + cp->x86_vendor != X86_VENDOR_CENTAUR ) goto gp_fault; *val = 0;
X86_VENDOR_* aren't bit masks in the older trees. Reported-by: James Dingwall <james@dingwall.me.uk> Signed-off-by: Jan Beulich <jbeulich@suse.com>