Re: [PATCH 2/3] genirq: Export NMI APIs
From: Doug Anderson
Date: Thu Jul 30 2026 - 17:54:47 EST
Hi,
On Thu, Jul 30, 2026 at 2:33 PM Mayank Rungta via B4 Relay
<devnull+mrungta.google.com@xxxxxxxxxx> wrote:
>
> From: Mayank Rungta <mrungta@xxxxxxxxxx>
>
> Currently, request_nmi(), free_nmi(), enable_nmi() and disable_nmi_nosync()
> are restricted to built-in kernel code because they are not exported to
> loadable modules.
>
> Export these APIs to allow loadable modules to register and manage NMIs.
> This allows watchdog drivers configured as loadable modules to register
> their bark interrupt as an NMI.
>
> Signed-off-by: Mayank Rungta <mrungta@xxxxxxxxxx>
> ---
> kernel/irq/manage.c | 4 ++++
> 1 file changed, 4 insertions(+)
>
> diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c
> index 2fbff2618a1e..fb0b8da32f4c 100644
> --- a/kernel/irq/manage.c
> +++ b/kernel/irq/manage.c
> @@ -766,6 +766,7 @@ void disable_nmi_nosync(unsigned int irq)
> {
> disable_irq_nosync(irq);
> }
> +EXPORT_SYMBOL_GPL(disable_nmi_nosync);
>
> void __enable_irq(struct irq_desc *desc)
> {
> @@ -833,6 +834,7 @@ void enable_nmi(unsigned int irq)
> {
> enable_irq(irq);
> }
> +EXPORT_SYMBOL_GPL(enable_nmi);
>
> static int set_irq_wake_real(unsigned int irq, unsigned int on)
> {
> @@ -2080,6 +2082,7 @@ const void *free_nmi(unsigned int irq, void *dev_id)
>
> return __cleanup_nmi(irq, desc);
> }
> +EXPORT_SYMBOL_GPL(free_nmi);
>
> /**
> * request_threaded_irq - allocate an interrupt line
> @@ -2342,6 +2345,7 @@ int request_nmi(unsigned int irq, irq_handler_t handler,
>
> return retval;
> }
> +EXPORT_SYMBOL_GPL(request_nmi);
This seems reasonable to me. One thought I had was that we could
possibly get by with fewer exported symbols by changing
disable_nmi_nosync() and enable_nmi() to "static inline" functions in
the header file. That being said, what Mayank has here feels slightly
better to me.
Reviewed-by: Douglas Anderson <dianders@xxxxxxxxxxxx>