lkml.org 
[lkml]   [2014]   [Nov]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH RESEND 3.18-rc3 v2 2/2] trace: kdb: Fix kernel livelock with empty buffers
    Date
    Currently kdb's ftdump command will livelock by constantly printk'ing
    the empty string at KERN_EMERG level if it run when the ftrace system is
    not in use. This occurs because trace_empty() never returns false when
    the ring buffers are left at the start of a non-consuming read [launched
    by ring_buffer_read_start()].

    This patch changes the loop exit condition to use the result of
    trace_find_next_entry_inc(). Effectively this switches the non-consuming
    kdb dumper to follow the approach of the non-consuming userspace
    interface [s_next()] rather than the consuming ftrace_dump().

    Signed-off-by: Daniel Thompson <daniel.thompson@linaro.org>
    Cc: Jason Wessel <jason.wessel@windriver.com>
    Cc: Steven Rostedt <rostedt@goodmis.org>
    Cc: Ingo Molnar <mingo@redhat.com>
    ---
    kernel/trace/trace_kdb.c | 12 ++++++------
    1 file changed, 6 insertions(+), 6 deletions(-)

    diff --git a/kernel/trace/trace_kdb.c b/kernel/trace/trace_kdb.c
    index 8faa7ce..b0b1c44 100644
    --- a/kernel/trace/trace_kdb.c
    +++ b/kernel/trace/trace_kdb.c
    @@ -59,19 +59,19 @@ static void ftrace_dump_buf(int skip_lines, long cpu_file)
    ring_buffer_read_start(iter.buffer_iter[cpu_file]);
    tracing_iter_reset(&iter, cpu_file);
    }
    - if (!trace_empty(&iter))
    - trace_find_next_entry_inc(&iter);
    - while (!trace_empty(&iter)) {
    +
    + while (trace_find_next_entry_inc(&iter)) {
    if (!cnt)
    kdb_printf("---------------------------------\n");
    cnt++;

    - if (trace_find_next_entry_inc(&iter) != NULL && !skip_lines)
    + if (!skip_lines) {
    print_trace_line(&iter);
    - if (!skip_lines)
    trace_printk_seq(&iter.seq);
    - else
    + } else {
    skip_lines--;
    + }
    +
    if (KDB_FLAG(CMD_INTERRUPT))
    goto out;
    }
    --
    1.9.3


    \
     
     \ /
      Last update: 2014-11-06 14:21    [W:4.256 / U:0.124 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site