On Thursday 06 May 2010, Alan Stern wrote: > On Tue, 27 Apr 2010, [UTF-8] Arve Hjønnevåg wrote: > > > +static void suspend_worker(struct work_struct *work) > > +{ > > + int ret; > > + int entry_event_num; > > + > > + enable_suspend_blockers = true; > > + while (!suspend_is_blocked()) { > > + entry_event_num = current_event_num; > > + > > + if (debug_mask & DEBUG_SUSPEND) > > + pr_info("suspend: enter suspend\n"); > > + > > + ret = pm_suspend(requested_suspend_state); > > + > > + if (debug_mask & DEBUG_EXIT_SUSPEND) > > + pr_info_time("suspend: exit suspend, ret = %d ", ret); > > + > > + if (current_event_num == entry_event_num) > > + pr_info("suspend: pm_suspend returned with no event\n"); > > + } > > + enable_suspend_blockers = false; > > +} > > Here's a completely new issue. When using opportunistic suspends on an > SMP system, it could happen that the system gets a wakeup event and > this routine starts running again before the event's IRQ handler has > finished (or has enabled a suspend blocker). The system would > re-suspend too soon. This routine will be run from a freezable workqueue. Rafael -- To unsubscribe from this list: send the line "unsubscribe linux-doc" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html