linux/drivers/counter
Alexander Sverdlin ef668c9a22 counter: interrupt-cnt: Drop IRQF_NO_THREAD flag
[ Upstream commit 23f9485510 ]

An IRQ handler can either be IRQF_NO_THREAD or acquire spinlock_t, as
CONFIG_PROVE_RAW_LOCK_NESTING warns:
=============================
[ BUG: Invalid wait context ]
6.18.0-rc1+git... #1
-----------------------------
some-user-space-process/1251 is trying to lock:
(&counter->events_list_lock){....}-{3:3}, at: counter_push_event [counter]
other info that might help us debug this:
context-{2:2}
no locks held by some-user-space-process/....
stack backtrace:
CPU: 0 UID: 0 PID: 1251 Comm: some-user-space-process 6.18.0-rc1+git... #1 PREEMPT
Call trace:
 show_stack (C)
 dump_stack_lvl
 dump_stack
 __lock_acquire
 lock_acquire
 _raw_spin_lock_irqsave
 counter_push_event [counter]
 interrupt_cnt_isr [interrupt_cnt]
 __handle_irq_event_percpu
 handle_irq_event
 handle_simple_irq
 handle_irq_desc
 generic_handle_domain_irq
 gpio_irq_handler
 handle_irq_desc
 generic_handle_domain_irq
 gic_handle_irq
 call_on_irq_stack
 do_interrupt_handler
 el0_interrupt
 __el0_irq_handler_common
 el0t_64_irq_handler
 el0t_64_irq

... and Sebastian correctly points out. Remove IRQF_NO_THREAD as an
alternative to switching to raw_spinlock_t, because the latter would limit
all potential nested locks to raw_spinlock_t only.

Cc: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Cc: stable@vger.kernel.org
Link: https://lore.kernel.org/all/20251117151314.xwLAZrWY@linutronix.de/
Fixes: a55ebd47f2 ("counter: add IRQ or GPIO based counter")
Signed-off-by: Alexander Sverdlin <alexander.sverdlin@siemens.com>
Reviewed-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Reviewed-by: Oleksij Rempel <o.rempel@pengutronix.de>
Link: https://lore.kernel.org/r/20251118083603.778626-1-alexander.sverdlin@siemens.com
Signed-off-by: William Breathitt Gray <wbg@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
History 2026-01-19 13:10:18 +01:00
..
104-quad-8.c counter: 104-quad-8: Fix race condition between FLAG and CNTR reads 2023-04-26 13:51:55 +02:00
counter-core.c counter: Internalize sysfs interface code 2023-04-20 12:13:55 +02:00
counter-sysfs.c counter: Internalize sysfs interface code 2023-04-20 12:13:55 +02:00
counter-sysfs.h counter: Internalize sysfs interface code 2023-04-20 12:13:55 +02:00
ftm-quaddec.c counter: Internalize sysfs interface code 2023-04-20 12:13:55 +02:00
intel-qep.c counter: Internalize sysfs interface code 2023-04-20 12:13:55 +02:00
interrupt-cnt.c counter: interrupt-cnt: Drop IRQF_NO_THREAD flag 2026-01-19 13:10:18 +01:00
Kconfig counter: Add support for Intel Quadrature Encoder Peripheral 2021-06-03 18:24:14 +01:00
Makefile counter: Internalize sysfs interface code 2023-04-20 12:13:55 +02:00
microchip-tcb-capture.c counter: microchip-tcb-capture: Fix undefined counter channel state on probe 2025-04-10 14:31:56 +02:00
stm32-lptimer-cnt.c counter: stm32-lptimer-cnt: fix error handling when enabling 2025-04-10 14:31:56 +02:00
stm32-timer-cnt.c counter: stm32-timer-cnt: Add check for clk_enable() 2024-12-14 19:51:11 +01:00
ti-eqep.c counter: Internalize sysfs interface code 2023-04-20 12:13:55 +02:00