Esben Haabendal
524e37f785
rtc: interface: Fix long-standing race when setting alarm
...
commit 795cda8338eab036013314dbc0b04aae728880ab upstream.
As described in the old comment dating back to
commit 6610e0893b ("RTC: Rework RTC code to use timerqueue for events")
from 2010, we have been living with a race window when setting alarm
with an expiry in the near future (i.e. next second).
With 1 second resolution, it can happen that the second ticks after the
check for the timer having expired, but before the alarm is actually set.
When this happen, no alarm IRQ is generated, at least not with some RTC
chips (isl12022 is an example of this).
With UIE RTC timer being implemented on top of alarm irq, being re-armed
every second, UIE will occasionally fail to work, as an alarm irq lost
due to this race will stop the re-arming loop.
For now, I have limited the additional expiry check to only be done for
alarms set to next seconds. I expect it should be good enough, although I
don't know if we can now for sure that systems with loads could end up
causing the same problems for alarms set 2 seconds or even longer in the
future.
I haven't been able to reproduce the problem with this check in place.
Cc: stable@vger.kernel.org
Signed-off-by: Esben Haabendal <esben@geanix.com>
Link: https://lore.kernel.org/r/20250516-rtc-uie-irq-fixes-v2-1-3de8e530a39e@geanix.com
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2025-10-29 13:59:53 +01:00
..
class.c
rtc: Fix offset calculation for .start_secs < 0
2025-06-27 11:02:48 +01:00
dev.c
hctosys.c
interface.c
rtc: interface: Fix long-standing race when setting alarm
2025-10-29 13:59:53 +01:00
Kconfig
rtc: Improve performance of rtc_time64_to_tm(). Add tests.
2025-06-27 11:02:58 +01:00
lib.c
rtc: Make rtc_time64_to_tm() support dates before 1970
2025-06-27 11:02:58 +01:00
lib_test.c
rtc: test: Fix invalid format specifier.
2025-06-27 11:02:58 +01:00
Makefile
rtc: Improve performance of rtc_time64_to_tm(). Add tests.
2025-06-27 11:02:58 +01:00
nvmem.c
proc.c
rtc-88pm80x.c
rtc-88pm860x.c
rtc-ab-b5ze-s3.c
rtc-ab-eoz9.c
rtc: ab-eoz9: don't fail temperature reads on undervoltage notification
2024-12-14 19:44:41 +01:00
rtc-ab3100.c
rtc-ab8500.c
rtc-abx80x.c
rtc: abx80x: Fix WDT bit position of the status register
2024-12-14 19:44:40 +01:00
rtc-ac100.c
rtc-armada38x.c
rtc-as3722.c
rtc-asm9260.c
rtc-aspeed.c
rtc-at91rm9200.c
rtc-at91rm9200.h
rtc-at91sam9.c
rtc: at91sam9: fix OF node leak in probe() error path
2024-11-08 16:20:42 +01:00
rtc-au1xxx.c
rtc-bd70528.c
rtc-bq32k.c
rtc-bq4802.c
rtc-brcmstb-waketimer.c
rtc-cadence.c
rtc-cmos.c
rtc: cmos: Fix return value of nvmem callbacks
2024-08-19 05:33:38 +02:00
rtc-coh901331.c
rtc-core.h
rtc-cpcap.c
rtc-cros-ec.c
rtc-da9052.c
rtc-da9055.c
rtc-da9063.c
rtc-davinci.c
rtc-digicolor.c
rtc-dm355evm.c
rtc-ds1216.c
rtc-ds1286.c
rtc-ds1302.c
rtc-ds1305.c
rtc-ds1307.c
rtc: ds1307: handle oscillator stop flag (OSF) for ds1341
2025-08-28 16:21:35 +02:00
rtc-ds1343.c
rtc-ds1347.c
rtc-ds1374.c
rtc-ds1390.c
rtc-ds1511.c
rtc-ds1553.c
rtc-ds1672.c
rtc-ds1685.c
rtc: ds1685: use EXPORT_SYMBOL_GPL for ds1685_rtc_poweroff
2023-09-23 10:59:36 +02:00
rtc-ds1742.c
rtc-ds2404.c
rtc-ds3232.c
rtc-efi-platform.c
rtc-efi.c
rtc-em3027.c
rtc-ep93xx.c
rtc-fm3130.c
rtc-fsl-ftm-alarm.c
rtc-ftrtc010.c
rtc-generic.c
rtc-goldfish.c
rtc-hid-sensor-time.c
rtc-hym8563.c
rtc: hym8563: fix incorrect maximum clock rate handling
2025-08-28 16:21:22 +02:00
rtc-imx-sc.c
rtc-imxdi.c
rtc-isl1208.c
rtc: isl1208: Fix return value of nvmem callbacks
2024-08-19 05:33:39 +02:00
rtc-isl12022.c
rtc-isl12026.c
rtc-jz4740.c
rtc-lp8788.c
rtc-lpc24xx.c
rtc-lpc32xx.c
rtc-ls1x.c
rtc-m41t80.c
rtc-m41t93.c
rtc-m41t94.c
rtc-m48t35.c
rtc-m48t59.c
rtc-m48t86.c
rtc-max6900.c
rtc-max6902.c
rtc-max6916.c
rtc-max8907.c
rtc-max8925.c
rtc-max8997.c
rtc-max8998.c
rtc-max77686.c
rtc-mc13xxx.c
rtc-mc146818-lib.c
rtc: mc146818-lib: Fix the AltCentury for AMD platforms
2022-05-25 09:14:32 +02:00
rtc-mcp795.c
rtc-meson-vrtc.c
rtc: meson-vrtc: Use ktime_get_real_ts64() to get the current time
2023-05-17 11:35:51 +02:00
rtc-meson.c
rtc-moxart.c
rtc-mpc5121.c
rtc-mrst.c
rtc-msm6242.c
rtc-mt6397.c
rtc: mt6397: check return value after calling platform_get_resource()
2022-06-14 18:11:53 +02:00
rtc-mt7622.c
rtc-mv.c
rtc-mxc.c
rtc-mxc_v2.c
rtc: mxc_v2: Add missing clk_disable_unprepare()
2023-01-18 11:41:32 +01:00
rtc-omap.c
rtc: omap: include header for omap_rtc_power_off_program prototype
2023-05-17 11:35:51 +02:00
rtc-opal.c
rtc-palmas.c
rtc-pcap.c
rtc-pcf2123.c
rtc-pcf2127.c
rtc-pcf8523.c
rtc-pcf8563.c
rtc: pcf8563: fix incorrect maximum clock rate handling
2025-08-28 16:21:22 +02:00
rtc-pcf8583.c
rtc-pcf50633.c
rtc-pcf85063.c
rtc: pcf85063: fix potential OOB write in PCF85063 NVMEM read
2025-03-13 12:42:59 +01:00
rtc-pcf85363.c
rtc: pcf85363: fix wrong mask/val parameters in regmap_update_bits call
2023-11-20 10:30:14 +01:00
rtc-pic32.c
rtc: pic32: Move devm_rtc_allocate_device earlier in pic32_rtc_probe()
2023-01-18 11:41:31 +01:00
rtc-pl030.c
rtc-pl031.c
rtc-pm8xxx.c
rtc: pm8xxx: fix set-alarm race
2023-03-11 16:43:58 +01:00
rtc-ps3.c
rtc-puv3.c
rtc-pxa.c
rtc: pxa: fix null pointer dereference
2022-01-27 09:19:53 +01:00
rtc-r7301.c
rtc-r9701.c
rtc-rc5t583.c
rtc-rk808.c
rtc-rp5c01.c
rtc-rs5c313.c
rtc-rs5c348.c
rtc-rs5c372.c
rtc-rtd119x.c
rtc-rv3028.c
rtc-rv3029c2.c
rtc-rv8803.c
rtc-rx4581.c
rtc-rx6110.c
rtc-rx8010.c
rtc-rx8025.c
rtc-rx8581.c
rtc-s3c.c
rtc-s3c.h
rtc-s5m.c
rtc-s35390a.c
rtc-sa1100.c
rtc-sa1100.h
rtc-sc27xx.c
rtc-sd3078.c
rtc-sh.c
rtc: sh: assign correct interrupts with DT
2025-06-27 11:02:48 +01:00
rtc-sirfsoc.c
rtc-snvs.c
rtc: snvs: Allow a time difference on clock register read
2023-01-18 11:41:29 +01:00
rtc-spear.c
rtc-st-lpc.c
rtc: st-lpc: Use IRQF_NO_AUTOEN flag in request_irq()
2024-12-14 19:44:40 +01:00
rtc-starfire.c
rtc-stk17ta8.c
rtc-stm32.c
rtc-stmp3xxx.c
rtc-sun4v.c
rtc-sun6i.c
rtc: sun6i: Always export the internal oscillator
2023-03-11 16:44:13 +01:00
rtc-sunxi.c
rtc-tegra.c
rtc-test.c
rtc-tps6586x.c
rtc-tps65910.c
rtc-tps80031.c
rtc-twl.c
rtc-tx4939.c
rtc-v3020.c
rtc-vr41xx.c
rtc-vt8500.c
rtc-wilco-ec.c
rtc-wm831x.c
rtc-wm8350.c
rtc: wm8350: Handle error for wm8350_register_irq
2022-04-15 14:18:31 +02:00
rtc-x1205.c
rtc: x1205: Fix Xicor X1205 vendor prefix
2025-10-29 13:59:50 +01:00
rtc-xgene.c
rtc-zynqmp.c
sysfs.c
systohc.c