Re: [PATCH 2/3] work_on_cpu: Use our own workqueue.

From: Ingo Molnar
Date: Mon Jan 26 2009 - 16:28:27 EST



* Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> wrote:

> > So if it's generic it ought to be implemented in a generic way - not a
> > "dont use from any codepath that has a lock held that might
> > occasionally also be held in a keventd worklet". (which is a totally
> > unmaintainable proposition and which would just cause repeat bugs
> > again and again.)
>
> That's different. The core fault here lies in the keventd workqueue
> handling code. If we're flushing work A then we shouldn't go and block
> behind unrelated work B.

the blocking is inherent in the concept of "a queue of worklets handled by
a single thread".

If a worklet is blocked then all other work performed by that thread is
blocked as well. So by waiting on a piece of work in the queue, we wait
for all prior work queued up there as well.

The only way to decouple that and to make them independent (and hence
independently flushable) is to create more parallel flows of execution:
i.e. by creating another thread (another workqueue).

Ingo
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/