From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751280AbdH2RID (ORCPT ); Tue, 29 Aug 2017 13:08:03 -0400 Received: from mx1.redhat.com ([209.132.183.28]:47064 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750815AbdH2RIC (ORCPT ); Tue, 29 Aug 2017 13:08:02 -0400 DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com B944E80C0F Authentication-Results: ext-mx02.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx02.extmail.prod.ext.phx2.redhat.com; spf=fail smtp.mailfrom=oleg@redhat.com Date: Tue, 29 Aug 2017 19:07:57 +0200 From: Oleg Nesterov To: Peter Zijlstra 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: lockdep && recursive-read Message-ID: <20170829170757.GA21241@redhat.com> References: <20170822075238.uyfmhgxeal2bwcdg@hirez.programming.kicks-ass.net> <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> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20170829155205.GA17290@redhat.com> User-Agent: Mutt/1.5.24 (2015-08-30) X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.26]); Tue, 29 Aug 2017 17:08:01 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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... Oleg.