lkml.org 
[lkml]   [2022]   [Aug]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.10 071/545] lockdep: Allow tuning tracing capacity constants.
    Date
    From: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>

    commit 5dc33592e95534dc8455ce3e9baaaf3dae0fff82 upstream.

    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]. Since analysis
    via /proc/lockdep* did not show any obvious culprit [4] [5], we have no
    choice but allow tuning tracing capacity constants.

    [1] https://syzkaller.appspot.com/bug?id=3d97ba93fb3566000c1c59691ea427370d33ea1b
    [2] https://syzkaller.appspot.com/bug?id=381cb436fe60dc03d7fd2a092b46d7f09542a72a
    [3] https://syzkaller.appspot.com/bug?id=a588183ac34c1437fc0785e8f220e88282e5a29f
    [4] https://lkml.kernel.org/r/4b8f7a57-fa20-47bd-48a0-ae35d860f233@i-love.sakura.ne.jp
    [5] https://lkml.kernel.org/r/1c351187-253b-2d49-acaf-4563c63ae7d2@i-love.sakura.ne.jp

    Signed-off-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
    Acked-by: Dmitry Vyukov <dvyukov@google.com>
    Signed-off-by: Alexey Khoroshilov <khoroshilov@ispras.ru>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    kernel/locking/lockdep.c | 2 -
    kernel/locking/lockdep_internals.h | 8 +++----
    lib/Kconfig.debug | 40 +++++++++++++++++++++++++++++++++++++
    3 files changed, 45 insertions(+), 5 deletions(-)

    --- a/kernel/locking/lockdep.c
    +++ b/kernel/locking/lockdep.c
    @@ -1397,7 +1397,7 @@ static int add_lock_to_list(struct lock_
    /*
    * For good efficiency of modular, we use power of 2
    */
    -#define MAX_CIRCULAR_QUEUE_SIZE 4096UL
    +#define MAX_CIRCULAR_QUEUE_SIZE (1UL << CONFIG_LOCKDEP_CIRCULAR_QUEUE_BITS)
    #define CQ_MASK (MAX_CIRCULAR_QUEUE_SIZE-1)

    /*
    --- a/kernel/locking/lockdep_internals.h
    +++ b/kernel/locking/lockdep_internals.h
    @@ -99,16 +99,16 @@ static const unsigned long LOCKF_USED_IN
    #define MAX_STACK_TRACE_ENTRIES 262144UL
    #define STACK_TRACE_HASH_SIZE 8192
    #else
    -#define MAX_LOCKDEP_ENTRIES 32768UL
    +#define MAX_LOCKDEP_ENTRIES (1UL << CONFIG_LOCKDEP_BITS)

    -#define MAX_LOCKDEP_CHAINS_BITS 16
    +#define MAX_LOCKDEP_CHAINS_BITS CONFIG_LOCKDEP_CHAINS_BITS

    /*
    * Stack-trace: tightly packed array of stack backtrace
    * addresses. Protected by the hash_lock.
    */
    -#define MAX_STACK_TRACE_ENTRIES 524288UL
    -#define STACK_TRACE_HASH_SIZE 16384
    +#define MAX_STACK_TRACE_ENTRIES (1UL << CONFIG_LOCKDEP_STACK_TRACE_BITS)
    +#define STACK_TRACE_HASH_SIZE (1 << CONFIG_LOCKDEP_STACK_TRACE_HASH_BITS)
    #endif

    /*
    --- a/lib/Kconfig.debug
    +++ b/lib/Kconfig.debug
    @@ -1307,6 +1307,46 @@ config LOCKDEP
    config LOCKDEP_SMALL
    bool

    +config LOCKDEP_BITS
    + int "Bitsize for MAX_LOCKDEP_ENTRIES"
    + depends on LOCKDEP && !LOCKDEP_SMALL
    + range 10 30
    + default 15
    + help
    + Try increasing this value if you hit "BUG: MAX_LOCKDEP_ENTRIES too low!" message.
    +
    +config LOCKDEP_CHAINS_BITS
    + int "Bitsize for MAX_LOCKDEP_CHAINS"
    + depends on LOCKDEP && !LOCKDEP_SMALL
    + range 10 30
    + default 16
    + help
    + Try increasing this value if you hit "BUG: MAX_LOCKDEP_CHAINS too low!" message.
    +
    +config LOCKDEP_STACK_TRACE_BITS
    + int "Bitsize for MAX_STACK_TRACE_ENTRIES"
    + depends on LOCKDEP && !LOCKDEP_SMALL
    + range 10 30
    + default 19
    + help
    + Try increasing this value if you hit "BUG: MAX_STACK_TRACE_ENTRIES too low!" message.
    +
    +config LOCKDEP_STACK_TRACE_HASH_BITS
    + int "Bitsize for STACK_TRACE_HASH_SIZE"
    + depends on LOCKDEP && !LOCKDEP_SMALL
    + range 10 30
    + default 14
    + help
    + Try increasing this value if you need large MAX_STACK_TRACE_ENTRIES.
    +
    +config LOCKDEP_CIRCULAR_QUEUE_BITS
    + int "Bitsize for elements in circular_queue struct"
    + depends on LOCKDEP
    + range 10 30
    + default 12
    + help
    + Try increasing this value if you hit "lockdep bfs error:-1" warning due to __cq_enqueue() failure.
    +
    config DEBUG_LOCKDEP
    bool "Lock dependency engine debugging"
    depends on DEBUG_KERNEL && LOCKDEP

    \
     
     \ /
      Last update: 2022-08-19 17:55    [W:2.427 / U:0.456 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site