On Tue, Sep 29, 2020 at 02:28:48AM +0000, Kang, Luwei wrote: > > > > >>>> No, it's not possible. KVM doesn't have a say on what the > > > > >>>> processor writes in the tracing packets. > > > > >>> Can KVM refuse to enable packet generation if CSbase is not zero > > > > >>> and CPUID.(EAX=14H,ECX=0)[bit 31] seen by guest is different from > > host? > > > > >> > > > > >> Yes, but the processor could change operating mode (and hence > > > > >> CSbase) while tracing is active. This is very unlikely, since it > > > > >> would require nonzero CS-base and a 32-bit host, but in principle > > > > >> not impossible (could be a firmware call, for example). > > > > >> > > > > >> The only solution is for KVM to accept both, and for QEMU to > > > > >> refuse a setting that does not match the host. > > > > >> > > > > > > > > > > So I need to add a patch in KVM to disabled the Intel PT when the > > > > > CSbase is not zero and the guest LIP different from the host. And > > > > > this limitation in qemu (disabled the PT when LIP is enabled in > > > > > the host) can be remove. Is that right? > > > > > > > > No, if a feature cannot be emulated, that means it cannot be enabled > > > > unless it matches the host. That's generally not a problem since > > > > Intel PT is usually used only with "-cpu host". > > > > > > > > > > The limitation of LIP in qemu will mask off the Intel PT in KVM guest > > > even with "-cpu host". e.g. This bit will be set in SnowRidge HW and > > > later. > > > > This behavior can and should be changed. > > > > > > > > How about "-cpu cpu_model, +intel-pt" use case? The current value of > > > Intel PT CPUID is a constant. Can we make the ICX CPUID as basic > > > inforation(LIP is 0) and using "+intel-pt-lip" > > > to make Intel PT work on the CPU which LIP is 1 on the host? As you > > > mentioned before, Intel PT cannot be enabled in guest unless it > > > matches the host. > > > > This makes sense, but you can also make each CPU model set a default for the > > LIP bit. "-cpu SnowRidge,+intel-pt" could set > > LIP=1 by default. > > I have a question on how to set LIP=1 in SnowRidge by default. > 1. Set LIP in "builtin_x86_defs[]" SnowRidge CPU model. The LIP included in > CPUID.(eax=14x,ecx=0)ecx[bit31] and a new leaf needs to be added. > 2. Checking the CPU model in the later software flow and set the LIP bit if > the CPU model is Snowridge. And we also need to add more CPU model's checking > for new CPUs. > > What is your opinion? >
1 is preferred. Any CPU-model-specific data should be represented as data inside builtin_x86_defs, not code. -- Eduardo