lkml.org 
[lkml]   [2021]   [Aug]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 2/6] workqueue: Change arguement of pwq_dec_nr_in_flight()
    Date
    From: Lai Jiangshan <laijs@linux.alibaba.com>

    Make pwq_dec_nr_in_flight() use work_data rather just work_color.

    Prepare for later patch to get WORK_STRUCT_INACTIVE bit from work_data
    in pwq_dec_nr_in_flight().

    No functional change intended.

    Signed-off-by: Lai Jiangshan <laijs@linux.alibaba.com>
    ---
    kernel/workqueue.c | 18 ++++++++++--------
    1 file changed, 10 insertions(+), 8 deletions(-)

    diff --git a/kernel/workqueue.c b/kernel/workqueue.c
    index b2712807c403..0a4fae7cb918 100644
    --- a/kernel/workqueue.c
    +++ b/kernel/workqueue.c
    @@ -579,9 +579,9 @@ static unsigned int work_color_to_flags(int color)
    return color << WORK_STRUCT_COLOR_SHIFT;
    }

    -static int get_work_color(struct work_struct *work)
    +static int get_work_color(unsigned long work_data)
    {
    - return (*work_data_bits(work) >> WORK_STRUCT_COLOR_SHIFT) &
    + return (work_data >> WORK_STRUCT_COLOR_SHIFT) &
    ((1 << WORK_STRUCT_COLOR_BITS) - 1);
    }

    @@ -1159,7 +1159,7 @@ static void pwq_activate_first_inactive(struct pool_workqueue *pwq)
    /**
    * pwq_dec_nr_in_flight - decrement pwq's nr_in_flight
    * @pwq: pwq of interest
    - * @color: color of work which left the queue
    + * @work_data: work_data of work which left the queue
    *
    * A work either has completed or is removed from pending queue,
    * decrement nr_in_flight of its pwq and handle workqueue flushing.
    @@ -1167,8 +1167,10 @@ static void pwq_activate_first_inactive(struct pool_workqueue *pwq)
    * CONTEXT:
    * raw_spin_lock_irq(pool->lock).
    */
    -static void pwq_dec_nr_in_flight(struct pool_workqueue *pwq, int color)
    +static void pwq_dec_nr_in_flight(struct pool_workqueue *pwq, unsigned long work_data)
    {
    + int color = get_work_color(work_data);
    +
    /* uncolored work items don't participate in flushing or nr_active */
    if (color == WORK_NO_COLOR)
    goto out_put;
    @@ -1291,7 +1293,7 @@ static int try_to_grab_pending(struct work_struct *work, bool is_dwork,
    pwq_activate_inactive_work(work);

    list_del_init(&work->entry);
    - pwq_dec_nr_in_flight(pwq, get_work_color(work));
    + pwq_dec_nr_in_flight(pwq, *work_data_bits(work));

    /* work->data points to pwq iff queued, point to pool */
    set_work_pool_and_keep_pending(work, pool->id);
    @@ -2173,7 +2175,7 @@ __acquires(&pool->lock)
    struct pool_workqueue *pwq = get_work_pwq(work);
    struct worker_pool *pool = worker->pool;
    bool cpu_intensive = pwq->wq->flags & WQ_CPU_INTENSIVE;
    - int work_color;
    + unsigned long work_data;
    struct worker *collision;
    #ifdef CONFIG_LOCKDEP
    /*
    @@ -2209,7 +2211,7 @@ __acquires(&pool->lock)
    worker->current_work = work;
    worker->current_func = work->func;
    worker->current_pwq = pwq;
    - work_color = get_work_color(work);
    + work_data = *work_data_bits(work);

    /*
    * Record wq name for cmdline and debug reporting, may get
    @@ -2315,7 +2317,7 @@ __acquires(&pool->lock)
    worker->current_work = NULL;
    worker->current_func = NULL;
    worker->current_pwq = NULL;
    - pwq_dec_nr_in_flight(pwq, work_color);
    + pwq_dec_nr_in_flight(pwq, work_data);
    }

    /**
    --
    2.19.1.6.gb485710b
    \
     
     \ /
      Last update: 2021-08-17 13:18    [W:2.479 / U:0.368 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site