Re: [PATCH 17/21] workqueue: simple reimplementation of SINGLE_THREAD workqueue

Johannes Berg
2009-11-17T14:03:51Z

[-- Attachment #1: Type: text/plain, Size: 692 bytes --]

On Tue, 2009-11-17 at 02:15 +0900, Tejun Heo wrote:
> SINGLE_THREAD workqueues are used to reduce the number of worker
> threads and ease synchronization.

Wireless (mac80211) also requires that the order in which different work
structs are queued up is identical to the processing order. At least
some code was written with that assumption in mind, and I think it's
actually required in a few places.

Also, that unlikely() here:

> + if (unlikely(single_thread)) {
> + mutex_lock(&wq->single_thread_mutex);
> + f(work);
> + mutex_unlock(&wq->single_thread_mutex);
> + } else
> + f(work);

seems wrong, there are many single-threaded workqueues after all.

johannes

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 801 bytes --]