• Steven Rostedt's avatar
    tracing: fix trace_wait to know to wait on all cpus or just one · 9aba60fe
    Steven Rostedt authored
    Impact: fix to task live locking on reading trace_pipe on one CPU
    
    The same code is used for both trace_pipe (all CPUS) and the per_cpu
    trace_pipe file. When there is no data to read, it will check for
    signals and wait on the trace wait queue.
    
    The problem happens with the per_cpu wait. The trace_wait code checks
    all CPUs. Thus, if there's data in another CPU buffer, then it will
    exit the wait, without checking for signals or waiting on the wait queue.
    
    It would then try to read the empty buffer, and since that will just
    return nothing, then it will try to wait again. Unfortunately, that will
    again fail due to there still being data in the other buffers. This
    ends up with a live lock for the task.
    
    This patch fixes the trace_wait to be aware that the iterator may only
    be waiting on a single buffer.
    Signed-off-by: default avatarSteven Rostedt <srostedt@redhat.com>
    9aba60fe
trace.c 90.5 KB