2007-08-12 08:12:13

by Stefan Richter

[permalink] [raw]
Subject: When to use a freezeable workqueue?

In which situations is create_freezeable_workqueue() to be preferred
over create_singlethread_workqueue()?

Is a freezable worqueue preferable whenever the worker thread /can/ be
frozen, or is it only to be used if the thread /must/ be frozen during
suspend?

Thanks,
--
Stefan Richter
-=====-=-=== =--- -==--
http://arcgraph.de/sr/


2007-08-12 22:08:54

by Rafael J. Wysocki

[permalink] [raw]
Subject: Re: When to use a freezeable workqueue?

On Sunday, 12 August 2007 10:11, Stefan Richter wrote:
> In which situations is create_freezeable_workqueue() to be preferred
> over create_singlethread_workqueue()?
>
> Is a freezable worqueue preferable whenever the worker thread /can/ be
> frozen, or is it only to be used if the thread /must/ be frozen during
> suspend?

The latter, IMO.

Generally, if you want it to be frozen.

Greetings,
Rafael

2007-08-13 02:29:24

by Alan Stern

[permalink] [raw]
Subject: Re: [linux-pm] Re: When to use a freezeable workqueue?

On Mon, 13 Aug 2007, Rafael J. Wysocki wrote:

> On Sunday, 12 August 2007 10:11, Stefan Richter wrote:
> > In which situations is create_freezeable_workqueue() to be preferred
> > over create_singlethread_workqueue()?
> >
> > Is a freezable worqueue preferable whenever the worker thread /can/ be
> > frozen, or is it only to be used if the thread /must/ be frozen during
> > suspend?
>
> The latter, IMO.
>
> Generally, if you want it to be frozen.

A good example of a reason for making a workqueue freezable is that the
workqueue contains entries which would cause a suspended device to be
resumed. Obviously you don't want such things to happen while the
system is going to sleep. A little less obviously, there might also be
problems if such a routine ran while the system was waking up.

Another reason might be that the workqueue contains entries which would
try to register or unregister a device. Such actions aren't a good
idea at times when the PM core is iterating through a list of all
devices in order to suspend or resume them. And in the future such
actions may block, effectively freezing the workqueue anyway -- which
could be troublesome if you don't want the workqueue to be frozen!

Alan Stern