lkml.org 
[lkml]   [2013]   [Oct]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 02/11] smp: don't warn about csd->flags having CSD_FLAG_LOCK cleared for !wait
    Date
    blk-mq reuses the request potentially immediately, since the most
    cache hot is always given out first. This means that rq->csd could
    be reused between csd->func() being called and csd_unlock() being
    called. This isn't a problem, since we never use wait == 1 for
    the smp call function. Add CSD_FLAG_WAIT to be able to tell the
    difference, retaining the warning for other cases.

    Cc: Ingo Molnar <mingo@kernel.org>
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    ---
    kernel/smp.c | 6 +++++-
    1 file changed, 5 insertions(+), 1 deletion(-)

    diff --git a/kernel/smp.c b/kernel/smp.c
    index 9de461e..069d20b 100644
    --- a/kernel/smp.c
    +++ b/kernel/smp.c
    @@ -18,6 +18,7 @@
    #ifdef CONFIG_USE_GENERIC_SMP_HELPERS
    enum {
    CSD_FLAG_LOCK = 0x01,
    + CSD_FLAG_WAIT = 0x02,
    };

    struct call_function_data {
    @@ -124,7 +125,7 @@ static void csd_lock(struct call_single_data *csd)

    static void csd_unlock(struct call_single_data *csd)
    {
    - WARN_ON(!(csd->flags & CSD_FLAG_LOCK));
    + WARN_ON((csd->flags & CSD_FLAG_WAIT) && !(csd->flags & CSD_FLAG_LOCK));

    /*
    * ensure we're all done before releasing data:
    @@ -146,6 +147,9 @@ void generic_exec_single(int cpu, struct call_single_data *csd, int wait)
    unsigned long flags;
    int ipi;

    + if (wait)
    + csd->flags |= CSD_FLAG_WAIT;
    +
    raw_spin_lock_irqsave(&dst->lock, flags);
    ipi = list_empty(&dst->list);
    list_add_tail(&csd->list, &dst->list);
    --
    1.8.1.2


    \
     
     \ /
      Last update: 2013-10-24 12:41    [W:4.230 / U:0.104 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site