linux/drivers/rtc
Esben Haabendal 4790e3a1f6 rtc: interface: Fix long-standing race when setting alarm
commit 795cda8338 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>
History 2025-10-19 16:33:54 +02:00
..
class.c rtc: Fix offset calculation for .start_secs < 0 2025-06-10 07:12:59 -04:00
dev.c [tree-wide] finally take no_llseek out 2024-09-27 08:18:43 -07:00
interface.c rtc: interface: Fix long-standing race when setting alarm 2025-10-19 16:33:54 +02:00
Kconfig RTC for 6.12 2024-09-25 14:38:37 -07:00
lib.c rtc: Make rtc_time64_to_tm() support dates before 1970 2025-06-10 07:12:58 -04:00
lib_test.c rtc: add missing MODULE_DESCRIPTION() macro 2024-06-28 00:24:43 +02:00
Makefile RTC for 6.12 2024-09-25 14:38:37 -07:00
nvmem.c nvmem: add explicit config option to read old syntax fixed OF cells 2023-10-21 19:19:06 +02:00
proc.c rtc: fix snprintf() checking in is_rtc_hctosys() 2021-05-25 00:36:11 +02:00
rtc-88pm80x.c rtc: 88pm80x: Convert to platform remove callback returning void 2023-03-17 23:03:16 +01:00
rtc-88pm860x.c rtc: 88pm860x: Convert to platform remove callback returning void 2023-03-17 23:03:16 +01:00
rtc-ab-b5ze-s3.c rtc: Drop explicit initialization of struct i2c_device_id::driver_data to 0 2024-07-07 00:40:29 +02:00
rtc-ab-eoz9.c rtc: ab-eoz9: don't fail temperature reads on undervoltage notification 2024-12-05 14:03:07 +01:00
rtc-ab8500.c rtc: ab8500: Convert to platform remove callback returning void 2023-03-17 23:03:16 +01:00
rtc-abx80x.c rtc: abx80x: Fix WDT bit position of the status register 2024-12-05 14:03:03 +01:00
rtc-ac100.c rtc: ac100: remove misuses of kernel-doc 2024-01-15 22:27:35 +01:00
rtc-armada38x.c rtc: remove redundant of_match_ptr() 2023-08-10 09:45:41 +02:00
rtc-as3722.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 157 2019-05-30 11:26:37 -07:00
rtc-asm9260.c rtc: asm9260: Convert to platform remove callback returning void 2023-03-17 23:03:17 +01:00
rtc-aspeed.c rtc: remove redundant of_match_ptr() 2023-08-10 09:45:41 +02:00
rtc-at91rm9200.c rtc: at91rm9200: annotate at91_rtc_remove with __exit again 2023-10-16 06:33:00 +02:00
rtc-at91sam9.c rtc: at91sam9: fix OF node leak in probe() error path 2024-09-12 00:33:33 +02:00
rtc-au1xxx.c rtc: au1xxx: convert to SPDX identifier 2021-07-10 01:53:39 +02:00
rtc-bd70528.c rtc: bd70528: Drop BD70528 support 2021-06-20 22:24:52 +02:00
rtc-bq32k.c rtc: Drop explicit initialization of struct i2c_device_id::driver_data to 0 2024-07-07 00:40:29 +02:00
rtc-bq4802.c treewide: Add SPDX license identifier for more missed files 2019-05-21 10:50:45 +02:00
rtc-brcmstb-waketimer.c rtc: brcmstb-waketimer: support level alarm_irq 2023-10-02 00:13:57 +02:00
rtc-cadence.c rtc: cadence: Convert to platform remove callback returning void 2023-03-17 23:03:17 +01:00
rtc-cmos.c rtc: cmos: use spin_lock_irqsave in cmos_interrupt 2025-07-10 16:04:41 +02:00
rtc-core.h rtc: Remove unused rtc_dev_exit(). 2022-06-24 21:24:02 +02:00
rtc-cpcap.c rtc: rework rtc_register_device() resource management 2020-11-19 12:50:12 +01:00
rtc-cros-ec.c rtc: cros-ec: provide ID table for avoiding fallback match 2024-03-29 15:46:08 +01:00
rtc-da9052.c rtc: rework rtc_register_device() resource management 2020-11-19 12:50:12 +01:00
rtc-da9055.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
rtc-da9063.c rtc: da9063: Use dev_err_probe() 2024-01-18 01:00:21 +01:00
rtc-digicolor.c rtc: digicolor: quiet maybe-unused variable warning 2021-02-06 00:58:24 +01:00
rtc-ds1216.c rtc: use devm_platform_ioremap_resource() to simplify code 2019-10-07 01:07:35 +02:00
rtc-ds1286.c rtc: use devm_platform_ioremap_resource() to simplify code 2019-10-07 01:07:35 +02:00
rtc-ds1302.c rtc: ds1302: remove unnecessary spi_set_drvdata() 2022-11-15 21:01:51 +01:00
rtc-ds1305.c rtc: ds1305: Report maximum alarm limit to rtc core 2023-08-27 23:50:22 +02:00
rtc-ds1307.c rtc: ds1307: remove clear of oscillator stop flag (OSF) in probe 2025-08-20 18:30:50 +02:00
rtc-ds1343.c spi: make remove callback a void function 2022-02-09 13:00:45 +00:00
rtc-ds1347.c rtc: ds1347: fix value written to century register 2022-11-15 21:01:51 +01:00
rtc-ds1374.c rtc: Drop explicit initialization of struct i2c_device_id::driver_data to 0 2024-07-07 00:40:29 +02:00
rtc-ds1390.c rtc: ds1390: mark OF related data as maybe unused 2023-03-17 23:23:22 +01:00
rtc-ds1511.c rtc: ds1511: set alarm offset limit 2024-02-29 22:16:52 +01:00
rtc-ds1553.c rtc: rework rtc_register_device() resource management 2020-11-19 12:50:12 +01:00
rtc-ds1672.c rtc: Drop explicit initialization of struct i2c_device_id::driver_data to 0 2024-07-07 00:40:29 +02:00
rtc-ds1685.c rtc: ds1685: use EXPORT_SYMBOL_GPL for ds1685_rtc_poweroff 2023-08-02 11:18:22 -07:00
rtc-ds1742.c rtc: Explicitly include correct DT includes 2023-07-27 23:31:29 +02:00
rtc-ds2404.c rtc: ds2404: Convert to GPIO descriptors 2023-08-17 00:55:56 +02:00
rtc-ds3232.c rtc: Drop explicit initialization of struct i2c_device_id::driver_data to 0 2024-07-07 00:40:29 +02:00
rtc-efi.c rtc: efi: fixed typo in efi_procfs() 2023-10-15 23:01:08 +02:00
rtc-em3027.c rtc: Drop explicit initialization of struct i2c_device_id::driver_data to 0 2024-07-07 00:40:29 +02:00
rtc-ep93xx.c rtc: ep93xx: add DT support for Cirrus EP93xx 2023-10-15 23:17:05 +02:00
rtc-fm3130.c rtc: Drop explicit initialization of struct i2c_device_id::driver_data to 0 2024-07-07 00:40:29 +02:00
rtc-fsl-ftm-alarm.c rtc: Explicitly include correct DT includes 2023-07-27 23:31:29 +02:00
rtc-ftrtc010.c rtc: ftrtc010: Convert to platform remove callback returning void 2023-03-17 23:03:17 +01:00
rtc-gamecube.c rtc: gamecube: Always reset HW_SRNPROT after read 2022-08-23 22:27:58 +02:00
rtc-generic.c treewide: Add SPDX license identifier for more missed files 2019-05-21 10:50:45 +02:00
rtc-goldfish.c rtc: add missing MODULE_DESCRIPTION() macro 2024-06-28 00:24:43 +02:00
rtc-hid-sensor-time.c rtc: hid-sensor-time: Convert to platform remove callback returning void 2023-03-17 23:03:17 +01:00
rtc-hym8563.c rtc: hym8563: fix incorrect maximum clock rate handling 2025-08-15 12:13:59 +02:00
rtc-imx-sc.c rtc: imx-sc: remove .read_alarm 2021-04-29 23:03:26 +02:00
rtc-imx-sm-bbm.c rtc: support i.MX95 BBM RTC 2024-08-28 21:54:51 +01:00
rtc-imxdi.c rtc: imxdi: Convert to platform remove callback returning void 2023-10-13 12:29:08 +02:00
rtc-isl1208.c rtc: isl1208: Update correct procedure for clearing alarm 2024-06-28 00:34:21 +02:00
rtc-isl12022.c rtc: Drop explicit initialization of struct i2c_device_id::driver_data to 0 2024-07-07 00:40:29 +02:00
rtc-isl12026.c rtc: isl12026: Drop "_new" from probe callback name 2023-07-27 23:32:08 +02:00
rtc-jz4740.c rtc: jz4740: fix Wvoid-pointer-to-enum-cast warning 2023-08-16 01:32:08 +02:00
rtc-loongson.c rtc: loongson: Add missing alarm notifications for ACPI RTC events 2025-06-19 15:32:10 +02:00
rtc-lp8788.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
rtc-lpc24xx.c rtc: Explicitly include correct DT includes 2023-07-27 23:31:29 +02:00
rtc-lpc32xx.c rtc: rework rtc_register_device() resource management 2020-11-19 12:50:12 +01:00
rtc-m41t80.c [tree-wide] finally take no_llseek out 2024-09-27 08:18:43 -07:00
rtc-m41t93.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
rtc-m41t94.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
rtc-m48t35.c rtc: m48t35: remove SGI-IP27 kludge 2020-03-16 11:12:11 +01:00
rtc-m48t59.c rtc: m48t59: set range 2024-09-22 01:17:10 +02:00
rtc-m48t86.c rtc: m48t86: add DT support for m48t86 2023-08-28 00:01:51 +02:00
rtc-ma35d1.c rtc: ma35d1: remove hardcoded UIE support 2024-01-08 01:33:27 +01:00
rtc-max6900.c rtc: Drop explicit initialization of struct i2c_device_id::driver_data to 0 2024-07-07 00:40:29 +02:00
rtc-max6902.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
rtc-max6916.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
rtc-max8907.c rtc: max8907: Drop unused i2c include 2023-02-01 09:13:35 +01:00
rtc-max8925.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
rtc-max8997.c rtc: max8997: Fix the returned value in case of error in 'max8997_rtc_read_alarm()' 2018-11-22 18:11:35 +01:00
rtc-max8998.c rtc: maxim: Add SPDX license identifiers 2018-08-14 23:38:45 +02:00
rtc-max31335.c move asm/unaligned.h to linux/unaligned.h 2024-10-02 17:23:23 -04:00
rtc-max77686.c rtc: max77686: Convert to platform remove callback returning void 2023-03-17 23:03:17 +01:00
rtc-mc13xxx.c rtc: mc13xxx: Convert to platform remove callback returning void 2023-03-17 23:03:17 +01:00
rtc-mc146818-lib.c rtc: Extend timeout for waiting for UIP to clear to 1s 2023-12-17 22:33:55 +01:00
rtc-mcp795.c rtc: mcp795: drop unneeded MODULE_ALIAS 2024-04-17 01:39:35 +02:00
rtc-meson-vrtc.c rtc: meson-vrtc: Use ktime_get_real_ts64() to get the current time 2023-03-21 21:15:10 +01:00
rtc-meson.c rtc: meson: Fix email address in MODULE_AUTHOR 2022-05-18 00:20:39 +02:00
rtc-moxart.c rtc: moxart: switch to using gpiod API 2023-02-09 23:31:46 +01:00
rtc-mpc5121.c rtc: add missing MODULE_DESCRIPTION() macro 2024-06-28 00:24:43 +02:00
rtc-mpfs.c rtc: mpfs: Convert to platform remove callback returning void 2023-03-17 23:03:17 +01:00
rtc-msc313.c rtc: msc313: Fix function prototype mismatch in msc313_rtc_probe() 2022-12-11 18:14:01 +01:00
rtc-msm6242.c rtc: msm6242: Remove unneeded msm6242_set()/msm6242_clear() functions 2019-11-18 15:23:54 +01:00
rtc-mt2712.c rtc: rework rtc_register_device() resource management 2020-11-19 12:50:12 +01:00
rtc-mt6397.c rtc: Explicitly include correct DT includes 2023-07-27 23:31:29 +02:00
rtc-mt7622.c rtc: Explicitly include correct DT includes 2023-07-27 23:31:29 +02:00
rtc-mv.c rtc: mv: Convert to platform remove callback returning void 2023-10-13 12:29:08 +02:00
rtc-mxc.c rtc: Explicitly include correct DT includes 2023-07-27 23:31:29 +02:00
rtc-mxc_v2.c rtc: mxc_v2: Convert to platform remove callback returning void 2023-03-17 23:03:17 +01:00
rtc-nct3018y.c rtc: nct3018y: fix incorrect maximum clock rate handling 2025-08-15 12:14:00 +02:00
rtc-ntxec.c rtc: New driver for RTC in Netronix embedded controller 2021-03-10 11:06:33 +00:00
rtc-nxp-bbnsm.c rtc: bbnsm: Add the bbnsm rtc support 2023-02-22 12:25:32 +01:00
rtc-omap.c rtc: add missing MODULE_DESCRIPTION() macro 2024-06-28 00:24:43 +02:00
rtc-opal.c rtc: opal: switch to RTC_FEATURE_UPDATE_INTERRUPT 2022-03-23 19:58:39 +01:00
rtc-optee.c rtc: optee: fix memory leak on driver removal 2025-10-19 16:33:36 +02:00
rtc-palmas.c rtc: palmas: Convert to platform remove callback returning void 2023-03-17 23:03:17 +01:00
rtc-pcap.c rtc: pcap: Drop no-op remove function 2023-10-13 12:29:08 +02:00
rtc-pcf2123.c rtc: pcf2123: use IRQ flags obtained from fwnode 2023-02-01 09:13:35 +01:00
rtc-pcf2127.c rtc: pcf2127: fix SPI command byte for PCF2131 backport 2025-09-25 11:13:50 +02:00
rtc-pcf8523.c rtc: Drop explicit initialization of struct i2c_device_id::driver_data to 0 2024-07-07 00:40:29 +02:00
rtc-pcf8563.c rtc: pcf8563: fix incorrect maximum clock rate handling 2025-08-15 12:14:00 +02:00
rtc-pcf8583.c rtc: Drop explicit initialization of struct i2c_device_id::driver_data to 0 2024-07-07 00:40:29 +02:00
rtc-pcf50633.c rtc: pcf50633: Convert to platform remove callback returning void 2023-03-17 23:03:18 +01:00
rtc-pcf85063.c rtc: pcf85063: fix incorrect maximum clock rate handling 2025-08-15 12:14:00 +02:00
rtc-pcf85363.c rtc: pcf85363: fix wrong mask/val parameters in regmap_update_bits call 2023-10-15 22:37:57 +02:00
rtc-pic32.c rtc: pic32: Convert to platform remove callback returning void 2023-03-17 23:03:18 +01:00
rtc-pl030.c amba: Make the remove callback return void 2021-02-02 14:25:50 +01:00
rtc-pl031.c rtc: pl031: fix rtc features null pointer dereference 2022-03-23 19:58:37 +01:00
rtc-pm8xxx.c move asm/unaligned.h to linux/unaligned.h 2024-10-02 17:23:23 -04:00
rtc-ps3.c rtc: rework rtc_register_device() resource management 2020-11-19 12:50:12 +01:00
rtc-pxa.c rtc: pxa: Convert to platform remove callback returning void 2023-10-13 12:29:08 +02:00
rtc-r7301.c rtc: rtc7301: Support byte-addressed IO 2023-10-15 22:37:25 +02:00
rtc-r9701.c rtc: rework rtc_register_device() resource management 2020-11-19 12:50:12 +01:00
rtc-rc5t583.c rtc: add missing MODULE_DESCRIPTION() macro 2024-06-28 00:24:43 +02:00
rtc-rc5t619.c rtc: rc5t619: use proper module tables 2024-09-22 01:17:35 +02:00
rtc-rk808.c rtc: rk808: reduce 'struct rk808' usage 2022-12-11 20:56:33 +01:00
rtc-rp5c01.c rtc: rework rtc_register_device() resource management 2020-11-19 12:50:12 +01:00
rtc-rs5c313.c rtc: rs5c313: correct some spelling mistakes 2022-12-15 23:34:31 +01:00
rtc-rs5c348.c rtc: rework rtc_register_device() resource management 2020-11-19 12:50:12 +01:00
rtc-rs5c372.c rtc: rs5c372: fix Wvoid-pointer-to-enum-cast warning 2023-08-16 01:32:08 +02:00
rtc-rtd119x.c rtc: rtd119x: Convert to platform remove callback returning void 2023-03-17 23:03:18 +01:00
rtc-rv3028.c rtc: rv3028: fix incorrect maximum clock rate handling 2025-08-15 12:14:00 +02:00
rtc-rv3029c2.c rtc: Drop explicit initialization of struct i2c_device_id::driver_data to 0 2024-07-07 00:40:29 +02:00
rtc-rv3032.c rtc: rv3032: fix EERD location 2025-05-29 11:02:16 +02:00
rtc-rv8803.c rtc: rv8803: add wakeup-source support 2024-01-15 22:29:48 +01:00
rtc-rx4581.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
rtc-rx6110.c rtc: Drop explicit initialization of struct i2c_device_id::driver_data to 0 2024-07-07 00:40:29 +02:00
rtc-rx8010.c rtc: Drop explicit initialization of struct i2c_device_id::driver_data to 0 2024-07-07 00:40:29 +02:00
rtc-rx8025.c rtc: Switch i2c drivers back to use .probe() 2023-06-06 23:29:37 +02:00
rtc-rx8111.c rtc: rx8111: handle VLOW flag 2024-05-07 23:40:10 +02:00
rtc-rx8581.c rtc: Drop explicit initialization of struct i2c_device_id::driver_data to 0 2024-07-07 00:40:29 +02:00
rtc-rzn1.c rtc: rzn1: fix BCD to rtc_time conversion errors 2024-12-05 14:03:05 +01:00
rtc-s3c.c rtc: Explicitly include correct DT includes 2023-07-27 23:31:29 +02:00
rtc-s3c.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
rtc-s5m.c rtc: s5m: Drop S5M8763 support 2023-04-26 11:40:26 +01:00
rtc-s35390a.c rtc: s35390a: Drop vendorless compatible string from match table 2024-09-12 00:15:49 +02:00
rtc-sa1100.c rtc: sa1100: Convert to platform remove callback returning void 2023-03-17 23:03:18 +01:00
rtc-sa1100.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
rtc-sc27xx.c rtc: sc27xx: Fix format of SPDX identifier 2021-07-10 01:53:39 +02:00
rtc-sd2405al.c rtc: Add driver for SD2405AL 2024-09-12 00:33:24 +02:00
rtc-sd3078.c rtc: Drop explicit initialization of struct i2c_device_id::driver_data to 0 2024-07-07 00:40:29 +02:00
rtc-sh.c rtc: sh: assign correct interrupts with DT 2025-06-19 15:32:09 +02:00
rtc-snvs.c rtc: snvs: Allow a time difference on clock register read 2022-11-15 21:25:44 +01:00
rtc-spear.c rtc: spear: Convert to platform remove callback returning void 2023-03-17 23:03:18 +01:00
rtc-ssd202d.c rtc: Add support for the SSD202D RTC 2023-10-16 16:54:15 +02:00
rtc-st-lpc.c rtc: st-lpc: Use IRQF_NO_AUTOEN flag in request_irq() 2024-12-05 14:03:03 +01:00
rtc-starfire.c rtc: rework rtc_register_device() resource management 2020-11-19 12:50:12 +01:00
rtc-stk17ta8.c rtc: rework rtc_register_device() resource management 2020-11-19 12:50:12 +01:00
rtc-stm32.c rtc: stm32: add alarm A out feature 2024-08-14 11:37:07 +02:00
rtc-stmp3xxx.c rtc: Explicitly include correct DT includes 2023-07-27 23:31:29 +02:00
rtc-sun4v.c rtc: rework rtc_register_device() resource management 2020-11-19 12:50:12 +01:00
rtc-sun6i.c rtc: sun6i: disable automatic clock input switching 2024-09-12 00:33:33 +02:00
rtc-sunplus.c rtc: sunplus: Clean up redundant dev_err_probe() 2023-08-10 09:35:28 +02:00
rtc-sunxi.c rtc: Explicitly include correct DT includes 2023-07-27 23:31:29 +02:00
rtc-tegra.c rtc: tegra: Convert to platform remove callback returning void 2023-03-17 23:03:18 +01:00
rtc-test.c rtc: test: remove debug message 2020-12-03 23:43:23 +01:00
rtc-ti-k3.c rtc: Explicitly include correct DT includes 2023-07-27 23:31:29 +02:00
rtc-tps6586x.c rtc: tps6586x: Report maximum alarm limit to rtc core 2023-08-27 23:50:22 +02:00
rtc-tps6594.c rtc: tps6594: Fix integer overflow on 32bit systems 2025-02-08 09:58:01 +01:00
rtc-tps65910.c rtc: add missing MODULE_DESCRIPTION() macro 2024-06-28 00:24:43 +02:00
rtc-twl.c rtc: twl: convert comma to semicolon 2024-09-12 00:08:09 +02:00
rtc-vt8500.c rtc: vt8500: Convert to platform remove callback returning void 2023-03-17 23:03:18 +01:00
rtc-wilco-ec.c rtc: rework rtc_register_device() resource management 2020-11-19 12:50:12 +01:00
rtc-wm831x.c rtc: rework rtc_register_device() resource management 2020-11-19 12:50:12 +01:00
rtc-wm8350.c rtc: wm8350: remove unnecessary messages 2023-09-06 01:26:04 +02:00
rtc-x1205.c rtc: x1205: Fix Xicor X1205 vendor prefix 2025-10-19 16:33:36 +02:00
rtc-xgene.c rtc: xgene: Convert to platform remove callback returning void 2023-03-17 23:03:18 +01:00
rtc-zynqmp.c rtc: zynqmp: Fix optional clock name property 2025-02-17 10:05:44 +01:00
sysfs.c rtc: Include <linux/kstrtox.h> when appropriate 2022-11-15 21:01:51 +01:00