Message ID | 20220106085533.84356-1-likexu@tencent.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | KVM: x86/pt: Do not advertise Intel PT Event Trace capability | expand |
On 1/6/22 09:55, Like Xu wrote: > From: Like Xu <likexu@tencent.com> > > The Inte PT Event Trace capability (Intel SDM Vol3, 32.2.4 Event Tracing) > is a new CPU feature that "exposes details about the asynchronous events, > when they are generated, and when their corresponding software event > handler completes execution". > > It is not possible for KVM to emulate all events including interrupts, > VM exits, VM entries, INIT, SIPI events and etc. for guests and to > emulate the simultaneous writing of Control Flow Events and Event Data > packets generated by the KVM to the guest PT buffer. > > For KVM, it is best not to advertise the Event Trace feature and just > let it be a system-wide-only tracing capability. > > Signed-off-by: Like Xu <likexu@tencent.com> > --- > Off topic, other new PT features such as "PSB and PMI Preservation Supported" > and "TNT disable" are under investigation or awaiting host support to move on. Yeah, I think it's better to be safe and ignore _all_ unknown capabilities. Paolo > arch/x86/kvm/cpuid.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/arch/x86/kvm/cpuid.c b/arch/x86/kvm/cpuid.c > index 0b920e12bb6d..1028c57377e9 100644 > --- a/arch/x86/kvm/cpuid.c > +++ b/arch/x86/kvm/cpuid.c > @@ -901,6 +901,8 @@ static inline int __do_cpuid_func(struct kvm_cpuid_array *array, u32 function) > break; > } > > + /* Not advertise Event Trace capability due to endless emulation */ > + entry->ebx &= ~BIT(7); > for (i = 1, max_idx = entry->eax; i <= max_idx; ++i) { > if (!do_host_cpuid(array, function, i)) > goto out;
diff --git a/arch/x86/kvm/cpuid.c b/arch/x86/kvm/cpuid.c index 0b920e12bb6d..1028c57377e9 100644 --- a/arch/x86/kvm/cpuid.c +++ b/arch/x86/kvm/cpuid.c @@ -901,6 +901,8 @@ static inline int __do_cpuid_func(struct kvm_cpuid_array *array, u32 function) break; } + /* Not advertise Event Trace capability due to endless emulation */ + entry->ebx &= ~BIT(7); for (i = 1, max_idx = entry->eax; i <= max_idx; ++i) { if (!do_host_cpuid(array, function, i)) goto out;