Messages in this thread | | | Date | Tue, 6 Sep 2016 00:26:56 +0200 | From | Alexandre Belloni <> | Subject | Re: [PATCH v2 1/2] rtc-cmos: Ensure no expired alarm is left enabled after resume |
| |
Hi
On 01/09/2016 at 00:58:59 +0200, Gabriele Mazzotta wrote : > static int cmos_resume(struct device *dev) > { > struct cmos_rtc *cmos = dev_get_drvdata(dev); > unsigned char tmp; > + bool is_wkalrm_expired; > > if (cmos->enabled_wake) { > if (cmos->wake_off) > @@ -913,6 +935,8 @@ static int cmos_resume(struct device *dev) > cmos->enabled_wake = 0; > } > > + is_wkalrm_expired = cmos_is_wkalrm_expired(dev); > + > spin_lock_irq(&rtc_lock); > tmp = cmos->suspend_ctrl; > cmos->suspend_ctrl = 0; > @@ -939,6 +963,17 @@ static int cmos_resume(struct device *dev) > tmp &= ~RTC_AIE; > hpet_mask_rtc_irq_bit(RTC_AIE); > } while (mask & RTC_AIE); > + > + /* > + * If RTC_AIE is set and we have an alarm set to go off in the > + * past, then the BIOS woke the system when the alarm went off > + * and we now have to clear it. > + */ > + if ((tmp & RTC_AIE) && is_wkalrm_expired) {
Is there any issue dropping is_wkalrm_expired and calling cmos_is_wkalrm_expired() here? That would avoid calling cmos_is_wkalrm_expired on each wakeup.
-- Alexandre Belloni, Free Electrons Embedded Linux and Kernel engineering http://free-electrons.com
| |