linux-yocto/drivers/counter
Alexander Sverdlin 32b3f3382d counter: interrupt-cnt: Protect enable/disable OPs with mutex
[ Upstream commit 7351312632 ]

Enable/disable seems to be racy on SMP, consider the following scenario:

CPU0					CPU1

interrupt_cnt_enable_write(true)
{
	if (priv->enabled == enable)
		return 0;

	if (enable) {
		priv->enabled = true;
					interrupt_cnt_enable_write(false)
					{
						if (priv->enabled == enable)
							return 0;

						if (enable) {
							priv->enabled = true;
							enable_irq(priv->irq);
						} else {
							disable_irq(priv->irq)
							priv->enabled = false;
						}
		enable_irq(priv->irq);
	} else {
		disable_irq(priv->irq);
		priv->enabled = false;
	}

The above would result in priv->enabled == false, but IRQ left enabled.
Protect both write (above race) and read (to propagate the value on SMP)
callbacks with a mutex.

Signed-off-by: Alexander Sverdlin <alexander.sverdlin@siemens.com>
Fixes: a55ebd47f2 ("counter: add IRQ or GPIO based counter")
Acked-by: Oleksij Rempel <o.rempel@pengutronix.de>
Link: https://lore.kernel.org/r/20250331163642.2382651-1-alexander.sverdlin@siemens.com
Signed-off-by: William Breathitt Gray <wbg@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2025-06-19 15:28:31 +02:00
..
104-quad-8.c
counter-chrdev.c
counter-chrdev.h
counter-core.c
counter-sysfs.c
counter-sysfs.h
ftm-quaddec.c
i8254.c
intel-qep.c
interrupt-cnt.c counter: interrupt-cnt: Protect enable/disable OPs with mutex 2025-06-19 15:28:31 +02:00
Kconfig
Makefile
microchip-tcb-capture.c counter: microchip-tcb-capture: Fix undefined counter channel state on probe 2025-04-07 10:06:37 +02:00
rz-mtu3-cnt.c
stm32-lptimer-cnt.c counter: stm32-lptimer-cnt: fix error handling when enabling 2025-04-07 10:06:37 +02:00
stm32-timer-cnt.c
ti-ecap-capture.c counter: ti-ecap-capture: Add check for clk_enable() 2024-12-09 10:32:37 +01:00
ti-eqep.c