* [Qemu-devel] [PATCH] i386: extended the cpuid level when Intel PT is enabled @ 2019-01-25 1:54 Luwei Kang 2019-01-24 18:39 ` Eduardo Habkost 0 siblings, 1 reply; 7+ messages in thread From: Luwei Kang @ 2019-01-25 1:54 UTC (permalink / raw) To: qemu-devel; +Cc: pbonzini, rth, ehabkost, Luwei Kang Intel Processor Trace required CPUID[0x14] but the cpuid level is 0xd when create a kvm guest with e.g. "-cpu qemu64,+intel-pt". Signed-off-by: Luwei Kang <luwei.kang@intel.com> --- target/i386/cpu.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/target/i386/cpu.c b/target/i386/cpu.c index 2f54125..da477b3 100644 --- a/target/i386/cpu.c +++ b/target/i386/cpu.c @@ -5023,6 +5023,13 @@ static void x86_cpu_expand_features(X86CPU *cpu, Error **errp) x86_cpu_adjust_feat_level(cpu, FEAT_C000_0001_EDX); x86_cpu_adjust_feat_level(cpu, FEAT_SVM); x86_cpu_adjust_feat_level(cpu, FEAT_XSAVE); + + /* Intel Processor Trace requires CPUID[0x14] */ + if ((env->features[FEAT_7_0_EBX] & CPUID_7_0_EBX_INTEL_PT) && + kvm_enabled()) { + x86_cpu_adjust_level(cpu, &cpu->env.cpuid_min_level, 0x14); + } + /* SVM requires CPUID[0x8000000A] */ if (env->features[FEAT_8000_0001_ECX] & CPUID_EXT3_SVM) { x86_cpu_adjust_level(cpu, &env->cpuid_min_xlevel, 0x8000000A); -- 1.8.3.1 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [Qemu-devel] [PATCH] i386: extended the cpuid level when Intel PT is enabled 2019-01-25 1:54 [Qemu-devel] [PATCH] i386: extended the cpuid level when Intel PT is enabled Luwei Kang @ 2019-01-24 18:39 ` Eduardo Habkost 2019-01-25 2:21 ` Kang, Luwei 0 siblings, 1 reply; 7+ messages in thread From: Eduardo Habkost @ 2019-01-24 18:39 UTC (permalink / raw) To: Luwei Kang; +Cc: qemu-devel, pbonzini, rth Hi, Thanks for the patch. Comment below: On Thu, Jan 24, 2019 at 08:54:43PM -0500, Luwei Kang wrote: > Intel Processor Trace required CPUID[0x14] but the cpuid level > is 0xd when create a kvm guest with e.g. "-cpu qemu64,+intel-pt". > > Signed-off-by: Luwei Kang <luwei.kang@intel.com> > --- > target/i386/cpu.c | 7 +++++++ > 1 file changed, 7 insertions(+) > > diff --git a/target/i386/cpu.c b/target/i386/cpu.c > index 2f54125..da477b3 100644 > --- a/target/i386/cpu.c > +++ b/target/i386/cpu.c > @@ -5023,6 +5023,13 @@ static void x86_cpu_expand_features(X86CPU *cpu, Error **errp) > x86_cpu_adjust_feat_level(cpu, FEAT_C000_0001_EDX); > x86_cpu_adjust_feat_level(cpu, FEAT_SVM); > x86_cpu_adjust_feat_level(cpu, FEAT_XSAVE); > + > + /* Intel Processor Trace requires CPUID[0x14] */ > + if ((env->features[FEAT_7_0_EBX] & CPUID_7_0_EBX_INTEL_PT) && > + kvm_enabled()) { > + x86_cpu_adjust_level(cpu, &cpu->env.cpuid_min_level, 0x14); > + } This will require a new machine-type compatibility flag to enable the new behavior, so we don't change CPUID data under the guest feet during live migration. > + > /* SVM requires CPUID[0x8000000A] */ > if (env->features[FEAT_8000_0001_ECX] & CPUID_EXT3_SVM) { > x86_cpu_adjust_level(cpu, &env->cpuid_min_xlevel, 0x8000000A); > -- > 1.8.3.1 > -- Eduardo ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Qemu-devel] [PATCH] i386: extended the cpuid level when Intel PT is enabled 2019-01-24 18:39 ` Eduardo Habkost @ 2019-01-25 2:21 ` Kang, Luwei 2019-01-26 2:51 ` Eduardo Habkost 0 siblings, 1 reply; 7+ messages in thread From: Kang, Luwei @ 2019-01-25 2:21 UTC (permalink / raw) To: Eduardo Habkost Cc: qemu-devel@nongnu.org, pbonzini@redhat.com, rth@twiddle.net > > Intel Processor Trace required CPUID[0x14] but the cpuid level is 0xd > > when create a kvm guest with e.g. "-cpu qemu64,+intel-pt". > > > > Signed-off-by: Luwei Kang <luwei.kang@intel.com> > > --- > > target/i386/cpu.c | 7 +++++++ > > 1 file changed, 7 insertions(+) > > > > diff --git a/target/i386/cpu.c b/target/i386/cpu.c index > > 2f54125..da477b3 100644 > > --- a/target/i386/cpu.c > > +++ b/target/i386/cpu.c > > @@ -5023,6 +5023,13 @@ static void x86_cpu_expand_features(X86CPU *cpu, Error **errp) > > x86_cpu_adjust_feat_level(cpu, FEAT_C000_0001_EDX); > > x86_cpu_adjust_feat_level(cpu, FEAT_SVM); > > x86_cpu_adjust_feat_level(cpu, FEAT_XSAVE); > > + > > + /* Intel Processor Trace requires CPUID[0x14] */ > > + if ((env->features[FEAT_7_0_EBX] & CPUID_7_0_EBX_INTEL_PT) && > > + kvm_enabled()) { > > + x86_cpu_adjust_level(cpu, &cpu->env.cpuid_min_level, 0x14); > > + } > > This will require a new machine-type compatibility flag to enable the new behavior, so we don't change CPUID data under the guest feet during live migration. Hi Eduardo, Thanks for your reply. I have some question on your comments. The cpuid level come from specific machine-type (e.g. qemu64, Skylake-Server) and they are all 0xd, but Intel PT required 0x14 so I extend the cpuid level. I don't fully understand what is the "require a new machine-type compatibility flag" mean, I need to add a new flag in each machine-type? I try to do live migration with "-cpu qemu64,+intel-pt" and "-cpu host" are all passed test. We didn't change the cpuid data during live migration just initialize the cpuid data when create a new vcpu. Please correct me if anything wrong. Thanks, Luwei Kang > > > + > > /* SVM requires CPUID[0x8000000A] */ > > if (env->features[FEAT_8000_0001_ECX] & CPUID_EXT3_SVM) { > > x86_cpu_adjust_level(cpu, &env->cpuid_min_xlevel, > > 0x8000000A); > > -- > > 1.8.3.1 > > > > -- > Eduardo ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Qemu-devel] [PATCH] i386: extended the cpuid level when Intel PT is enabled 2019-01-25 2:21 ` Kang, Luwei @ 2019-01-26 2:51 ` Eduardo Habkost 2019-01-28 6:06 ` Kang, Luwei 0 siblings, 1 reply; 7+ messages in thread From: Eduardo Habkost @ 2019-01-26 2:51 UTC (permalink / raw) To: Kang, Luwei; +Cc: qemu-devel@nongnu.org, pbonzini@redhat.com, rth@twiddle.net On Fri, Jan 25, 2019 at 02:21:20AM +0000, Kang, Luwei wrote: > > > Intel Processor Trace required CPUID[0x14] but the cpuid level is 0xd > > > when create a kvm guest with e.g. "-cpu qemu64,+intel-pt". > > > > > > Signed-off-by: Luwei Kang <luwei.kang@intel.com> > > > --- > > > target/i386/cpu.c | 7 +++++++ > > > 1 file changed, 7 insertions(+) > > > > > > diff --git a/target/i386/cpu.c b/target/i386/cpu.c index > > > 2f54125..da477b3 100644 > > > --- a/target/i386/cpu.c > > > +++ b/target/i386/cpu.c > > > @@ -5023,6 +5023,13 @@ static void x86_cpu_expand_features(X86CPU *cpu, Error **errp) > > > x86_cpu_adjust_feat_level(cpu, FEAT_C000_0001_EDX); > > > x86_cpu_adjust_feat_level(cpu, FEAT_SVM); > > > x86_cpu_adjust_feat_level(cpu, FEAT_XSAVE); > > > + > > > + /* Intel Processor Trace requires CPUID[0x14] */ > > > + if ((env->features[FEAT_7_0_EBX] & CPUID_7_0_EBX_INTEL_PT) && > > > + kvm_enabled()) { > > > + x86_cpu_adjust_level(cpu, &cpu->env.cpuid_min_level, 0x14); > > > + } > > > > This will require a new machine-type compatibility flag to enable the new behavior, so we don't change CPUID data under the guest feet during live migration. > > Hi Eduardo, > Thanks for your reply. I have some question on your comments. > The cpuid level come from specific machine-type (e.g. qemu64, Skylake-Server) and they are all 0xd, but Intel PT required 0x14 so I extend the cpuid level. > I don't fully understand what is the "require a new machine-type compatibility flag" mean, I need to add a new flag in each machine-type? > I try to do live migration with "-cpu qemu64,+intel-pt" and "-cpu host" are all passed test. We didn't change the cpuid data during live migration just initialize the cpuid data when create a new vcpu. Please correct me if anything wrong. CPUID data is not sent as part of the migration stream (it is recreated on the migration destination), so if "-cpu qemu,+intel-pt" results in different CPUID data, migration between QEMU 4.0 and 3.1 will make CPUID level change during live migration. This is not a serious issue, but it might confuse software running on the guest. We can fix that doing this: target/i386/cpu.c: static Property x86_cpu_properties[] = { ... DEFINE_PROP_BOOL("x-intel-pt-auto-level", X86CPU, intel_pt_auto_level, true), .... } ... static void x86_cpu_expand_features(X86CPU *cpu, Error **errp) { ... /* Intel Processor Trace requires CPUID[0x14] */ if ((env->features[FEAT_7_0_EBX] & CPUID_7_0_EBX_INTEL_PT) && cpu->intel_pt_auto_level) { x86_cpu_adjust_level(cpu, &cpu->env.cpuid_min_level, 0x14); } ... } hw/i386/pc.c: GlobalProperty pc_compat_3_1[] = { ... { TYPE_X86_CPU, "x-intel-pt-auto-leevl", "off" }, }; > Thanks, > Luwei Kang > > > > > > + > > > /* SVM requires CPUID[0x8000000A] */ > > > if (env->features[FEAT_8000_0001_ECX] & CPUID_EXT3_SVM) { > > > x86_cpu_adjust_level(cpu, &env->cpuid_min_xlevel, > > > 0x8000000A); > > > -- > > > 1.8.3.1 > > > > > > > -- > > Eduardo -- Eduardo ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Qemu-devel] [PATCH] i386: extended the cpuid level when Intel PT is enabled 2019-01-26 2:51 ` Eduardo Habkost @ 2019-01-28 6:06 ` Kang, Luwei 2019-01-28 18:03 ` Eduardo Habkost 0 siblings, 1 reply; 7+ messages in thread From: Kang, Luwei @ 2019-01-28 6:06 UTC (permalink / raw) To: Eduardo Habkost Cc: qemu-devel@nongnu.org, pbonzini@redhat.com, rth@twiddle.net > > > > Intel Processor Trace required CPUID[0x14] but the cpuid level is > > > > 0xd when create a kvm guest with e.g. "-cpu qemu64,+intel-pt". > > > > > > > > Signed-off-by: Luwei Kang <luwei.kang@intel.com> > > > > --- > > > > target/i386/cpu.c | 7 +++++++ > > > > 1 file changed, 7 insertions(+) > > > > > > > > diff --git a/target/i386/cpu.c b/target/i386/cpu.c index > > > > 2f54125..da477b3 100644 > > > > --- a/target/i386/cpu.c > > > > +++ b/target/i386/cpu.c > > > > @@ -5023,6 +5023,13 @@ static void x86_cpu_expand_features(X86CPU *cpu, Error **errp) > > > > x86_cpu_adjust_feat_level(cpu, FEAT_C000_0001_EDX); > > > > x86_cpu_adjust_feat_level(cpu, FEAT_SVM); > > > > x86_cpu_adjust_feat_level(cpu, FEAT_XSAVE); > > > > + > > > > + /* Intel Processor Trace requires CPUID[0x14] */ > > > > + if ((env->features[FEAT_7_0_EBX] & CPUID_7_0_EBX_INTEL_PT) && > > > > + kvm_enabled()) { > > > > + x86_cpu_adjust_level(cpu, &cpu->env.cpuid_min_level, 0x14); > > > > + } > > > > > > This will require a new machine-type compatibility flag to enable the new behavior, so we don't change CPUID data under the guest feet > during live migration. > > > > Hi Eduardo, > > Thanks for your reply. I have some question on your comments. > > The cpuid level come from specific machine-type (e.g. qemu64, Skylake-Server) and they are all 0xd, but Intel PT required 0x14 so I > extend the cpuid level. > > I don't fully understand what is the "require a new machine-type compatibility flag" mean, I need to add a new flag in each machine- > type? > > I try to do live migration with "-cpu qemu64,+intel-pt" and "-cpu host" are all passed test. We didn't change the cpuid data during live > migration just initialize the cpuid data when create a new vcpu. Please correct me if anything wrong. > > CPUID data is not sent as part of the migration stream (it is recreated on the migration destination), so if "-cpu qemu,+intel-pt" > results in different CPUID data, migration between QEMU 4.0 and > 3.1 will make CPUID level change during live migration. Yes, CPUID data is not sent as part of migration stream. But when will the "-cpu qemu,+intel-pt" result different results? I think CPU type include some specific features and CPUID data of Intel PT are constant value, so I think the CPUID data should not change as well. Thanks, Luwei Kang ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Qemu-devel] [PATCH] i386: extended the cpuid level when Intel PT is enabled 2019-01-28 6:06 ` Kang, Luwei @ 2019-01-28 18:03 ` Eduardo Habkost 2019-01-29 0:29 ` Kang, Luwei 0 siblings, 1 reply; 7+ messages in thread From: Eduardo Habkost @ 2019-01-28 18:03 UTC (permalink / raw) To: Kang, Luwei; +Cc: qemu-devel@nongnu.org, pbonzini@redhat.com, rth@twiddle.net On Mon, Jan 28, 2019 at 06:06:56AM +0000, Kang, Luwei wrote: > > > > > Intel Processor Trace required CPUID[0x14] but the cpuid level is > > > > > 0xd when create a kvm guest with e.g. "-cpu qemu64,+intel-pt". > > > > > > > > > > Signed-off-by: Luwei Kang <luwei.kang@intel.com> > > > > > --- > > > > > target/i386/cpu.c | 7 +++++++ > > > > > 1 file changed, 7 insertions(+) > > > > > > > > > > diff --git a/target/i386/cpu.c b/target/i386/cpu.c index > > > > > 2f54125..da477b3 100644 > > > > > --- a/target/i386/cpu.c > > > > > +++ b/target/i386/cpu.c > > > > > @@ -5023,6 +5023,13 @@ static void x86_cpu_expand_features(X86CPU *cpu, Error **errp) > > > > > x86_cpu_adjust_feat_level(cpu, FEAT_C000_0001_EDX); > > > > > x86_cpu_adjust_feat_level(cpu, FEAT_SVM); > > > > > x86_cpu_adjust_feat_level(cpu, FEAT_XSAVE); > > > > > + > > > > > + /* Intel Processor Trace requires CPUID[0x14] */ > > > > > + if ((env->features[FEAT_7_0_EBX] & CPUID_7_0_EBX_INTEL_PT) && > > > > > + kvm_enabled()) { > > > > > + x86_cpu_adjust_level(cpu, &cpu->env.cpuid_min_level, 0x14); > > > > > + } > > > > > > > > This will require a new machine-type compatibility flag to enable the new behavior, so we don't change CPUID data under the guest feet > > during live migration. > > > > > > Hi Eduardo, > > > Thanks for your reply. I have some question on your comments. > > > The cpuid level come from specific machine-type (e.g. qemu64, Skylake-Server) and they are all 0xd, but Intel PT required 0x14 so I > > extend the cpuid level. > > > I don't fully understand what is the "require a new machine-type compatibility flag" mean, I need to add a new flag in each machine- > > type? > > > I try to do live migration with "-cpu qemu64,+intel-pt" and "-cpu host" are all passed test. We didn't change the cpuid data during live > > migration just initialize the cpuid data when create a new vcpu. Please correct me if anything wrong. > > > > CPUID data is not sent as part of the migration stream (it is recreated on the migration destination), so if "-cpu qemu,+intel-pt" > > results in different CPUID data, migration between QEMU 4.0 and > > 3.1 will make CPUID level change during live migration. > > Yes, CPUID data is not sent as part of migration stream. But > when will the "-cpu qemu,+intel-pt" result different results? I > think CPU type include some specific features and CPUID data of > Intel PT are constant value, so I think the CPUID data should > not change as well. Before your patch, "-cpu qemu64,+intel-pt" has CPUID[0].EAX = 0xD, and guest won't see intel-pt data in CPUID[0x14]. After your patch, "-cpu qemu64,+intel-pt" has CPUID[0].EAX = 0x14, and guest will see intel-pt data in CPUID[0x14]. -- Eduardo ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Qemu-devel] [PATCH] i386: extended the cpuid level when Intel PT is enabled 2019-01-28 18:03 ` Eduardo Habkost @ 2019-01-29 0:29 ` Kang, Luwei 0 siblings, 0 replies; 7+ messages in thread From: Kang, Luwei @ 2019-01-29 0:29 UTC (permalink / raw) To: Eduardo Habkost Cc: qemu-devel@nongnu.org, pbonzini@redhat.com, rth@twiddle.net > > > > > > Intel Processor Trace required CPUID[0x14] but the cpuid level > > > > > > is 0xd when create a kvm guest with e.g. "-cpu qemu64,+intel-pt". > > > > > > > > > > > > Signed-off-by: Luwei Kang <luwei.kang@intel.com> > > > > > > --- > > > > > > target/i386/cpu.c | 7 +++++++ > > > > > > 1 file changed, 7 insertions(+) > > > > > > > > > > > > diff --git a/target/i386/cpu.c b/target/i386/cpu.c index > > > > > > 2f54125..da477b3 100644 > > > > > > --- a/target/i386/cpu.c > > > > > > +++ b/target/i386/cpu.c > > > > > > @@ -5023,6 +5023,13 @@ static void x86_cpu_expand_features(X86CPU *cpu, Error **errp) > > > > > > x86_cpu_adjust_feat_level(cpu, FEAT_C000_0001_EDX); > > > > > > x86_cpu_adjust_feat_level(cpu, FEAT_SVM); > > > > > > x86_cpu_adjust_feat_level(cpu, FEAT_XSAVE); > > > > > > + > > > > > > + /* Intel Processor Trace requires CPUID[0x14] */ > > > > > > + if ((env->features[FEAT_7_0_EBX] & CPUID_7_0_EBX_INTEL_PT) && > > > > > > + kvm_enabled()) { > > > > > > + x86_cpu_adjust_level(cpu, &cpu->env.cpuid_min_level, 0x14); > > > > > > + } > > > > > > > > > > This will require a new machine-type compatibility flag to > > > > > enable the new behavior, so we don't change CPUID data under the > > > > > guest feet > > > during live migration. > > > > > > > > Hi Eduardo, > > > > Thanks for your reply. I have some question on your comments. > > > > The cpuid level come from specific machine-type (e.g. qemu64, > > > > Skylake-Server) and they are all 0xd, but Intel PT required 0x14 > > > > so I > > > extend the cpuid level. > > > > I don't fully understand what is the "require a new > > > > machine-type compatibility flag" mean, I need to add a new flag in > > > > each machine- > > > type? > > > > I try to do live migration with "-cpu qemu64,+intel-pt" and > > > > "-cpu host" are all passed test. We didn't change the cpuid data > > > > during live > > > migration just initialize the cpuid data when create a new vcpu. Please correct me if anything wrong. > > > > > > CPUID data is not sent as part of the migration stream (it is recreated on the migration destination), so if "-cpu qemu,+intel-pt" > > > results in different CPUID data, migration between QEMU 4.0 and > > > 3.1 will make CPUID level change during live migration. > > > > Yes, CPUID data is not sent as part of migration stream. But when will > > the "-cpu qemu,+intel-pt" result different results? I think CPU type > > include some specific features and CPUID data of Intel PT are constant > > value, so I think the CPUID data should not change as well. > > Before your patch, "-cpu qemu64,+intel-pt" has CPUID[0].EAX = 0xD, and guest won't see intel-pt data in CPUID[0x14]. > > After your patch, "-cpu qemu64,+intel-pt" has CPUID[0].EAX = 0x14, and guest will see intel-pt data in CPUID[0x14]. > Oh yes, get it. Thanks. Luwei Kang > -- > Eduardo ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2019-01-29 0:30 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2019-01-25 1:54 [Qemu-devel] [PATCH] i386: extended the cpuid level when Intel PT is enabled Luwei Kang 2019-01-24 18:39 ` Eduardo Habkost 2019-01-25 2:21 ` Kang, Luwei 2019-01-26 2:51 ` Eduardo Habkost 2019-01-28 6:06 ` Kang, Luwei 2019-01-28 18:03 ` Eduardo Habkost 2019-01-29 0:29 ` Kang, Luwei
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).