lkml.org 
[lkml]   [2012]   [Sep]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 08/11 V5] workqueue: unbind newly created worker
    Date
    unbind newly created worker when manager is unbound.

    It just prepares, this code is useless until
    "we unbind/rebind without manager_mutex"

    Signed-off-by: Lai Jiangshan <laijs@cn.fujitsu.com>
    ---
    kernel/workqueue.c | 23 ++++++++++++++++++++++-
    1 files changed, 22 insertions(+), 1 deletions(-)

    diff --git a/kernel/workqueue.c b/kernel/workqueue.c
    index e9fc065..223d128 100644
    --- a/kernel/workqueue.c
    +++ b/kernel/workqueue.c
    @@ -74,6 +74,8 @@ enum {
    WORKER_NOT_RUNNING = WORKER_PREP | WORKER_UNBOUND |
    WORKER_CPU_INTENSIVE,

    + WORKER_COPY_FLAGS = WORKER_UNBOUND,
    +
    NR_WORKER_POOLS = 2, /* # worker pools per gcwq */

    BUSY_WORKER_HASH_ORDER = 6, /* 64 pointers */
    @@ -1820,6 +1822,25 @@ static void start_worker(struct worker *worker)
    }

    /**
    + * manager_start_worker - start a newly created worker by manager
    + * @worker: worker to start
    + * @manager: the manager
    + *
    + * Make the gcwq aware of @worker and start it.
    + * Fix the newly created worker's binding.
    + *
    + * CONTEXT:
    + * spin_lock_irq(gcwq->lock).
    + */
    +static void manager_start_worker(struct worker *worker, struct worker *manager)
    +{
    + start_worker(worker);
    +
    + /* copy the flags. also unbind the worker if the manager is unbound */
    + worker->flags |= manager->flags & WORKER_COPY_FLAGS;
    +}
    +
    +/**
    * destroy_worker - destroy a workqueue worker
    * @worker: worker to be destroyed
    *
    @@ -1976,7 +1997,7 @@ restart:
    if (worker) {
    del_timer_sync(&pool->mayday_timer);
    spin_lock_irq(&gcwq->lock);
    - start_worker(worker);
    + manager_start_worker(worker, pool->manager);
    BUG_ON(need_to_create_worker(pool));
    return true;
    }
    --
    1.7.4.4


    \
     
     \ /
      Last update: 2012-09-05 13:23    [W:0.026 / U:1.368 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site