From: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
To: Peter Zijlstra <peterz@infradead.org>,
Ingo Molnar <mingo@redhat.com>, Will Deacon <will@kernel.org>
Cc: linux-kernel@vger.kernel.org, Dmitry Vyukov <dvyukov@google.com>,
Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>,
syzbot <syzbot+62ebe501c1ce9a91f68c@syzkaller.appspotmail.com>,
syzbot <syzbot+91fd909b6e62ebe06131@syzkaller.appspotmail.com>,
syzbot <syzbot+cd0ec5211ac07c18c049@syzkaller.appspotmail.com>
Subject: [PATCH] lockdep: Introduce CONFIG_LOCKDEP_LARGE
Date: Sat, 25 Jul 2020 10:30:39 +0900 [thread overview]
Message-ID: <1595640639-9310-1-git-send-email-penguin-kernel@I-love.SAKURA.ne.jp> (raw)
Since syzkaller continues various test cases until the kernel crashes,
syzkaller tends to examine more locking dependencies than normal systems.
As a result, syzbot is reporting that the fuzz testing was terminated
due to hitting upper limits lockdep can track [1] [2] [3].
Like CONFIG_LOCKDEP_SMALL which halves the upper limits, let's introduce
CONFIG_LOCKDEP_LARGE which doubles the upper limits.
[1] https://syzkaller.appspot.com/bug?id=3d97ba93fb3566000c1c59691ea427370d33ea1b
[2] https://syzkaller.appspot.com/bug?id=381cb436fe60dc03d7fd2a092b46d7f09542a72a
[3] https://syzkaller.appspot.com/bug?id=a588183ac34c1437fc0785e8f220e88282e5a29f
Reported-by: syzbot <syzbot+cd0ec5211ac07c18c049@syzkaller.appspotmail.com>
Reported-by: syzbot <syzbot+91fd909b6e62ebe06131@syzkaller.appspotmail.com>
Reported-by: syzbot <syzbot+62ebe501c1ce9a91f68c@syzkaller.appspotmail.com>
Signed-off-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
---
kernel/locking/lockdep.c | 4 ++++
kernel/locking/lockdep_internals.h | 5 +++++
lib/Kconfig.debug | 8 ++++++++
3 files changed, 17 insertions(+)
diff --git a/kernel/locking/lockdep.c b/kernel/locking/lockdep.c
index 29a8de4..85ba7eb 100644
--- a/kernel/locking/lockdep.c
+++ b/kernel/locking/lockdep.c
@@ -1349,7 +1349,11 @@ static int add_lock_to_list(struct lock_class *this,
/*
* For good efficiency of modular, we use power of 2
*/
+#ifdef CONFIG_LOCKDEP_LARGE
+#define MAX_CIRCULAR_QUEUE_SIZE 8192UL
+#else
#define MAX_CIRCULAR_QUEUE_SIZE 4096UL
+#endif
#define CQ_MASK (MAX_CIRCULAR_QUEUE_SIZE-1)
/*
diff --git a/kernel/locking/lockdep_internals.h b/kernel/locking/lockdep_internals.h
index baca699..00a3ec3 100644
--- a/kernel/locking/lockdep_internals.h
+++ b/kernel/locking/lockdep_internals.h
@@ -93,6 +93,11 @@ enum {
#define MAX_LOCKDEP_CHAINS_BITS 15
#define MAX_STACK_TRACE_ENTRIES 262144UL
#define STACK_TRACE_HASH_SIZE 8192
+#elif defined(CONFIG_LOCKDEP_LARGE)
+#define MAX_LOCKDEP_ENTRIES 65536UL
+#define MAX_LOCKDEP_CHAINS_BITS 17
+#define MAX_STACK_TRACE_ENTRIES 1048576UL
+#define STACK_TRACE_HASH_SIZE 32768
#else
#define MAX_LOCKDEP_ENTRIES 32768UL
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
index 9ad9210..69ba624 100644
--- a/lib/Kconfig.debug
+++ b/lib/Kconfig.debug
@@ -1266,6 +1266,14 @@ config LOCKDEP
config LOCKDEP_SMALL
bool
+config LOCKDEP_LARGE
+ bool "Use larger buffer for tracking more locking dependencies"
+ depends on LOCKDEP && !LOCKDEP_SMALL
+ help
+ If you say Y here, the upper limits the lock dependency engine uses will
+ be doubled. Useful for fuzz testing which tends to test many complecated
+ dependencies than normal systems.
+
config DEBUG_LOCKDEP
bool "Lock dependency engine debugging"
depends on DEBUG_KERNEL && LOCKDEP
--
1.8.3.1
next reply other threads:[~2020-07-25 1:30 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-07-25 1:30 Tetsuo Handa [this message]
2020-07-25 4:48 ` [PATCH] lockdep: Introduce CONFIG_LOCKDEP_LARGE Dmitry Vyukov
2020-07-25 5:23 ` Tetsuo Handa
2020-08-04 2:36 ` Tetsuo Handa
2020-08-18 9:57 ` Dmitry Vyukov
2020-08-18 11:07 ` Tetsuo Handa
2020-08-18 12:02 ` Dmitry Vyukov
2020-08-18 12:59 ` Tetsuo Handa
2020-08-27 15:20 ` [PATCH v2] lockdep: Allow tuning tracing capacity constants Tetsuo Handa
2020-09-04 16:05 ` Tetsuo Handa
2020-09-16 11:28 ` Dmitry Vyukov
2020-09-16 11:50 ` peterz
2020-09-16 12:14 ` Dmitry Vyukov
2020-09-28 0:24 ` Tetsuo Handa
2020-09-28 5:12 ` Dmitry Vyukov
2020-10-10 12:58 ` [PATCH v3] " Tetsuo Handa
2020-10-18 13:02 ` Tetsuo Handa
2020-11-18 13:57 ` Tetsuo Handa
2020-11-18 14:23 ` Peter Zijlstra
2020-11-18 14:30 ` Tetsuo Handa
2020-11-18 15:10 ` Peter Zijlstra
2020-11-18 15:31 ` Tetsuo Handa
2020-11-19 12:33 ` Dmitry Vyukov
2020-11-19 12:43 ` Dmitry Vyukov
2020-11-19 12:49 ` Dmitry Vyukov
2020-11-19 13:06 ` Dmitry Vyukov
2020-11-19 13:45 ` Tetsuo Handa
2020-11-19 14:05 ` Dmitry Vyukov
[not found] ` <CACT4Y+aNJmuhk0KicX4FzKW6PhawFBgvrC2gSJcWwUkR8VSSmg@mail.gmail.com>
2020-11-19 14:36 ` Dmitry Vyukov
2020-11-19 18:08 ` Dmitry Vyukov
2020-11-20 9:22 ` Dmitry Vyukov
2020-11-20 9:27 ` Dmitry Vyukov
2020-11-22 1:56 ` Tetsuo Handa
2020-11-27 9:00 ` Dmitry Vyukov
2020-12-03 13:47 ` Tetsuo Handa
2020-12-04 14:35 ` Tetsuo Handa
2020-11-19 14:57 ` Tetsuo Handa
2021-01-01 8:09 ` [PATCH v4] " Tetsuo Handa
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1595640639-9310-1-git-send-email-penguin-kernel@I-love.SAKURA.ne.jp \
--to=penguin-kernel@i-love.sakura.ne.jp \
--cc=dvyukov@google.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=peterz@infradead.org \
--cc=syzbot+62ebe501c1ce9a91f68c@syzkaller.appspotmail.com \
--cc=syzbot+91fd909b6e62ebe06131@syzkaller.appspotmail.com \
--cc=syzbot+cd0ec5211ac07c18c049@syzkaller.appspotmail.com \
--cc=will@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.