[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20170823104648.ltpwbiprzconz7ef@hirez.programming.kicks-ass.net>
Date: Wed, 23 Aug 2017 12:46:48 +0200
From: Peter Zijlstra <peterz@...radead.org>
To: Byungchul Park <byungchul.park@....com>
Cc: Dave Chinner <david@...morbit.com>, mingo@...nel.org,
linux-kernel@...r.kernel.org, kernel-team@....com,
Arnaldo Carvalho de Melo <acme@...nel.org>,
Tejun Heo <tj@...nel.org>, Boqun Feng <boqun.feng@...il.com>
Subject: Re: [PATCH v3 1/3] lockdep: Make LOCKDEP_CROSSRELEASE configs all
part of PROVE_LOCKING
On Wed, Aug 23, 2017 at 11:31:18AM +0900, Byungchul Park wrote:
> On Tue, Aug 22, 2017 at 11:06:03AM +0200, Peter Zijlstra wrote:
> Currently, we do the following in process_one_work(),
>
> lockdep_map_acquire for a workqueue
> lockdep_map_acquire for a work
>
> But IMHO it should be,
>
> lockdep_map_acquire for a pair of workqueue and work.
>
> Right?
No, it is right. We need the two 'locks'.
The work one is for flush_work(), the workqueue one is for
flush_workqueue().
Just like how flush_work() must not depend on any lock taken inside the
work, flush_workqueue() callers must not hold any lock acquired inside
any work ran inside the workqueue. This cannot be done with a single
'lock'.
The reason flush_work() also depends on the wq 'lock' is because doing
flush_work() from inside work is a possible problem for single threaded
workqueues and workqueues with a rescuer.
> > Agreed. The interaction with workqueues is buggered.
>
> I think original uses of lockdep_map were already wrong. I mean it's
> not a problem of newly introduced code.
Not wrong per-se, the new code certainly places more constraints on it.
Powered by blists - more mailing lists