Received: by 10.223.185.116 with SMTP id b49csp1595619wrg; Wed, 21 Feb 2018 23:10:19 -0800 (PST) X-Google-Smtp-Source: AH8x224c6KuT+JYF5sZDgJadxPgVnV2MZ6RT04fOhhffxr9oGljVOSaLgxMgxpVcPXE8zwaHqpua X-Received: by 2002:a17:902:6884:: with SMTP id i4-v6mr5628384plk.259.1519283419435; Wed, 21 Feb 2018 23:10:19 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1519283419; cv=none; d=google.com; s=arc-20160816; b=0ihnwwuz8sWoC0zk3rs3hglz5LmiRvsYS5lLz748V9L3Jytk+jf4SddCHNrp4C7rMA qjRt1pcx1kElzslaPw6Qxfu5OP2mZG8g06JJBW/s9H5IK+8MCLbCB/f3QUtut3AQVCf3 cPFBt0chB0MIUIgskYqb1jjspqUSNEVRYtaduMFnZW3g2iAhPgA4fRWb2Zhi5T3WeGZr QnWKL4dC0SXjhyE2b8JHgmYdyEARZbDh8cUT/yqlUUAmUhX9yql/T14bSSkebOnYqSWj GvtIBm7KyM1fu5lsixjxk00+SPVBuKyI29EwKGi4ImNiFYoKeT9+bkE+ECXX48ao2pyt JiAg== 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=524l9u54ieMnd8I7TyNy8oGBpkOGDgOYO7RwoGTFfRM=; b=m2ocL/87yWxJMBshItrTTyAU1qjG3d7nckjF2ynKQFxIk9QWUnphTK4b8CvccWgXDp n86zOW5bc+nAKyAkpnX7WzAJeMOtak4qkF0rOsoIvm32FsltottiktQCvSTM75VGNRCj a7Nyb2YPTKdgTOUqfm5zuwN4ZJd3I3rqZzPqN8IcryCEaJlZIpql0QqQ1/evCKnbHsgF 96v0/daoacxmzJRXKBZqrnSwbQGRXrNRxaOTjXzNZECDTrqvqJrk0xWCfQY90lvo/rN0 dE6Uo6VF3uLWYndHrZmJnkT1rvN9p7v8rZChOkwYFttJertdqrjXkbdtb8ywHg82cMnD gn5A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=XXOs7cNX; 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 j8-v6si1237303plk.464.2018.02.21.23.10.05; Wed, 21 Feb 2018 23:10:19 -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=XXOs7cNX; 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 S1752650AbeBVHGQ (ORCPT + 99 others); Thu, 22 Feb 2018 02:06:16 -0500 Received: from mail-wm0-f68.google.com ([74.125.82.68]:33318 "EHLO mail-wm0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752629AbeBVHGO (ORCPT ); Thu, 22 Feb 2018 02:06:14 -0500 Received: by mail-wm0-f68.google.com with SMTP id s206so1050573wme.0 for ; Wed, 21 Feb 2018 23:06:13 -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=524l9u54ieMnd8I7TyNy8oGBpkOGDgOYO7RwoGTFfRM=; b=XXOs7cNXNujkKmXCofdLC2k1PAiOF5tz3sNbQJ6VIELgAtv2vJ0b0jyygvb3aK3NhA jhaq7PaAtvLQaJr4cWfkulv8l7Er+EEHaomrvc+B806Qs5E0RXhpWsVfwNSprP7p1L1I ePVSfDAzxIPUvVnC/eSnP4srMvUHr3x6vQFx6q+UZj6UVFzcGoWDjHNM5Rm+XFyfE4Wi zhtvrzwLthswj8QU3EqEDK0iiSCiLbeny8qyXTtXiR3MSOdWgCUjE7ZhofhSISdFjRWe BZkOxzysgbT6J+4lAFCE/mfD/v0COA4DEzxPGCtIEMMk71oGYzoKGIuBHKDD8iwpTv/m Hx9A== 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=524l9u54ieMnd8I7TyNy8oGBpkOGDgOYO7RwoGTFfRM=; b=HAi8Q6kkRvijo3Xezkkp6tv0oYKYJqqgyG//MXoRdpkh0hisHKHidGb6f0mBOnchbJ rcI3EdvWtyWUdevPSOkWp8OsIObK/wYEdQCdH7qcRLoatyRkGVarkUE4cb7nA8Ai3ceS 4WFvW//TcUgEsNJ7QK0A+lnuSZ0k+tAlaAInJ/mGelw4qwI82I7KZ6xGZ9lsaw4sLfSV pBI/1mnOV+G8RAF3s6DRJ4uogi8c3BvG9P3tsMTEo6dzHqcuydcuu6z3m3kIi2vHgCI+ b9Soe8Z91d1eyJECuCbQMSHW1ueSA3ZVXXkGVUr9Su2zcDceCdrowkjDpJTRt1q49/9L dibA== X-Gm-Message-State: APf1xPAvUyar5/Q3xkNAiBpZWsVymjoffMA4qobMgWGQiWeNhDZLnmzF yrVLSxAXh1NXZLU2QueJNKE= X-Received: by 10.80.135.16 with SMTP id i16mr8143122edb.233.1519283173050; Wed, 21 Feb 2018 23:06:13 -0800 (PST) Received: from auth1-smtp.messagingengine.com (auth1-smtp.messagingengine.com. [66.111.4.227]) by smtp.gmail.com with ESMTPSA id j59sm24177918edd.31.2018.02.21.23.06.11 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 21 Feb 2018 23:06:12 -0800 (PST) Received: from compute7.internal (compute7.nyi.internal [10.202.2.47]) by mailauth.nyi.internal (Postfix) with ESMTP id EB14420505; Thu, 22 Feb 2018 02:06:10 -0500 (EST) Received: from frontend2 ([10.202.2.161]) by compute7.internal (MEProxy); Thu, 22 Feb 2018 02:06:10 -0500 X-ME-Sender: Received: from localhost (unknown [45.32.128.109]) by mail.messagingengine.com (Postfix) with ESMTPA id 704A52460B; Thu, 22 Feb 2018 02:06:10 -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 06/17] lockdep: Support deadlock detection for recursive read in check_noncircular() Date: Thu, 22 Feb 2018 15:08:53 +0800 Message-Id: <20180222070904.548-7-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 Currently, lockdep only has limit support for deadlock detection for recursive read locks. The basic idea of the detection is: Since we make __bfs() able to traverse only the strong dependency paths, so we report a circular deadlock if we could find a circle of a strong dependency path. Signed-off-by: Boqun Feng --- kernel/locking/lockdep.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/kernel/locking/lockdep.c b/kernel/locking/lockdep.c index 07bcfaac6fe2..e1be088a34c4 100644 --- a/kernel/locking/lockdep.c +++ b/kernel/locking/lockdep.c @@ -1343,6 +1343,14 @@ static inline int class_equal(struct lock_list *entry, void *data) return entry->class == data; } +static inline int hlock_conflict(struct lock_list *entry, void *data) +{ + struct held_lock *hlock = (struct held_lock *)data; + + return hlock_class(hlock) == entry->class && + (hlock->read != 2 || !entry->is_rr); +} + static noinline int print_circular_bug(struct lock_list *this, struct lock_list *target, struct held_lock *check_src, @@ -1455,18 +1463,18 @@ unsigned long lockdep_count_backward_deps(struct lock_class *class) } /* - * Prove that the dependency graph starting at can not + * Prove that the dependency graph starting at can not * lead to . Print an error and return BFS_RMATCH if it does. */ static noinline enum bfs_result -check_noncircular(struct lock_list *root, struct lock_class *target, +check_noncircular(struct lock_list *root, struct held_lock *target, struct lock_list **target_entry) { enum bfs_result result; debug_atomic_inc(nr_cyclic_checks); - result = __bfs_forwards(root, target, class_equal, target_entry); + result = __bfs_forwards(root, target, hlock_conflict, target_entry); return result; } @@ -1994,7 +2002,7 @@ check_prev_add(struct task_struct *curr, struct held_lock *prev, * keep the stackframe size of the recursive functions low: */ bfs_init_root(&this, next); - ret = check_noncircular(&this, hlock_class(prev), &target_entry); + ret = check_noncircular(&this, prev, &target_entry); if (unlikely(ret == BFS_RMATCH)) { if (!trace->entries) { /* -- 2.16.1