From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751283AbdH2RbD (ORCPT ); Tue, 29 Aug 2017 13:31:03 -0400 Received: from merlin.infradead.org ([205.233.59.134]:43670 "EHLO merlin.infradead.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750815AbdH2RbC (ORCPT ); Tue, 29 Aug 2017 13:31:02 -0400 Date: Tue, 29 Aug 2017 19:30:56 +0200 From: Peter Zijlstra To: Oleg Nesterov Cc: Byungchul Park , mingo@kernel.org, linux-kernel@vger.kernel.org, kernel-team@lge.com, Arnaldo Carvalho de Melo , Dave Chinner , Tejun Heo , johannes@sipsolutions.net Subject: Re: lockdep && recursive-read Message-ID: <20170829173056.GT32112@worktop.programming.kicks-ass.net> References: <20170822085100.GH20323@X58A-UD3R> <20170822092141.fjmr74xhfid7vu7h@hirez.programming.kicks-ass.net> <20170822093337.GJ20323@X58A-UD3R> <20170822100840.eababgjcu76iois5@hirez.programming.kicks-ass.net> <20170822134922.m2g6kqsqo2eojrg7@hirez.programming.kicks-ass.net> <20170822144602.uh5jzkkchvdgzs3s@hirez.programming.kicks-ass.net> <20170823163903.GA12973@redhat.com> <20170823174714.in4mv7uc3rdheygg@hirez.programming.kicks-ass.net> <20170829155205.GA17290@redhat.com> <20170829170757.GA21241@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20170829170757.GA21241@redhat.com> User-Agent: Mutt/1.5.22.1 (2013-10-16) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Aug 29, 2017 at 07:07:57PM +0200, Oleg Nesterov wrote: > On 08/29, Oleg Nesterov wrote: > > > > Plus process_one_work() does lock_map_acquire_read(), I don't really > > understand this too. > > and in fact I don't understand lock_map_acquire_read() itself. I mean, read == 2 > and this code in check_prevs_add() > > /* > * Only non-recursive-read entries get new dependencies > * added: > */ > if (hlock->read != 2 && hlock->check) { > if (!check_prev_add(curr, hlock, next, > distance, &stack_saved)) > > > Well, I forgot everything I ever knew about lockdep, unlikely I understand what > the code above actually does. But I verified that this code > > static DEFINE_SPINLOCK(exlk); > static DEFINE_RWLOCK(rwlk); > > spin_lock(&exlk); > write_lock(&rwlk); > write_unlock(&rwlk); > spin_unlock(&exlk); > > read_lock(&rwlk); > spin_lock(&exlk); > spin_unlock(&exlk); > read_unlock(&rwlk); > > runs without any warning from lockdep. Doesn't look right or I am totally > confused... Long standing lockdep issue that you used to know about ;-) Boqun recently started working on it: https://lkml.kernel.org/r/20170828151608.19636-1-boqun.feng@gmail.com