[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <4F9101A7.5010100@codeaurora.org>
Date: Thu, 19 Apr 2012 23:26:47 -0700
From: Stephen Boyd <sboyd@...eaurora.org>
To: Yong Zhang <yong.zhang0@...il.com>
CC: linux-kernel@...r.kernel.org, Tejun Heo <tj@...nel.org>,
netdev@...r.kernel.org, Ben Dooks <ben-linux@...ff.org>
Subject: Re: [PATCH 1/2] workqueue: Catch more locking problems with flush_work()
On 4/19/2012 11:01 PM, Yong Zhang wrote:
> On Fri, Apr 20, 2012 at 01:26:33PM +0800, Yong Zhang wrote:
>> On Thu, Apr 19, 2012 at 11:36:32AM -0700, Stephen Boyd wrote:
>>> Does looking at the second patch help? Basically schedule_work() can run
>>> the callback right between the time the mutex is acquired and
>>> flush_work() is called:
>>>
>>> CPU0 CPU1
>>>
>>> <irq>
>>> schedule_work() mutex_lock(&mutex)
>>> <irq return>
>>> my_work() flush_work()
>>> mutex_lock(&mutex)
>>> <deadlock>
>> Get you point. It is a problem. But your patch could introduece false
>> positive since when flush_work() is called that very work may finish
>> running already.
>>
>> So I think we need the lock_map_acquire()/lock_map_release() only when
>> the work is under processing, no?
> But start_flush_work() has tried take care of this issue except it
> doesn't add work->lockdep_map into the chain.
>
> So does below patch help?
>
[snip]
> @@ -2461,6 +2461,8 @@ static bool start_flush_work(struct work_struct *work, struct wq_barrier *barr,
> lock_map_acquire(&cwq->wq->lockdep_map);
> else
> lock_map_acquire_read(&cwq->wq->lockdep_map);
> + lock_map_acquire(&work->lockdep_map);
> + lock_map_release(&work->lockdep_map);
> lock_map_release(&cwq->wq->lockdep_map);
>
> return true;
No this doesn't help. The whole point of the patch is to get lockdep to
complain in the case where the work is not queued. That case is not a
false positive. We will get a lockdep warning if the work is running
(when start_flush_work() returns true) solely with the
lock_map_acquire() on cwq->wq->lockdep_map.
--
Sent by an employee of the Qualcomm Innovation Center, Inc.
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists