lkml.org 
[lkml]   [2020]   [Jun]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 5.4 039/175] kgdb: Disable WARN_CONSOLE_UNLOCKED for all kgdb
    Date
    From: Douglas Anderson <dianders@chromium.org>

    [ Upstream commit 202164fbfa2b2ffa3e66b504e0f126ba9a745006 ]

    In commit 81eaadcae81b ("kgdboc: disable the console lock when in
    kgdb") we avoided the WARN_CONSOLE_UNLOCKED() yell when we were in
    kgdboc. That still works fine, but it turns out that we get a similar
    yell when using other I/O drivers. One example is the "I/O driver"
    for the kgdb test suite (kgdbts). When I enabled that I again got the
    same yells.

    Even though "kgdbts" doesn't actually interact with the user over the
    console, using it still causes kgdb to print to the consoles. That
    trips the same warning:
    con_is_visible+0x60/0x68
    con_scroll+0x110/0x1b8
    lf+0x4c/0xc8
    vt_console_print+0x1b8/0x348
    vkdb_printf+0x320/0x89c
    kdb_printf+0x68/0x90
    kdb_main_loop+0x190/0x860
    kdb_stub+0x2cc/0x3ec
    kgdb_cpu_enter+0x268/0x744
    kgdb_handle_exception+0x1a4/0x200
    kgdb_compiled_brk_fn+0x34/0x44
    brk_handler+0x7c/0xb8
    do_debug_exception+0x1b4/0x228

    Let's increment/decrement the "ignore_console_lock_warning" variable
    all the time when we enter the debugger.

    This will allow us to later revert commit 81eaadcae81b ("kgdboc:
    disable the console lock when in kgdb").

    Signed-off-by: Douglas Anderson <dianders@chromium.org>
    Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Reviewed-by: Daniel Thompson <daniel.thompson@linaro.org>
    Link: https://lore.kernel.org/r/20200507130644.v4.1.Ied2b058357152ebcc8bf68edd6f20a11d98d7d4e@changeid
    Signed-off-by: Daniel Thompson <daniel.thompson@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    kernel/debug/debug_core.c | 4 ++++
    1 file changed, 4 insertions(+)

    diff --git a/kernel/debug/debug_core.c b/kernel/debug/debug_core.c
    index f76d6f77dd5e..d0d557c0ceff 100644
    --- a/kernel/debug/debug_core.c
    +++ b/kernel/debug/debug_core.c
    @@ -634,6 +634,8 @@ static int kgdb_cpu_enter(struct kgdb_state *ks, struct pt_regs *regs,
    if (kgdb_skipexception(ks->ex_vector, ks->linux_regs))
    goto kgdb_restore;

    + atomic_inc(&ignore_console_lock_warning);
    +
    /* Call the I/O driver's pre_exception routine */
    if (dbg_io_ops->pre_exception)
    dbg_io_ops->pre_exception();
    @@ -706,6 +708,8 @@ static int kgdb_cpu_enter(struct kgdb_state *ks, struct pt_regs *regs,
    if (dbg_io_ops->post_exception)
    dbg_io_ops->post_exception();

    + atomic_dec(&ignore_console_lock_warning);
    +
    if (!kgdb_single_step) {
    raw_spin_unlock(&dbg_slave_lock);
    /* Wait till all the CPUs have quit from the debugger. */
    --
    2.25.1
    \
     
     \ /
      Last update: 2020-06-09 02:13    [W:4.052 / U:0.532 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site