From: Sohil Mehta <sohil.mehta@intel.com>
To: Sean Christopherson <seanjc@google.com>,
Thomas Gleixner <tglx@linutronix.de>,
Dave Hansen <dave.hansen@linux.intel.com>,
"H . Peter Anvin" <hpa@zytor.com>, Borislav Petkov <bp@alien8.de>,
Ingo Molnar <mingo@redhat.com>
Cc: <x86@kernel.org>, <linux-kernel@vger.kernel.org>,
Xin Li <xin@zytor.com>, Andy Lutomirski <luto@kernel.org>,
Peter Zijlstra <peterz@infradead.org>,
Adrian Hunter <adrian.hunter@intel.com>,
Kan Liang <kan.liang@linux.intel.com>,
Tony Luck <tony.luck@intel.com>, Zhang Rui <rui.zhang@intel.com>,
Steven Rostedt <rostedt@goodmis.org>,
Andrew Cooper <andrew.cooper3@citrix.com>,
"Kirill A . Shutemov" <kirill.shutemov@linux.intel.com>,
Jacob Pan <jacob.pan@linux.microsoft.com>,
Andi Kleen <ak@linux.intel.com>, Kai Huang <kai.huang@intel.com>,
"Sandipan Das" <sandipan.das@amd.com>,
<linux-perf-users@vger.kernel.org>, <linux-edac@vger.kernel.org>,
<kvm@vger.kernel.org>, <linux-pm@vger.kernel.org>,
<linux-trace-kernel@vger.kernel.org>
Subject: Re: [PATCH v7 08/10] x86/nmi: Enable NMI-source for IPIs delivered as NMIs
Date: Thu, 10 Jul 2025 15:04:01 -0700 [thread overview]
Message-ID: <d7a11ebd-48d5-48bf-abac-317d5da80a6a@intel.com> (raw)
In-Reply-To: <aG1laKXYu7Uc4Tsb@google.com>
On 7/8/2025 11:37 AM, Sean Christopherson wrote:
> This patch is buggy. There are at least two implementations of ->send_IPI_mask()
> that this breaks:
>
Thank you for point this out. I should have been more diligent.
> Looking at all of this again, shoving the NMI source information into the @vector
> is quite brittle. Nothing forces implementations to handle embedded delivery
> mode information.
>
I agree. There is already some confusion with NMI_VECTOR and APIC_DM_NMI
used interchangeably sometimes. Adding the new NMI-source vectors with
the encoded delivery mode makes it worse.
> One thought would be to pass a small struct (by value), and then provide macros
> to generate the structure for a specific vector. That provides some amount of
> type safety and should make it a bit harder to pass in garbage, without making
> the callers any less readable.
>
> struct apic_ipi {
> u8 vector;
> u8 type;
> };
>
I am fine with this approach. Though, the changes would be massive since
we have quite a few interfaces and a lot of "struct apic".
.send_IPI
.send_IPI_mask
.send_IPI_mask_allbutself
.send_IPI_allbutself
.send_IPI_all
.send_IPI_self
An option I was considering was whether we should avoid exposing the raw
delivery mode to the callers since it is mainly an APIC internal thing.
The callers should only have to say NMI or IRQ along with the vector and
let the APIC code figure out how to generate it.
One option is to add a separate set of send_IPI_NMI APIs parallel to
send_IPI ones that we have. But then we would end with >10 ways to
generate IPIs.
Another way would be to assign the NMI vectors in a different range and
use the range to differentiate between IRQ and NMI.
For example:
IRQ => 0x0-0xFF
NMI => 0x10000-0x1000F.
However, this would still be fragile and probably have similar issues to
the one you pointed out.
>
> static __always_inline void __apic_send_IPI_self(struct apic_ipi ipi)
Taking a step back:
Since we are considering changing the interface, would it be worth
consolidating the multiple send_IPI APIs into one or two? Mainly, by
moving the destination information from the function name to the
function parameter.
apic_send_IPI(DEST, MASK, TYPE, VECTOR)
DEST => self, all, allbutself, mask, maskbutself
MASK => cpumask
TYPE => IRQ, NMI
VECTOR => Vector number specific to the type.
I like the single line IPI invocation. All of this can still be passed
in a neat "struct apic_ipi" with a macro helping the callers fill the
struct.
These interfaces are decades old. So, maybe I am being too ambitious and
this isn't practically feasible. Thoughts/Suggestions?
Note: Another part of me says there are only a handful of NMI IPI usages
and the heavy lifting isn't worth it. We should fix the bugs, improve
testing and use the existing approach since it is the least invasive :)
next prev parent reply other threads:[~2025-07-10 22:04 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-06-12 21:48 [PATCH v7 00/10] x86: Add support for NMI-source reporting with FRED Sohil Mehta
2025-06-12 21:48 ` [PATCH v7 01/10] x86/fred: Provide separate IRQ vs. NMI wrappers for entry from KVM Sohil Mehta
2025-06-19 3:53 ` Xin Li
2025-06-19 21:35 ` Sohil Mehta
2025-06-12 21:48 ` [PATCH v7 02/10] x86/fred: Pass event data to the NMI entry point " Sohil Mehta
2025-06-13 0:18 ` Sean Christopherson
2025-06-13 15:20 ` Sohil Mehta
2025-06-19 5:02 ` Xin Li
2025-06-19 22:15 ` Sohil Mehta
2025-06-19 22:45 ` Xin Li
2025-06-19 22:57 ` Sohil Mehta
2025-06-20 22:51 ` H. Peter Anvin
2025-06-20 23:18 ` Sean Christopherson
2025-06-20 23:22 ` H. Peter Anvin
2025-06-23 15:39 ` Sean Christopherson
2025-06-23 16:10 ` H. Peter Anvin
2025-06-12 21:48 ` [PATCH v7 03/10] x86/cpufeatures: Add the CPUID feature bit for NMI-source reporting Sohil Mehta
2025-06-19 5:06 ` Xin Li
2025-06-12 21:48 ` [PATCH v7 04/10] x86/nmi: Extend the registration interface to include the NMI-source vector Sohil Mehta
2025-06-12 21:48 ` [PATCH v7 05/10] x86/nmi: Assign and register NMI-source vectors Sohil Mehta
2025-07-07 13:21 ` Zhuo, Qiuxu
2025-07-07 20:00 ` Sohil Mehta
2025-07-08 7:30 ` Zhuo, Qiuxu
2025-07-11 0:32 ` Sohil Mehta
2025-06-12 21:48 ` [PATCH v7 06/10] x86/nmi: Add support to handle NMIs with source information Sohil Mehta
2025-07-07 13:50 ` Zhuo, Qiuxu
2025-07-07 20:32 ` Sohil Mehta
2025-06-12 21:48 ` [PATCH v7 07/10] x86/nmi: Prepare for the new NMI-source vector encoding Sohil Mehta
2025-06-19 7:43 ` Chao Gao
2025-06-19 22:23 ` Sohil Mehta
2025-06-19 22:54 ` Sohil Mehta
2025-06-12 21:48 ` [PATCH v7 08/10] x86/nmi: Enable NMI-source for IPIs delivered as NMIs Sohil Mehta
2025-07-08 18:37 ` Sean Christopherson
2025-07-10 22:04 ` Sohil Mehta [this message]
2025-07-10 22:40 ` Sean Christopherson
2025-07-24 22:59 ` Sohil Mehta
2025-06-12 21:48 ` [PATCH v7 09/10] perf/x86: Enable NMI-source reporting for perfmon Sohil Mehta
2025-06-12 21:48 ` [PATCH v7 10/10] x86/nmi: Print source information with the unknown NMI console message Sohil Mehta
2025-06-13 7:06 ` [PATCH v7 00/10] x86: Add support for NMI-source reporting with FRED Peter Zijlstra
2025-06-13 15:21 ` Sohil Mehta
2025-07-07 13:56 ` Zhuo, Qiuxu
2025-07-07 20:33 ` Sohil Mehta
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=d7a11ebd-48d5-48bf-abac-317d5da80a6a@intel.com \
--to=sohil.mehta@intel.com \
--cc=adrian.hunter@intel.com \
--cc=ak@linux.intel.com \
--cc=andrew.cooper3@citrix.com \
--cc=bp@alien8.de \
--cc=dave.hansen@linux.intel.com \
--cc=hpa@zytor.com \
--cc=jacob.pan@linux.microsoft.com \
--cc=kai.huang@intel.com \
--cc=kan.liang@linux.intel.com \
--cc=kirill.shutemov@linux.intel.com \
--cc=kvm@vger.kernel.org \
--cc=linux-edac@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-perf-users@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=linux-trace-kernel@vger.kernel.org \
--cc=luto@kernel.org \
--cc=mingo@redhat.com \
--cc=peterz@infradead.org \
--cc=rostedt@goodmis.org \
--cc=rui.zhang@intel.com \
--cc=sandipan.das@amd.com \
--cc=seanjc@google.com \
--cc=tglx@linutronix.de \
--cc=tony.luck@intel.com \
--cc=x86@kernel.org \
--cc=xin@zytor.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
all inboxes | Powered by JetHome®