2010/4/23 Arve Hjønnevåg <arve@xxxxxxxxxxx>: > On Fri, Apr 23, 2010 at 5:20 AM, Oleg Nesterov <oleg@xxxxxxxxxx> wrote: >> On 04/23, Tejun Heo wrote: >>> >>> On 04/23/2010 03:08 AM, Arve Hjønnevåg wrote: >>> > Allow work to be queued that will block suspend while it is pending >>> > or executing. To get the same functionality in the calling code often >>> > requires a separate suspend_blocker for pending and executing work, or >>> > additional state and locking. >>> >>> Hmm... I think this can be implemented as pure wrapper around >>> workqueue instead of injecting a flag and code into workqueue core. >>> Adding @fn field to suspend_blocking_work struct and using a custom >>> work function to call it and then invoke suspend_unblock() should be >>> enough, right? Oh, dedicated queue functions will be needed too. I >>> don't think it's wise to meddle with workqueue core code for this. >> >> Completely agreed. The patch adds very "strange" hacks into workqueue >> code to solve the very specific problems. >> > > I want the suspend blocker active when the work is pending or running. > I did not see a way to do this on top of the workqueue api without > adding additional locking. > I can remove the WORK_STRUCT_SUSPEND_BLOCKING flag and instead add an argument to __queue_work and __cancel_work_timer (or use separate copies) if you think that would be better. It would avoid increasing the alignment requirement of cpu_workqueue_struct, but it will probably add more code than the current patch. -- Arve Hjønnevåg _______________________________________________ linux-pm mailing list linux-pm@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linux-foundation.org/mailman/listinfo/linux-pm