• Daniel Bristot de Oliveira's avatar
    tracing/timerlat: Always wakeup the timerlat thread · 632478a0
    Daniel Bristot de Oliveira authored
    While testing rtla timerlat auto analysis, I reach a condition where
    the interface was not receiving tracing data. I was able to manually
    reproduce the problem with these steps:
    
      # echo 0 > tracing_on                 # disable trace
      # echo 1 > osnoise/stop_tracing_us    # stop trace if timerlat irq > 1 us
      # echo timerlat > current_tracer      # enable timerlat tracer
      # sleep 1                             # wait... that is the time when rtla
                                            # apply configs like prio or cgroup
      # echo 1 > tracing_on                 # start tracing
      # cat trace
      # tracer: timerlat
      #
      #                                _-----=> irqs-off
      #                               / _----=> need-resched
      #                              | / _---=> hardirq/softirq
      #                              || / _--=> preempt-depth
      #                              ||| / _-=> migrate-disable
      #                              |||| /     delay
      #                              |||||            ACTIVATION
      #           TASK-PID      CPU# |||||   TIMESTAMP   ID            CONTEXT                 LATENCY
      #              | |         |   |||||      |         |                  |                       |
            NOTHING!
    
    Then, trying to enable tracing again with echo 1 > tracing_on resulted
    in no change: the trace was still not tracing.
    
    This problem happens because the timerlat IRQ hits the stop tracing
    condition while tracing is off, and do not wake up the timerlat thread,
    so the timerlat threads are kept sleeping forever, resulting in no
    trace, even after re-enabling the tracer.
    
    Avoid this condition by always waking up the threads, even after stopping
    tracing, allowing the tracer to return to its normal operating after
    a new tracing on.
    
    Link: https://lore.kernel.org/linux-trace-kernel/1ed8f830638b20a39d535d27d908e319a9a3c4e2.1683822622.git.bristot@kernel.org
    
    Cc: Juri Lelli <juri.lelli@redhat.com>
    Cc: stable@vger.kernel.org
    Fixes: a955d7ea ("trace: Add timerlat tracer")
    Signed-off-by: default avatarDaniel Bristot de Oliveira <bristot@kernel.org>
    Signed-off-by: default avatarSteven Rostedt (Google) <rostedt@goodmis.org>
    632478a0
trace_osnoise.c 64.2 KB