rtc: disallow update interrupts when time is invalid
commit 3e74ddaa7c
upstream.
Never enable update interrupts when the time set on the rtc is invalid.
In that case, also avoid enabling the emulation because it will fail for
the same reason.
Link: https://lore.kernel.org/r/20191021155631.3342-2-alexandre.belloni@bootlin.com
Link: https://lore.kernel.org/r/CA+ASDXMarBG5C1Kz42B9i_iVZ1=i6GgH9Yja2cdmSueKD_As_g@mail.gmail.com
Reported-by: Jeffy Chen <jeffy.chen@rock-chips.com>
Reported-by: Brian Norris <briannorris@chromium.org>
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
Signed-off-by: Yongliang Gao <leonylgao@tencent.com>
Signed-off-by: Jianping Liu <frankjpliu@tencent.com>
This commit is contained in:
parent
26d2f312d3
commit
33d2b1a1e6
|
@ -545,7 +545,7 @@ EXPORT_SYMBOL_GPL(rtc_alarm_irq_enable);
|
|||
|
||||
int rtc_update_irq_enable(struct rtc_device *rtc, unsigned int enabled)
|
||||
{
|
||||
int err;
|
||||
int rc = 0, err;
|
||||
|
||||
err = mutex_lock_interruptible(&rtc->ops_lock);
|
||||
if (err)
|
||||
|
@ -570,7 +570,9 @@ int rtc_update_irq_enable(struct rtc_device *rtc, unsigned int enabled)
|
|||
struct rtc_time tm;
|
||||
ktime_t now, onesec;
|
||||
|
||||
__rtc_read_time(rtc, &tm);
|
||||
rc = __rtc_read_time(rtc, &tm);
|
||||
if (rc)
|
||||
goto out;
|
||||
onesec = ktime_set(1, 0);
|
||||
now = rtc_tm_to_ktime(tm);
|
||||
rtc->uie_rtctimer.node.expires = ktime_add(now, onesec);
|
||||
|
@ -582,6 +584,16 @@ int rtc_update_irq_enable(struct rtc_device *rtc, unsigned int enabled)
|
|||
|
||||
out:
|
||||
mutex_unlock(&rtc->ops_lock);
|
||||
|
||||
/*
|
||||
* __rtc_read_time() failed, this probably means that the RTC time has
|
||||
* never been set or less probably there is a transient error on the
|
||||
* bus. In any case, avoid enabling emulation has this will fail when
|
||||
* reading the time too.
|
||||
*/
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
#ifdef CONFIG_RTC_INTF_DEV_UIE_EMUL
|
||||
/*
|
||||
* Enable emulation if the driver returned -EINVAL to signal that it has
|
||||
|
|
Loading…
Reference in New Issue