Re: [PATCH 1/2] workqueue: Catch more locking problems withflush_work()

From: Yong Zhang
Date: Fri Apr 20 2012 - 01:33:17 EST


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?

Thanks,
Yong
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/