mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-26 08:31:13 +00:00
RTC: Properly handle rtc_read_alarm error propagation and fix bug
In reviewing cases where the virtualized interfaces didn't propagate errors properly, I noticed rtc_read_alarm needed fixing. In doing so I noticed my RTC rework dropped a memset and that the behavior of rtc_read_alarm shouldn't be conditionalized on the alarm.enabled flag (as the alarm may be set, but the irqs may be disabled). So those were corrected as well. CC: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: John Stultz <john.stultz@linaro.org> LKML-Reference: <1295565973-14358-2-git-send-email-john.stultz@linaro.org> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
This commit is contained in:
parent
aa0be0f465
commit
d5553a5561
1 changed files with 9 additions and 3 deletions
|
@ -123,12 +123,18 @@ int rtc_read_alarm(struct rtc_device *rtc, struct rtc_wkalrm *alarm)
|
||||||
err = mutex_lock_interruptible(&rtc->ops_lock);
|
err = mutex_lock_interruptible(&rtc->ops_lock);
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
|
if (rtc->ops == NULL)
|
||||||
|
err = -ENODEV;
|
||||||
|
else if (!rtc->ops->read_alarm)
|
||||||
|
err = -EINVAL;
|
||||||
|
else {
|
||||||
|
memset(alarm, 0, sizeof(struct rtc_wkalrm));
|
||||||
alarm->enabled = rtc->aie_timer.enabled;
|
alarm->enabled = rtc->aie_timer.enabled;
|
||||||
if (alarm->enabled)
|
|
||||||
alarm->time = rtc_ktime_to_tm(rtc->aie_timer.node.expires);
|
alarm->time = rtc_ktime_to_tm(rtc->aie_timer.node.expires);
|
||||||
|
}
|
||||||
mutex_unlock(&rtc->ops_lock);
|
mutex_unlock(&rtc->ops_lock);
|
||||||
|
|
||||||
return 0;
|
return err;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(rtc_read_alarm);
|
EXPORT_SYMBOL_GPL(rtc_read_alarm);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue