On Tue, Oct 15, 2019 at 12:51:48PM +0000, Kang, Luwei wrote:
> qemu> > diff --git a/target/i386/kvm.c b/target/i386/kvm.c index
> > > f9f4cd1..097c953 100644
> > > --- a/target/i386/kvm.c
> > > +++ b/target/i386/kvm.c
> > > @@ -1811,6 +1811,25 @@ static int kvm_put_msrs(X86CPU *cpu, int level)
> > >                  kvm_msr_entry_add(cpu, MSR_MTRRphysMask(i), mask);
> > >              }
> > >          }
> > > +        if (env->features[FEAT_7_0_EBX] & CPUID_7_0_EBX_INTEL_PT) {
> > > +            int addr_num = kvm_arch_get_supported_cpuid(kvm_state,
> > > +                                                    0x14, 1, R_EAX) &
> > > + 0x7;
> > > +
> > > +            kvm_msr_entry_add(cpu, MSR_IA32_RTIT_CTL,
> > > +                            env->msr_rtit_ctrl);
> > > +            kvm_msr_entry_add(cpu, MSR_IA32_RTIT_STATUS,
> > > +                            env->msr_rtit_status);
> > > +            kvm_msr_entry_add(cpu, MSR_IA32_RTIT_OUTPUT_BASE,
> > > +                            env->msr_rtit_output_base);
> > 
> > This causes the following crash on some hosts:
> > 
> >   qemu-system-x86_64: error: failed to set MSR 0x560 to 0x0
> >   qemu-system-x86_64: target/i386/kvm.c:2673: kvm_put_msrs: Assertion `ret 
> > == cpu->kvm_msr_buf->nmsrs' failed.
> > 
> > Checking for CPUID_7_0_EBX_INTEL_PT is not enough: KVM has additional 
> > conditions that might prevent writing to this MSR
> > (PT_CAP_topa_output && PT_CAP_single_range_output).  This causes QEMU to 
> > crash if some of the conditions aren't met.
> > 
> > Writing and reading this MSR (and the ones below) need to be conditional on 
> > KVM_GET_MSR_INDEX_LIST.
> > 
> 
> Hi Eduardo,
>     I found this issue can't be reproduced in upstream source code but can be 
> reproduced on RHEL8.1. I haven't got the qemu source code of RHEL8.1. But 
> after adding some trace in KVM, I found the KVM has reported the complete 
> Intel PT CPUID information to qemu but the Intel PT CPUID (0x14) is lost when 
> qemu setting the CPUID to KVM (cpuid level is 0xd). It looks like lost the 
> below patch.
> 
> commit f24c3a79a415042f6dc195f029a2ba7247d14cac
> Author: Luwei Kang <luwei.k...@intel.com>
> Date:   Tue Jan 29 18:52:59 2019 -0500
>     i386: extended the cpuid_level when Intel PT is enabled
> 
>     Intel Processor Trace required CPUID[0x14] but the cpuid_level
>     have no change when create a kvm guest with
>     e.g. "-cpu qemu64,+intel-pt".

Thanks for the pointer.  This may avoid triggering the bug in the
default configuration, but we still need to make the MSR writing
conditional on KVM_GET_MSR_INDEX_LIST.  Older machine-types have
x-intel-pt-auto-level=off, and the user may set `level` manually.

-- 
Eduardo

Reply via email to