[PATCH v2] target/i386: Add Snowridge-v2 (noMPX) CPU model

Xiaoyao Li posted 1 patch 4 years, 6 months ago
Test asan passed
Test checkpatch passed
Test FreeBSD passed
Test docker-mingw@fedora passed
Test docker-clang@ubuntu passed
Test docker-quick@centos7 passed
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20191011145349.123425-1-xiaoyao.li@intel.com
Maintainers: Paolo Bonzini <pbonzini@redhat.com>, Richard Henderson <rth@twiddle.net>, Eduardo Habkost <ehabkost@redhat.com>
target/i386/cpu.c | 13 +++++++++++++
1 file changed, 13 insertions(+)
[PATCH v2] target/i386: Add Snowridge-v2 (noMPX) CPU model
Posted by Xiaoyao Li 4 years, 6 months ago
Add new version of Snowridge CPU model that removes MPX feature.

MPX support is being phased out by Intel. GCC has dropped it, Linux kernel
and kvm are also going to do that in the future.

Signed-off-by: Xiaoyao Li <xiaoyao.li@intel.com>
---
Changes in v2:
    - Use CPU model versioning mechanism instead of machine-type compat
---
 target/i386/cpu.c | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/target/i386/cpu.c b/target/i386/cpu.c
index 44f1bbdcac76..27b0a17b46a8 100644
--- a/target/i386/cpu.c
+++ b/target/i386/cpu.c
@@ -2793,6 +2793,19 @@ static X86CPUDefinition builtin_x86_defs[] = {
             CPUID_6_EAX_ARAT,
         .xlevel = 0x80000008,
         .model_id = "Intel Atom Processor (SnowRidge)",
+        .versions = (X86CPUVersionDefinition[]) {
+            { .version = 1 },
+            {
+                .version = 2,
+                .alias = "Snowridge-noMPX",
+                .props = (PropValue[]) {
+                    { "mpx", "off" },
+                    { "model-id", "Intel Atom Processor (Snowridge, no MPX)" },
+                    { /* end of list */ },
+                },
+            },
+            { /* end of list */ },
+        },
     },
     {
         .name = "KnightsMill",
-- 
2.19.1


Re: [PATCH v2] target/i386: Add Snowridge-v2 (noMPX) CPU model
Posted by Eduardo Habkost 4 years, 6 months ago
On Fri, Oct 11, 2019 at 10:53:49PM +0800, Xiaoyao Li wrote:
> Add new version of Snowridge CPU model that removes MPX feature.
> 
> MPX support is being phased out by Intel. GCC has dropped it, Linux kernel
> and kvm are also going to do that in the future.
> 
> Signed-off-by: Xiaoyao Li <xiaoyao.li@intel.com>
> ---
> Changes in v2:
>     - Use CPU model versioning mechanism instead of machine-type compat
> ---
>  target/i386/cpu.c | 13 +++++++++++++
>  1 file changed, 13 insertions(+)
> 
> diff --git a/target/i386/cpu.c b/target/i386/cpu.c
> index 44f1bbdcac76..27b0a17b46a8 100644
> --- a/target/i386/cpu.c
> +++ b/target/i386/cpu.c
> @@ -2793,6 +2793,19 @@ static X86CPUDefinition builtin_x86_defs[] = {
>              CPUID_6_EAX_ARAT,
>          .xlevel = 0x80000008,
>          .model_id = "Intel Atom Processor (SnowRidge)",
> +        .versions = (X86CPUVersionDefinition[]) {
> +            { .version = 1 },
> +            {
> +                .version = 2,
> +                .alias = "Snowridge-noMPX",

The intention is to stop creating new funny names for CPU model
variations, now, and stick to -v1, -v2, -v3, etc.

The .alias field is optional, and was added only for
compatibility with the existing -noTSX and -IBRS CPU models.


> +                .props = (PropValue[]) {
> +                    { "mpx", "off" },
> +                    { "model-id", "Intel Atom Processor (Snowridge, no MPX)" },

Do you think it's important to report a different model-id?
I would keep it the same and only add mpx=off.

> +                    { /* end of list */ },
> +                },
> +            },
> +            { /* end of list */ },
> +        },
>      },
>      {
>          .name = "KnightsMill",
> -- 
> 2.19.1
> 

-- 
Eduardo

Re: [PATCH v2] target/i386: Add Snowridge-v2 (noMPX) CPU model
Posted by Xiaoyao Li 4 years, 6 months ago
On 10/12/2019 2:21 AM, Eduardo Habkost wrote:
> On Fri, Oct 11, 2019 at 10:53:49PM +0800, Xiaoyao Li wrote:
>> Add new version of Snowridge CPU model that removes MPX feature.
>>
>> MPX support is being phased out by Intel. GCC has dropped it, Linux kernel
>> and kvm are also going to do that in the future.
>>
>> Signed-off-by: Xiaoyao Li <xiaoyao.li@intel.com>
>> ---
>> Changes in v2:
>>      - Use CPU model versioning mechanism instead of machine-type compat
>> ---
>>   target/i386/cpu.c | 13 +++++++++++++
>>   1 file changed, 13 insertions(+)
>>
>> diff --git a/target/i386/cpu.c b/target/i386/cpu.c
>> index 44f1bbdcac76..27b0a17b46a8 100644
>> --- a/target/i386/cpu.c
>> +++ b/target/i386/cpu.c
>> @@ -2793,6 +2793,19 @@ static X86CPUDefinition builtin_x86_defs[] = {
>>               CPUID_6_EAX_ARAT,
>>           .xlevel = 0x80000008,
>>           .model_id = "Intel Atom Processor (SnowRidge)",
>> +        .versions = (X86CPUVersionDefinition[]) {
>> +            { .version = 1 },
>> +            {
>> +                .version = 2,
>> +                .alias = "Snowridge-noMPX",
> 
> The intention is to stop creating new funny names for CPU model
> variations, now, and stick to -v1, -v2, -v3, etc.
> 
> The .alias field is optional, and was added only for
> compatibility with the existing -noTSX and -IBRS CPU models.

Got it.

>> +                .props = (PropValue[]) {
>> +                    { "mpx", "off" },
>> +                    { "model-id", "Intel Atom Processor (Snowridge, no MPX)" },
> 
> Do you think it's important to report a different model-id?
> I would keep it the same and only add mpx=off.

I just want to let user know easily the differences between Snowridge-v1 
and Snowridge-v2. Unfortunately, it seems ugly.

When testing with Cascadelake-Server, it puzzles every time that which 
one should I choose between Cascadelake-Server-v1 and 
Cascadelake-Server-v2. From the output of "-cpu ?", I don't know the 
differences between them. Everytime I have to go to the source code to 
see the difference.

Maybe there is a way to see/report the differences between different 
versions of the same CPU model that I just don't know?

>> +                    { /* end of list */ },
>> +                },
>> +            },
>> +            { /* end of list */ },
>> +        },
>>       },
>>       {
>>           .name = "KnightsMill",
>> -- 
>> 2.19.1
>>
> 

Re: [PATCH v2] target/i386: Add Snowridge-v2 (noMPX) CPU model
Posted by Eduardo Habkost 4 years, 6 months ago
On Sat, Oct 12, 2019 at 09:15:56AM +0800, Xiaoyao Li wrote:
> On 10/12/2019 2:21 AM, Eduardo Habkost wrote:
> > On Fri, Oct 11, 2019 at 10:53:49PM +0800, Xiaoyao Li wrote:
> > > Add new version of Snowridge CPU model that removes MPX feature.
> > > 
> > > MPX support is being phased out by Intel. GCC has dropped it, Linux kernel
> > > and kvm are also going to do that in the future.
> > > 
> > > Signed-off-by: Xiaoyao Li <xiaoyao.li@intel.com>
> > > ---
> > > Changes in v2:
> > >      - Use CPU model versioning mechanism instead of machine-type compat
> > > ---
> > >   target/i386/cpu.c | 13 +++++++++++++
> > >   1 file changed, 13 insertions(+)
> > > 
> > > diff --git a/target/i386/cpu.c b/target/i386/cpu.c
> > > index 44f1bbdcac76..27b0a17b46a8 100644
> > > --- a/target/i386/cpu.c
> > > +++ b/target/i386/cpu.c
> > > @@ -2793,6 +2793,19 @@ static X86CPUDefinition builtin_x86_defs[] = {
> > >               CPUID_6_EAX_ARAT,
> > >           .xlevel = 0x80000008,
> > >           .model_id = "Intel Atom Processor (SnowRidge)",
> > > +        .versions = (X86CPUVersionDefinition[]) {
> > > +            { .version = 1 },
> > > +            {
> > > +                .version = 2,
> > > +                .alias = "Snowridge-noMPX",
> > 
> > The intention is to stop creating new funny names for CPU model
> > variations, now, and stick to -v1, -v2, -v3, etc.
> > 
> > The .alias field is optional, and was added only for
> > compatibility with the existing -noTSX and -IBRS CPU models.
> 
> Got it.
> 
> > > +                .props = (PropValue[]) {
> > > +                    { "mpx", "off" },
> > > +                    { "model-id", "Intel Atom Processor (Snowridge, no MPX)" },
> > 
> > Do you think it's important to report a different model-id?
> > I would keep it the same and only add mpx=off.
> 
> I just want to let user know easily the differences between Snowridge-v1 and
> Snowridge-v2. Unfortunately, it seems ugly.
> 
> When testing with Cascadelake-Server, it puzzles every time that which one
> should I choose between Cascadelake-Server-v1 and Cascadelake-Server-v2.
> From the output of "-cpu ?", I don't know the differences between them.
> Everytime I have to go to the source code to see the difference.
> 
> Maybe there is a way to see/report the differences between different
> versions of the same CPU model that I just don't know?

Good point.  I forgot that model-id is also the model description
in "-cpu ?".

Well, it doesn't hurt to have a different model-id in v2 that's
more informative.  Feel free to keep the model-id line in v3.

Thanks!

-- 
Eduardo

Re: [PATCH v2] target/i386: Add Snowridge-v2 (noMPX) CPU model
Posted by Xiaoyao Li 4 years, 6 months ago
On 10/12/2019 9:21 AM, Eduardo Habkost wrote:
> On Sat, Oct 12, 2019 at 09:15:56AM +0800, Xiaoyao Li wrote:
>> On 10/12/2019 2:21 AM, Eduardo Habkost wrote:
>>> On Fri, Oct 11, 2019 at 10:53:49PM +0800, Xiaoyao Li wrote:
>>>> Add new version of Snowridge CPU model that removes MPX feature.
>>>>
>>>> MPX support is being phased out by Intel. GCC has dropped it, Linux kernel
>>>> and kvm are also going to do that in the future.
>>>>
>>>> Signed-off-by: Xiaoyao Li <xiaoyao.li@intel.com>
>>>> ---
>>>> Changes in v2:
>>>>       - Use CPU model versioning mechanism instead of machine-type compat
>>>> ---
>>>>    target/i386/cpu.c | 13 +++++++++++++
>>>>    1 file changed, 13 insertions(+)
>>>>
>>>> diff --git a/target/i386/cpu.c b/target/i386/cpu.c
>>>> index 44f1bbdcac76..27b0a17b46a8 100644
>>>> --- a/target/i386/cpu.c
>>>> +++ b/target/i386/cpu.c
>>>> @@ -2793,6 +2793,19 @@ static X86CPUDefinition builtin_x86_defs[] = {
>>>>                CPUID_6_EAX_ARAT,
>>>>            .xlevel = 0x80000008,
>>>>            .model_id = "Intel Atom Processor (SnowRidge)",
>>>> +        .versions = (X86CPUVersionDefinition[]) {
>>>> +            { .version = 1 },
>>>> +            {
>>>> +                .version = 2,
>>>> +                .alias = "Snowridge-noMPX",
>>>
>>> The intention is to stop creating new funny names for CPU model
>>> variations, now, and stick to -v1, -v2, -v3, etc.
>>>
>>> The .alias field is optional, and was added only for
>>> compatibility with the existing -noTSX and -IBRS CPU models.
>>
>> Got it.
>>
>>>> +                .props = (PropValue[]) {
>>>> +                    { "mpx", "off" },
>>>> +                    { "model-id", "Intel Atom Processor (Snowridge, no MPX)" },
>>>
>>> Do you think it's important to report a different model-id?
>>> I would keep it the same and only add mpx=off.
>>
>> I just want to let user know easily the differences between Snowridge-v1 and
>> Snowridge-v2. Unfortunately, it seems ugly.
>>
>> When testing with Cascadelake-Server, it puzzles every time that which one
>> should I choose between Cascadelake-Server-v1 and Cascadelake-Server-v2.
>>  From the output of "-cpu ?", I don't know the differences between them.
>> Everytime I have to go to the source code to see the difference.
>>
>> Maybe there is a way to see/report the differences between different
>> versions of the same CPU model that I just don't know?
> 
> Good point.  I forgot that model-id is also the model description
> in "-cpu ?".
> 
> Well, it doesn't hurt to have a different model-id in v2 that's
> more informative.  Feel free to keep the model-id line in v3.

OK. I will send out the v3 patch keeping the model-id while removing the 
alias.

BTW, do you have better idea to tell the differences among versions of 
the same CPU model?

Re: [PATCH v2] target/i386: Add Snowridge-v2 (noMPX) CPU model
Posted by Eduardo Habkost 4 years, 6 months ago
On Sat, Oct 12, 2019 at 09:31:25AM +0800, Xiaoyao Li wrote:
> On 10/12/2019 9:21 AM, Eduardo Habkost wrote:
> > On Sat, Oct 12, 2019 at 09:15:56AM +0800, Xiaoyao Li wrote:
> > > On 10/12/2019 2:21 AM, Eduardo Habkost wrote:
> > > > On Fri, Oct 11, 2019 at 10:53:49PM +0800, Xiaoyao Li wrote:
> > > > > Add new version of Snowridge CPU model that removes MPX feature.
> > > > > 
> > > > > MPX support is being phased out by Intel. GCC has dropped it, Linux kernel
> > > > > and kvm are also going to do that in the future.
> > > > > 
> > > > > Signed-off-by: Xiaoyao Li <xiaoyao.li@intel.com>
> > > > > ---
> > > > > Changes in v2:
> > > > >       - Use CPU model versioning mechanism instead of machine-type compat
> > > > > ---
> > > > >    target/i386/cpu.c | 13 +++++++++++++
> > > > >    1 file changed, 13 insertions(+)
> > > > > 
> > > > > diff --git a/target/i386/cpu.c b/target/i386/cpu.c
> > > > > index 44f1bbdcac76..27b0a17b46a8 100644
> > > > > --- a/target/i386/cpu.c
> > > > > +++ b/target/i386/cpu.c
> > > > > @@ -2793,6 +2793,19 @@ static X86CPUDefinition builtin_x86_defs[] = {
> > > > >                CPUID_6_EAX_ARAT,
> > > > >            .xlevel = 0x80000008,
> > > > >            .model_id = "Intel Atom Processor (SnowRidge)",
> > > > > +        .versions = (X86CPUVersionDefinition[]) {
> > > > > +            { .version = 1 },
> > > > > +            {
> > > > > +                .version = 2,
> > > > > +                .alias = "Snowridge-noMPX",
> > > > 
> > > > The intention is to stop creating new funny names for CPU model
> > > > variations, now, and stick to -v1, -v2, -v3, etc.
> > > > 
> > > > The .alias field is optional, and was added only for
> > > > compatibility with the existing -noTSX and -IBRS CPU models.
> > > 
> > > Got it.
> > > 
> > > > > +                .props = (PropValue[]) {
> > > > > +                    { "mpx", "off" },
> > > > > +                    { "model-id", "Intel Atom Processor (Snowridge, no MPX)" },
> > > > 
> > > > Do you think it's important to report a different model-id?
> > > > I would keep it the same and only add mpx=off.
> > > 
> > > I just want to let user know easily the differences between Snowridge-v1 and
> > > Snowridge-v2. Unfortunately, it seems ugly.
> > > 
> > > When testing with Cascadelake-Server, it puzzles every time that which one
> > > should I choose between Cascadelake-Server-v1 and Cascadelake-Server-v2.
> > >  From the output of "-cpu ?", I don't know the differences between them.
> > > Everytime I have to go to the source code to see the difference.
> > > 
> > > Maybe there is a way to see/report the differences between different
> > > versions of the same CPU model that I just don't know?
> > 
> > Good point.  I forgot that model-id is also the model description
> > in "-cpu ?".
> > 
> > Well, it doesn't hurt to have a different model-id in v2 that's
> > more informative.  Feel free to keep the model-id line in v3.
> 
> OK. I will send out the v3 patch keeping the model-id while removing the
> alias.
> 
> BTW, do you have better idea to tell the differences among versions of the
> same CPU model?

We could add a new field for a human-readable description of the
CPU model version, and print that field on "-cpu help" if set.

We could also try to generate a description automatically (e.g.
automatically describe SnowRidge-v2 as "SnowRidge-v1 plus mpx"
based on .props).  I'm not sure if it would be worth the effort,
though.

-- 
Eduardo