lkml.org 
[lkml]   [2011]   [Dec]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: workqueue_set_max_active(wq, 0)?
    Hello,

    On Thu, Dec 15, 2011 at 07:43:40PM +0100, Johannes Berg wrote:
    > Hm, good point. We can't abstract out all of it -- the freezer API
    > doesn't want to wait for it to finish -- but probably a bit of it.
    >
    > How do you iterate workqueues? We'd have to do that for the freezer
    > part, unless we want to work on CWQs again.

    By Locking workqueue_lock and walking workqueues list. Hmmm...

    > Actually I'm not really sure I understand the differences between WQ,
    > CWQ and GCWQ...

    WQ is workqueue - the part visible to users.

    CWQ is cpu workqueue. Each wq has its own set of cpu workqueues for
    all CPUs (there are exceptions but this should be a good enough
    explanation). A WQ is always a set of cwq's. WQ chooses which CWQ to
    use on queue but most of actual processing happens on CWQs.

    GCWQ stands for global cpu workqueue - there's one for each CPU. This
    is per-cpu global worker pool used by all workqueues. Every CWQ on a
    CPU shares the GCWQ on that CPU.

    The reason why FREEZING currently is on GCWQ is because freezing is a
    system wide operation. If we're gonna implement pause, I think it
    should probably be in cwq.

    > > I think it would be great if this can be abstracted out so that both
    > > the freezer and explicit pausing use the same facility. They aren't
    > > that different after all.
    >
    > I'll take a look tomorrow. If you want to beat me to it ... ;-)

    Heh heh, [un]fortunately, I'm pretty occupied at the moment. :P

    Thank you.

    --
    tejun


    \
     
     \ /
      Last update: 2011-12-15 20:15    [W:0.023 / U:31.552 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site