]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
rtc: interface: Ensure alarm irq is enabled when UIE is enabled
authorEsben Haabendal <esben@geanix.com>
Fri, 16 May 2025 07:23:39 +0000 (09:23 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 19 Oct 2025 14:33:54 +0000 (16:33 +0200)
commit 9db26d5855d0374d4652487bfb5aacf40821c469 upstream.

When setting a normal alarm, user-space is responsible for using
RTC_AIE_ON/RTC_AIE_OFF to control if alarm irq should be enabled.

But when RTC_UIE_ON is used, interrupts must be enabled so that the
requested irq events are generated.
When RTC_UIE_OFF is used, alarm irq is disabled if there are no other
alarms queued, so this commit brings symmetry to that.

Signed-off-by: Esben Haabendal <esben@geanix.com>
Cc: stable@vger.kernel.org
Link: https://lore.kernel.org/r/20250516-rtc-uie-irq-fixes-v2-5-3de8e530a39e@geanix.com
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/rtc/interface.c

index aaf76406cd7d7d2cfd5479fc1fc892fcb5efbb6b..973e7b9bb1489d802aa0ebf417f8e6ecb3386b1f 100644 (file)
@@ -594,6 +594,10 @@ int rtc_update_irq_enable(struct rtc_device *rtc, unsigned int enabled)
                rtc->uie_rtctimer.node.expires = ktime_add(now, onesec);
                rtc->uie_rtctimer.period = ktime_set(1, 0);
                err = rtc_timer_enqueue(rtc, &rtc->uie_rtctimer);
+               if (!err && rtc->ops && rtc->ops->alarm_irq_enable)
+                       err = rtc->ops->alarm_irq_enable(rtc->dev.parent, 1);
+               if (err)
+                       goto out;
        } else {
                rtc_timer_remove(rtc, &rtc->uie_rtctimer);
        }