From: Jacob Pan <jacob.jun.pan@linux.intel.com>
To: Sohil Mehta <sohil.mehta@intel.com>
Cc: X86 Kernel <x86@kernel.org>, LKML <linux-kernel@vger.kernel.org>,
"Thomas Gleixner" <tglx@linutronix.de>,
Dave Hansen <dave.hansen@intel.com>,
"H. Peter Anvin" <hpa@zytor.com>, Ingo Molnar <mingo@redhat.com>,
Borislav Petkov <bp@alien8.de>,
<linux-perf-users@vger.kernel.org>,
Peter Zijlstra <peterz@infradead.org>,
Andi Kleen <andi.kleen@intel.com>, Xin Li <xin3.li@intel.com>,
jacob.jun.pan@linux.intel.com
Subject: Re: [PATCH v2 1/6] x86/irq: Add enumeration of NMI source reporting CPU feature
Date: Thu, 27 Jun 2024 15:23:22 -0700 [thread overview]
Message-ID: <20240627152102.592a20f5@jacob-builder> (raw)
In-Reply-To: <004f6400-0d35-4c5e-ad31-094be8860f08@intel.com>
On Fri, 21 Jun 2024 18:08:14 -0700, Sohil Mehta <sohil.mehta@intel.com>
wrote:
> >> diff --git a/arch/x86/kernel/cpu/cpuid-deps.c
> >> b/arch/x86/kernel/cpu/cpuid-deps.c
> >> index b7d9f530ae16..39526041e91a 100644
> >> --- a/arch/x86/kernel/cpu/cpuid-deps.c
> >> +++ b/arch/x86/kernel/cpu/cpuid-deps.c
> >> @@ -84,6 +84,7 @@ static const struct cpuid_dep cpuid_deps[] = {
> >> { X86_FEATURE_SHSTK, X86_FEATURE_XSAVES
> >> }, { X86_FEATURE_FRED, X86_FEATURE_LKGS },
> >> { X86_FEATURE_FRED, X86_FEATURE_WRMSRNS
> >> },
> >> + { X86_FEATURE_NMI_SOURCE, X86_FEATURE_FRED
> >> }, {}
> >> };
> > If FRED is never reported by CPUID, then there would not be any calls to
> > setup_clear_cpu_cap(X86_FEATURE_FRED), so this table does not help clear
> > the dependent NMI_SOURCE, right?
> >
>
> I thought there was a common function for all features. I expected it to
> go through each feature and clear the ones whose dependency is missing.
> But I can't find it easily. Maybe someone else knows this better.
>
> However, anytime do_clear_cpu_cap() is called for any feature it does
> the below and scans the cpuid_deps table to clear all features with
> missing dependencies. That would cause X86_FEATURE_NMI_SOURCE to be
> cleared one way or another.
I don't think this is true. For a simplified example:
cpuid_deps has the following feature-depends pairs.
[1, 3]
[2, 3]
now, do_clear_cpu_cap(c, 2)
Before the loop below __set_bit(feature, disable), bit 2 is set.
Since there is no other features depend on 2, the loop below will not clear
any other features. no?
>
>
> /* Loop until we get a stable state. */
> do {
> changed = false;
> for (d = cpuid_deps; d->feature; d++) {
> if (!test_bit(d->depends, disable))
> continue;
> if (__test_and_set_bit(d->feature, disable))
> continue;
>
> changed = true;
> clear_feature(c, d->feature);
> }
> } while (changed);
>
>
> > In the next version, I will add runtime disable if HW malfunctions.
> > i.e. no valid bitmask.
> >
>
> I don't think we do this for other features that have a missing
> dependency. It doesn't seem NMI source is any different from them.
>
NMI source is an optimization with a fallback path *always* available. In
that sense, it can be disabled at runtime without losing functionality.
The closest analogy I can think of are timers for clocksources where we use
higher ranking/cheaper timers first, and only resort to other timers in
case the primary/optimal one fails.
e.g.
root@984fee003c4f:~/jacob# cat
/sys/devices/system/clocksource/clocksource0/available_clocksource
tsc hpet acpi_pm
Thanks,
Jacob
next prev parent reply other threads:[~2024-06-27 22:18 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-06-11 16:54 Jacob Pan
2024-06-11 16:54 ` [PATCH v2 1/6] x86/irq: Add enumeration of NMI source reporting CPU feature Jacob Pan
2024-06-12 2:32 ` Xin Li
2024-06-12 2:50 ` H. Peter Anvin
2024-06-12 3:04 ` Xin Li
2024-06-21 23:00 ` Sohil Mehta
2024-06-28 5:00 ` Jacob Pan
2024-06-21 22:23 ` Sohil Mehta
2024-06-21 23:46 ` Jacob Pan
2024-06-22 1:08 ` Sohil Mehta
2024-06-27 22:23 ` Jacob Pan [this message]
2024-06-27 23:20 ` Sohil Mehta
2024-06-11 16:54 ` [PATCH v2 2/6] x86/irq: Extend NMI handler registration interface to include source Jacob Pan
2024-06-24 23:16 ` Sohil Mehta
2024-06-28 4:56 ` Jacob Pan
2024-06-11 16:54 ` [PATCH v2 3/6] x86/irq: Factor out common NMI handling code Jacob Pan
2024-06-11 16:54 ` [PATCH v2 4/6] x86/irq: Process nmi sources in NMI handler Jacob Pan
2024-06-11 18:41 ` H. Peter Anvin
2024-06-12 21:54 ` Jacob Pan
2024-06-24 23:38 ` Sohil Mehta
2024-06-24 23:53 ` Sohil Mehta
2024-06-11 16:54 ` [PATCH v2 5/6] perf/x86: Enable NMI source reporting for perfmon Jacob Pan
2024-06-11 19:10 ` H. Peter Anvin
2024-06-12 20:27 ` Jacob Pan
2024-06-11 16:54 ` [PATCH v2 6/6] x86/irq: Enable NMI source on IPIs delivered as NMI Jacob Pan
2024-06-12 2:04 ` Sean Christopherson
2024-06-12 2:55 ` Re: Xin Li
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=20240627152102.592a20f5@jacob-builder \
--to=jacob.jun.pan@linux.intel.com \
--cc=andi.kleen@intel.com \
--cc=bp@alien8.de \
--cc=dave.hansen@intel.com \
--cc=hpa@zytor.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-perf-users@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=peterz@infradead.org \
--cc=sohil.mehta@intel.com \
--cc=tglx@linutronix.de \
--cc=x86@kernel.org \
--cc=xin3.li@intel.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.