Re: [PATCH 2/3] genirq: Export NMI APIs

Guenter Roeck <[email protected]> Thu, 30 Jul 2026 15:55:26 -0700
Newsgroups org.kernel.vger.linux-watchdog,org.kernel.vger.linux-arm-msm,org.kernel.vger.linux-kernel
Message-ID <[email protected]>
On 7/30/26 14:49, Doug Anderson wrote:
> Hi,
> 
> On Thu, Jul 30, 2026 at 2:33 PM Mayank Rungta via B4 Relay
> <[email protected]> wrote:
>>
>> From: Mayank Rungta <[email protected]>
>>
>> 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 <[email protected]>
>> ---
>>   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.
> 

I don't claim to understand the NMI APIs used, but Sashiko's feedback
seems real to me. Someone who knows that code will need to confirm that
there are no unexpected pitfalls.

Thanks,
Guenter