Messages in this thread | | | From | "Rafael J. Wysocki" <> | Subject | Re: [PATCH 3/3] PM / Sleep: Make __pm_stay_awake() delete wakeup source timers | Date | Fri, 17 Feb 2012 21:46:59 +0100 |
| |
On Friday, February 17, 2012, Arve Hjønnevåg wrote: > 2012/2/16 Rafael J. Wysocki <rjw@sisk.pl>: > > On Thursday, February 16, 2012, Arve Hjønnevåg wrote: > >> 2012/2/15 Rafael J. Wysocki <rjw@sisk.pl>: > >> ... > >> > --- linux.orig/drivers/base/power/wakeup.c > >> > +++ linux/drivers/base/power/wakeup.c > >> > @@ -365,9 +365,15 @@ void __pm_stay_awake(struct wakeup_sourc > >> > return; > >> > > >> > spin_lock_irqsave(&ws->lock, flags); > >> > + > >> > + del_timer(&ws->timer); > >> > + ws->timer_expires = 0; > >> > >> timer_expires gets overwritten in wakeup_source_activate, > > > > I actually don't remember why it does that and with the $subject changes > > it's just pointless. > > > >> so __pm_relax followed by __pm_stay_awake is still not safe. > > > > Yes, I overlooked that timer_expires modification. Updated patch follows. > > > >> ... > >> > @@ -529,8 +535,12 @@ void __pm_wakeup_event(struct wakeup_sou > >> > spin_lock_irqsave(&ws->lock, flags); > >> > > >> > ws->event_count++; > >> > - if (!ws->active) > >> > + if (ws->active) { > >> > + if (!ws->timer_expires) > >> > + goto unlock; > >> > + } else { > >> > wakeup_source_activate(ws); > >> > + } > >> > > >> > if (!msec) { > >> > wakeup_source_deactivate(ws); > >> > > >> > >> I suggest dropping this and adding: > > > > Well, what exactly would you like to drop? The above proposed changes I guess? > > Yes. > > > > >> - if (time_after(expires, ws->timer_expires)) { > >> + if (!ws->timer_expires || time_after(expires, ws->timer_expires)) { > > > > I've tried to follow your suggestion, so that __pm_wakeup_event() always > > sets the timer, if msec is positive, or deactivates the wakeup source, if > > msec is 0. Please let me know if that's what you wanted. :-) > > > > Yes. I should be able to replace a wake_lock with a single wakeup_source now.
Good, thanks for the confirmation!
Rafael -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |