Received: by 10.223.185.116 with SMTP id b49csp1595967wrg; Wed, 21 Feb 2018 23:10:45 -0800 (PST) X-Google-Smtp-Source: AH8x227VSWnnWR9dPuWuu0rZf9AtDqkK9GaY7qjwwAL/VDC/pkvX1UAaR9hgzcjmVPOOeZ1V+upd X-Received: by 10.98.185.24 with SMTP id z24mr5923855pfe.185.1519283445257; Wed, 21 Feb 2018 23:10:45 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1519283445; cv=none; d=google.com; s=arc-20160816; b=y3+z0EhlQUKN2WNSsWYnxFbE3DrWjEkOFMXRKcCAigLZyyYY/4Hm2mCuFag/f7Enlt nCqSe7xkyWP4poZJ+EE+pdiclLlXX+EMI7HajYbM4sfSqy9yY5khL/5YSaxVqq3p2m/7 kfXS1SUy4gPgn8hGaBG6bxCDU7TW+FT38JY0GWIZksuMungDUrUQhWKWV+yJ/rOM2P9X dEmeiURGRLhafCp2kr+F0sQbQFvJzXEA2X9twGMltEEa3Ftyhq5sfhjlZxyBBnXSWIdW 8Bx7iC0C4q+aNKp5XcUAsYyxXE/zhmpqcTLQEJ8WjiCSCoxDuU6YcJG2vUkxVYJ4MkkZ iL8g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature:arc-authentication-results; bh=vz/XWdGqqnNS7g6o056ZIJsuP6pppPuiiMh3fJxFG/I=; b=crclU1vyNE2BiJ0k8znB75ptnQchcGD+fukraEjG6y8r9BPtqA0YV6L4PEEYj+pVde wuUQxkOFOxtnFPY7WzEdLs4UafBey8SoaLnyrC7sEnsOGkVgy3yaZ4c7aelmEEv20QiO 7anwxa6O1OWC3UmjYkLYVwx0LTyk8jMtjBF+F1w/DyVWAy8R6WLRmKGLw5vbVnnXQtf0 UecCF/xuGaHKukgCgEIwd4MUSV71aUzCJ0xebLI72u+1QtHhv5kMGQCdJ2HYgeuqBhSA TpdHgOx2KRuBnWhvqRwe7FQseO7j0Gb4XCH7R0hwmZZWtQ2UfSgaepxkMhokAnsjYOmf Uo2g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=dWncA+dF; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id a9-v6si604321plt.242.2018.02.21.23.10.31; Wed, 21 Feb 2018 23:10:45 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=dWncA+dF; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752674AbeBVHGX (ORCPT + 99 others); Thu, 22 Feb 2018 02:06:23 -0500 Received: from mail-wm0-f66.google.com ([74.125.82.66]:52645 "EHLO mail-wm0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752656AbeBVHGS (ORCPT ); Thu, 22 Feb 2018 02:06:18 -0500 Received: by mail-wm0-f66.google.com with SMTP id t3so1826088wmc.2 for ; Wed, 21 Feb 2018 23:06:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=vz/XWdGqqnNS7g6o056ZIJsuP6pppPuiiMh3fJxFG/I=; b=dWncA+dFMXlawnWX1qbrLZ3VVdrGbnNiDKJG+PXvJkv9beSxVlKmQIGoH/CvTdTcz1 t3kfk+eaWkzdYG16OlFDkMj/YVC7u2ZWjzm+Ya97rWEWlDZ8IL8doE0zLP8oG4OwxdDN DXO6MQNxukmhbAhmK2idRXsBha0ZYFLhLS3PzkfPrvUUjfgfqBMgeqH1BPTWwjIh4bdP SrdGSKfB+1k1+WcL7NKBDMogPrZewBcg3Ye8tiZZS5YH6j2zbpmeeIVFL5GqxVOwv2HM f47eCPbTHrHK34SYm8PrhMNq7jX22H9dNSnmTagOudnF9AYb5f142BdcWGr00UbGuQYQ FK9w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=vz/XWdGqqnNS7g6o056ZIJsuP6pppPuiiMh3fJxFG/I=; b=JzbIVk3Ck1iXEPfF5v0fwwirERfueBf8tpH1WJkpdNDP4T9XvUuhcDpNYVwBtmypau uMF7hhRKKXTlraURjdpfI2evVS6CzCCXzH7S33LSNrbdJzuz3NDEcVqPRwH8xqWSZKRV I9I4LdiGVgMAiLCpw1Tdl/GTvhd/NzpbOXIRfVrGjrR4sUpki4lo/OhqYOU9rhTGleDm mpv97qtJtXJNwETnOZmihTUSrbsu5ChIniCssjJ5WjFkh4CtmEacXP1MQErgGpyhrMAN tKahK43yCHSuEt9t6RX5wWvT8jPyzeQtqeRXB5Cr5lu2RSbuJnFqikp3xzTsH1ngPiSQ /KkA== X-Gm-Message-State: APf1xPBDH9yy/ATz3HpdR4DW1uCWsGK+zMs4nfVcJrr2GKJXqs6KoQow TWaWx3PoAXOjbTEsnwbfYBc= X-Received: by 10.80.213.207 with SMTP id g15mr8135242edj.101.1519283177343; Wed, 21 Feb 2018 23:06:17 -0800 (PST) Received: from auth1-smtp.messagingengine.com (auth1-smtp.messagingengine.com. [66.111.4.227]) by smtp.gmail.com with ESMTPSA id y58sm9445862edd.81.2018.02.21.23.06.15 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 21 Feb 2018 23:06:16 -0800 (PST) Received: from compute7.internal (compute7.nyi.internal [10.202.2.47]) by mailauth.nyi.internal (Postfix) with ESMTP id 17B3620784; Thu, 22 Feb 2018 02:06:15 -0500 (EST) Received: from frontend2 ([10.202.2.161]) by compute7.internal (MEProxy); Thu, 22 Feb 2018 02:06:15 -0500 X-ME-Sender: Received: from localhost (unknown [45.32.128.109]) by mail.messagingengine.com (Postfix) with ESMTPA id 02E422460B; Thu, 22 Feb 2018 02:06:14 -0500 (EST) From: Boqun Feng To: linux-kernel@vger.kernel.org Cc: Peter Zijlstra , Ingo Molnar , Andrea Parri , Boqun Feng Subject: [RFC tip/locking/lockdep v5 07/17] lockdep: Adjust check_redundant() for recursive read change Date: Thu, 22 Feb 2018 15:08:54 +0800 Message-Id: <20180222070904.548-8-boqun.feng@gmail.com> X-Mailer: git-send-email 2.16.1 In-Reply-To: <20180222070904.548-1-boqun.feng@gmail.com> References: <20180222070904.548-1-boqun.feng@gmail.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org As we have four kinds of dependencies now, check_redundant() should only report redundant if we have a dependency path which is equal or _stronger_ than the current dependency. For example if in check_prev_add() we have: prev->read == 2 && next->read != 2 , we should only report redundant if we find a path like: prev--(RN)-->....--(*N)-->next and if we have: prev->read == 2 && next->read == 2 , we could report redundant if we find a path like: prev--(RN)-->....--(*N)-->next or prev--(RN)-->....--(*R)-->next To do so, we need to pass the recursive-read status of @next into check_redundant(). This patch changes the parameter of check_redundant() and the match function to achieve this. Signed-off-by: Boqun Feng --- kernel/locking/lockdep.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/kernel/locking/lockdep.c b/kernel/locking/lockdep.c index e1be088a34c4..0b0ad3db78b4 100644 --- a/kernel/locking/lockdep.c +++ b/kernel/locking/lockdep.c @@ -1338,9 +1338,12 @@ print_circular_bug_header(struct lock_list *entry, unsigned int depth, return 0; } -static inline int class_equal(struct lock_list *entry, void *data) +static inline int hlock_equal(struct lock_list *entry, void *data) { - return entry->class == data; + struct held_lock *hlock = (struct held_lock *)data; + + return hlock_class(hlock) == entry->class && + (hlock->read == 2 || !entry->is_rr); } static inline int hlock_conflict(struct lock_list *entry, void *data) @@ -1480,14 +1483,14 @@ check_noncircular(struct lock_list *root, struct held_lock *target, } static noinline enum bfs_result -check_redundant(struct lock_list *root, struct lock_class *target, +check_redundant(struct lock_list *root, struct held_lock *target, struct lock_list **target_entry) { enum bfs_result result; debug_atomic_inc(nr_redundant_checks); - result = __bfs_forwards(root, target, class_equal, target_entry); + result = __bfs_forwards(root, target, hlock_equal, target_entry); return result; } @@ -2060,7 +2063,7 @@ check_prev_add(struct task_struct *curr, struct held_lock *prev, * Is the -> link redundant? */ bfs_init_root(&this, prev); - ret = check_redundant(&this, hlock_class(next), &target_entry); + ret = check_redundant(&this, next, &target_entry); if (ret == BFS_RMATCH) { debug_atomic_inc(nr_redundant); return 2; -- 2.16.1