public inbox for cygwin-patches@cygwin.com
 help / color / mirror / Atom feed
From: Brian Inglis <Brian.Inglis@SystematicSW.ab.ca>
To: cygwin-patches@cygwin.com
Subject: Re: [PATCH] winsup/cygwin/fhandler/proc.cc: format_proc_cpuinfo() Linux 6.8 cpuinfo flags
Date: Mon, 18 Mar 2024 11:21:55 -0600	[thread overview]
Message-ID: <c1f4fa14-09fe-4643-845f-fcb70af7054c@SystematicSW.ab.ca> (raw)
In-Reply-To: <ZfhhqUSzxS11qU3n@calimero.vinschen.de>

On 2024-03-18 09:45, Corinna Vinschen wrote:
> On Mar 18 08:10, Brian Inglis wrote:
>> On 2024-03-18 03:33, Corinna Vinschen wrote:
>>> On Mar 16 10:44, Brian Inglis wrote:
>>>> add Linux 6.8 cpuinfo flags:
>>>> Intel 0x00000007:1 eax:17 fred		Flexible Return and Event Delivery;
>>>> AMD   0x8000001f   eax:4  sev_snp	SEV secure nested paging;
>>>> document unused and some unprinted bits that could look like omissions;
>>>> fix typos and misalignments;
>>>
>>> I'm a bit puzzled about the "unused" slots.  You're adding them
>>> only in some places.  What makes them "look like omissions"?
>>
>> Mainly because single bits are omitted, presumably because they do not want
>> to pollute the symbol space with as yet unused features, just as they do not
>> output all features as cpuinfo flags, until it indicates something about the
>> build and/or system.
>>
>> Compare the minimal common standard feature bits defined in the gcc lib
>> cpuid.h and gcc cpuinfo.h headers, with Linux cpuinfo cpufeatures.h, and the
>> output of the cpuid utility, where almost all bits in older cpuid entries
>> are defined.
> 
> I see.  I just don't understands the difference between, say,
> 
>    ftcprint (features1, 21, "avx512ifma");   /* vec int FMA */
> + /*  ftcprint (features1, 22, ""); */      /* unused */
>    ftcprint (features1, 23, "clflushopt");   /* cache line flush opt */
> 
> and
> 
>    ftcprint (features1,  3, "xsaves");       /* xsaves/xrstors */
> + /*  ftcprint (features1,  4, "xfd"); */   /* eXtended Feature Disabling */
> 
> The latter makes sense, of course, but why is the first comment "unused",
> rather than something like "PCOMMIT instruction" as in the cpuid output?
> 
> Note that I'm not saying that you have to change that, but I would like
> to understand it.

Hi Corinna,

The cpuid output is not always up to date with the kernel, and there are a lot 
of bits defined, so if Linux does not use the bit I will not mention it, except 
where uses and visibility may vary because of merge/patch revisions, as happened 
recently with shstk and lam handling changes.

The cpuinfo capflags are generated by running the Linux build script 
mkcapflags.sh, from the feature symbol suffix, unless overriden by a quoted 
string at the start of the comment, and "" suppresses cpuinfo flag output.

In my weekly pulls of relevant rc sources, I generate a couple of summary logs 
to merge the cpuinfo capflags with the comments and feature bits, and diff 
everything relevant vs the previous tagged release.

I keep an eye on those diffs, and when the next release is no longer a 
candidate, I pull up the Linux changes and look at how they can be added to Cygwin.

I sometimes add features commented out to document bits used in a feature word, 
but not yet displayed on cpuinfo, just to make it easier to compare with Linux, 
or more obvious that an unused bit has not been missed.
The latest additions are the result of uncertainties raised during my last cross 
check.

Below is a sample of the info used to display Linux cpuinfo flags, which I use 
to support Cygwin's, relevant to those you mentioned.
Linux feature word 9 bit 22 is unused, and word 10 bit 4 is not displayed.

$ grep -iC1 'avx512ifma\|clflushopt\|xsaves\|xfd' *
capflags.h-     [X86_FEATURE_SMAP]               = "smap",
capflags.h:     [X86_FEATURE_AVX512IFMA]         = "avx512ifma",
capflags.h:     [X86_FEATURE_CLFLUSHOPT]         = "clflushopt",
capflags.h-     [X86_FEATURE_CLWB]               = "clwb",
--
capflags.h-     [X86_FEATURE_XGETBV1]            = "xgetbv1",
capflags.h:     [X86_FEATURE_XSAVES]             = "xsaves",
capflags.h-     [X86_FEATURE_CQM_LLC]            = "cqm_llc",
--
cpufeatures.h-#define X86_FEATURE_SMAP          ( 9*32+20) /* Supervisor Mode 
Access Prevention */
cpufeatures.h:#define X86_FEATURE_AVX512IFMA    ( 9*32+21) /* AVX-512 Integer 
Fused Multiply-Add instructions */
cpufeatures.h:#define X86_FEATURE_CLFLUSHOPT    ( 9*32+23) /* CLFLUSHOPT 
instruction */
cpufeatures.h-#define X86_FEATURE_CLWB          ( 9*32+24) /* CLWB instruction */
--
cpufeatures.h-#define X86_FEATURE_XGETBV1       (10*32+ 2) /* XGETBV with ECX = 
1 instruction */
cpufeatures.h:#define X86_FEATURE_XSAVES        (10*32+ 3) /* XSAVES/XRSTORS 
instructions */
cpufeatures.h:#define X86_FEATURE_XFD           (10*32+ 4) /* "" eXtended 
Feature Disabling */
cpufeatures.h-
--
cpufeatures.log-Intel   0x00000007      0       EBX     20      "smap" 
        Supervisor Mode Access Prevention
cpufeatures.log:Intel   0x00000007      0       EBX     21      "avx512ifma" 
        AVX-512 Integer Fused Multiply-Add instructions
cpufeatures.log:Intel   0x00000007      0       EBX     23      "clflushopt" 
        CLFLUSHOPT instruction
cpufeatures.log-Intel   0x00000007      0       EBX     24      "clwb" 
        CLWB instruction
--
cpufeatures.log-        0x0000000d      1       EAX      2      "xgetbv1" 
        XGETBV with ECX = 1 instruction
cpufeatures.log:        0x0000000d      1       EAX      3      "xsaves" 
        XSAVES/XRSTORS instructions
cpufeatures.log:        0x0000000d      1       EAX      4      "" 
        xfd eXtended Feature Disabling

[TL:DR

Many of the synthetic Linux features and flags are derived from hw boot or MSR 
info, which we can not yet access from Cygwin, so I ignore those changes, unless 
the feature can be derived from information readily available as a user in the 
cpu, Windows, or Cygwin.

I cross check the Linux and Cygwin sources occasionally to ensure I have not 
missed anything added or removed, spelling changes, Linux tweaks, or readability.

I have so far ignored feature disabling depending on conditions, and cpu errata 
checks and output, as some of that requires MSR info or low level access.

I have looked at trying to extract or generate tables from the Linux sources to 
drive our cpuinfo, use gcc cpuid and cpuinfo headers, automate or at least 
simplify maintenance, but there are many exceptions which we can not determine 
to output, and Intel's practices are not as architecturally structured as AMD's, 
so require code to decide.]

-- 
Take care. Thanks, Brian Inglis              Calgary, Alberta, Canada

La perfection est atteinte                   Perfection is achieved
non pas lorsqu'il n'y a plus rien à ajouter  not when there is no more to add
mais lorsqu'il n'y a plus rien à retirer     but when there is no more to cut
                                 -- Antoine de Saint-Exupéry

  reply	other threads:[~2024-03-18 17:21 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-03-16 16:44 Brian Inglis
2024-03-18  9:33 ` Corinna Vinschen
2024-03-18 14:10   ` Brian Inglis
2024-03-18 15:45     ` Corinna Vinschen
2024-03-18 17:21       ` Brian Inglis [this message]
2024-03-18 22:40         ` Corinna Vinschen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=c1f4fa14-09fe-4643-845f-fcb70af7054c@SystematicSW.ab.ca \
    --to=brian.inglis@systematicsw.ab.ca \
    --cc=cygwin-patches@cygwin.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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 read-only IMAP folder(s) and NNTP newsgroup(s).