mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Sohil Mehta <sohil.mehta@intel.com>
To: x86@kernel.org, Thomas Gleixner <tglx@linutronix.de>,
	Ingo Molnar <mingo@redhat.com>
Cc: Borislav Petkov <bp@alien8.de>,
	Dave Hansen <dave.hansen@linux.intel.com>,
	"H . Peter Anvin" <hpa@zytor.com>,
	Josh Poimboeuf <jpoimboe@kernel.org>,
	Peter Zijlstra <peterz@infradead.org>,
	Sohil Mehta <sohil.mehta@intel.com>,
	"Kirill A . Shutemov" <kirill.shutemov@linux.intel.com>,
	Kai Huang <kai.huang@intel.com>,
	Sebastian Andrzej Siewior <bigeasy@linutronix.de>,
	Mike Rapoport <rppt@kernel.org>, Petr Mladek <pmladek@suse.com>,
	Jani Nikula <jani.nikula@intel.com>,
	Tony Luck <tony.luck@intel.com>, Xin Li <xin@zytor.com>,
	linux-kernel@vger.kernel.org
Subject: [PATCH 7/9] x86/nmi: Improve NMI header documentation
Date: Thu, 27 Mar 2025 23:46:27 +0000	[thread overview]
Message-ID: <20250327234629.3953536-8-sohil.mehta@intel.com> (raw)
In-Reply-To: <20250327234629.3953536-1-sohil.mehta@intel.com>

NMI handlers can be registered by various subsystems, including drivers.
However, the interface for registering and unregistering such handlers
is not clearly documented. In the future, the interface may need to be
extended to identify the source of the NMI.

Add documentation to make the current API more understandable and easier
to use.

Signed-off-by: Sohil Mehta <sohil.mehta@intel.com>
---
 arch/x86/include/asm/nmi.h      | 43 ++++++++++++++++++++++++++++++++-
 arch/x86/include/asm/x86_init.h |  1 +
 2 files changed, 43 insertions(+), 1 deletion(-)

diff --git a/arch/x86/include/asm/nmi.h b/arch/x86/include/asm/nmi.h
index f85aea7bf7f1..79d88d12c8fb 100644
--- a/arch/x86/include/asm/nmi.h
+++ b/arch/x86/include/asm/nmi.h
@@ -20,8 +20,20 @@ extern int unknown_nmi_panic;
 extern int panic_on_unrecovered_nmi;
 extern int panic_on_io_nmi;
 
+/* NMI handler flags */
 #define NMI_FLAG_FIRST	1
 
+/**
+ * enum - NMI types.
+ * @NMI_LOCAL:    Local NMI, CPU-specific NMI generated by the Local APIC.
+ * @NMI_UNKNOWN:  Unknown NMI, the source of the NMI may not be identified.
+ * @NMI_SERR:     System Error NMI, typically triggered by PCI errors.
+ * @NMI_IO_CHECK: I/O Check NMI, related to I/O errors.
+ * @NMI_MAX:      Maximum value for NMI types.
+ *
+ * NMI types are used to categorize NMIs and to dispatch them to the
+ * appropriate handler.
+ */
 enum {
 	NMI_LOCAL=0,
 	NMI_UNKNOWN,
@@ -30,6 +42,7 @@ enum {
 	NMI_MAX
 };
 
+/* NMI handler return values */
 #define NMI_DONE	0
 #define NMI_HANDLED	1
 
@@ -43,6 +56,25 @@ struct nmiaction {
 	const char		*name;
 };
 
+/**
+ * register_nmi_handler - Register a handler for a specific NMI type
+ * @t:    NMI type (e.g. NMI_LOCAL)
+ * @fn:   The NMI handler
+ * @fg:   Flags associated with the NMI handler
+ * @n:    Name of the NMI handler
+ * @init: Optional __init* attributes for struct nmiaction
+ *
+ * Adds the provided handler to the list of handlers for the specified
+ * NMI type. Handlers flagged with NMI_FLAG_FIRST would be executed first.
+ *
+ * Sometimes the source of an NMI can't be reliably determined which
+ * results in an NMI being tagged as "unknown". Register an additional
+ * handler using the NMI type - NMI_UNKNOWN to handle such cases. The
+ * caller would get one last chance to assume responsibility for the
+ * NMI.
+ *
+ * Return: 0 on success, or an error code on failure.
+ */
 #define register_nmi_handler(t, fn, fg, n, init...)	\
 ({							\
 	static struct nmiaction init fn##_na = {	\
@@ -56,7 +88,16 @@ struct nmiaction {
 
 int __register_nmi_handler(unsigned int, struct nmiaction *);
 
-void unregister_nmi_handler(unsigned int, const char *);
+/**
+ * unregister_nmi_handler - Unregister a handler for a specific NMI type
+ * @type: NMI type (e.g. NMI_LOCAL)
+ * @name: Name of the NMI handler used during registration
+ *
+ * Removes the handler associated with the specified NMI type from the
+ * NMI handler list. The "name" is used as a lookup key to identify the
+ * handler.
+ */
+void unregister_nmi_handler(unsigned int type, const char *name);
 
 void set_emergency_nmi_handler(unsigned int type, nmi_handler_t handler);
 
diff --git a/arch/x86/include/asm/x86_init.h b/arch/x86/include/asm/x86_init.h
index 213cf5379a5a..36698cc9fb44 100644
--- a/arch/x86/include/asm/x86_init.h
+++ b/arch/x86/include/asm/x86_init.h
@@ -292,6 +292,7 @@ struct x86_hyper_runtime {
  * @set_wallclock:		set time back to HW clock
  * @is_untracked_pat_range	exclude from PAT logic
  * @nmi_init			enable NMI on cpus
+ * @get_nmi_reason		get the reason an NMI was received
  * @save_sched_clock_state:	save state for sched_clock() on suspend
  * @restore_sched_clock_state:	restore state for sched_clock() on resume
  * @apic_post_init:		adjust apic if needed
-- 
2.43.0


  parent reply	other threads:[~2025-03-27 23:49 UTC|newest]

Thread overview: 47+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-03-27 23:46 [PATCH 0/9] x86: Cleanup NMI handling Sohil Mehta
2025-03-27 23:46 ` [PATCH 1/9] x86/nmi: Simplify unknown NMI panic handling Sohil Mehta
2025-03-31 22:52   ` Huang, Kai
2025-03-31 23:01     ` Sohil Mehta
2025-04-01 15:00   ` Nikolay Borisov
2025-04-01 15:54     ` Sohil Mehta
2025-04-03 13:33   ` [tip: x86/nmi] " tip-bot2 for Sohil Mehta
2025-03-27 23:46 ` [PATCH 2/9] x86/nmi: Consolidate NMI panic variables Sohil Mehta
2025-03-31 22:43   ` Huang, Kai
2025-03-31 22:50     ` Sohil Mehta
2025-03-31 23:05       ` Huang, Kai
2025-03-31 23:20         ` Sohil Mehta
2025-04-01  1:06           ` Huang, Kai
2025-04-01  5:46             ` Sohil Mehta
2025-04-01  8:08               ` Huang, Kai
2025-04-03 13:33   ` [tip: x86/nmi] " tip-bot2 for Sohil Mehta
2025-03-27 23:46 ` [PATCH 3/9] x86/nmi: Use a macro to initialize NMI descriptors Sohil Mehta
2025-03-31 23:46   ` Huang, Kai
2025-04-03 13:33   ` [tip: x86/nmi] " tip-bot2 for Sohil Mehta
2025-03-27 23:46 ` [PATCH 4/9] x86/nmi: Remove export of local_touch_nmi() Sohil Mehta
2025-03-31 23:47   ` Huang, Kai
2025-04-03 13:33   ` [tip: x86/nmi] " tip-bot2 for Sohil Mehta
2025-03-27 23:46 ` [PATCH 5/9] x86/nmi: Fix comment in unknown NMI handling Sohil Mehta
2025-04-01  0:17   ` Huang, Kai
2025-04-01  5:28     ` Sohil Mehta
2025-04-01  5:45     ` H. Peter Anvin
2025-04-01  5:53       ` Sohil Mehta
2025-04-03 13:33   ` [tip: x86/nmi] x86/nmi: Fix comment in unknown_nmi_error() tip-bot2 for Sohil Mehta
2025-03-27 23:46 ` [PATCH 6/9] x86/nmi: Improve and relocate NMI handler comments Sohil Mehta
2025-04-01  1:03   ` Huang, Kai
2025-04-03 13:33   ` [tip: x86/nmi] " tip-bot2 for Sohil Mehta
2025-03-27 23:46 ` Sohil Mehta [this message]
2025-03-31 10:47   ` [PATCH 7/9] x86/nmi: Improve NMI header documentation Ingo Molnar
2025-03-31 16:04     ` Sohil Mehta
2025-03-31 21:36       ` Sohil Mehta
2025-04-01  8:08         ` Ingo Molnar
2025-04-01 16:11           ` Sohil Mehta
2025-04-03 13:33   ` [tip: x86/nmi] x86/nmi: Add missing description x86_platform_ops::get_nmi_reason to <asm/x86_init.h> tip-bot2 for Sohil Mehta
2025-04-03 13:33   ` [tip: x86/nmi] x86/nmi: Improve <asm/nmi.h> documentation tip-bot2 for Sohil Mehta
2025-03-27 23:46 ` [PATCH 8/9] x86/nmi: Clean up NMI selftest Sohil Mehta
2025-04-03 13:33   ` [tip: x86/nmi] " tip-bot2 for Sohil Mehta
2025-03-27 23:46 ` [PATCH 9/9] x86/nmi: Improve NMI duration console print Sohil Mehta
2025-04-01  0:42   ` Huang, Kai
2025-04-03 13:33   ` [tip: x86/nmi] x86/nmi: Improve NMI duration console printouts tip-bot2 for Sohil Mehta
2025-04-01 14:54 ` [PATCH 0/9] x86: Cleanup NMI handling Peter Zijlstra
2025-04-01 16:00 ` Nikolay Borisov
2025-04-02 15:13 ` H. Peter Anvin

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=20250327234629.3953536-8-sohil.mehta@intel.com \
    --to=sohil.mehta@intel.com \
    --cc=bigeasy@linutronix.de \
    --cc=bp@alien8.de \
    --cc=dave.hansen@linux.intel.com \
    --cc=hpa@zytor.com \
    --cc=jani.nikula@intel.com \
    --cc=jpoimboe@kernel.org \
    --cc=kai.huang@intel.com \
    --cc=kirill.shutemov@linux.intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=peterz@infradead.org \
    --cc=pmladek@suse.com \
    --cc=rppt@kernel.org \
    --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®