• Stephane Eranian's avatar
    perf: Remove deprecated WARN_ON_ONCE() · 84f2b9b2
    Stephane Eranian authored
    With the new throttling/unthrottling code introduced with
    commit:
    
      e050e3f0 ("perf: Fix broken interrupt rate throttling")
    
    we occasionally hit two WARN_ON_ONCE() checks in:
    
      - intel_pmu_pebs_enable()
      - intel_pmu_lbr_enable()
      - x86_pmu_start()
    
    The assertions are no longer problematic. There is a valid
    path where they can trigger but it is harmless.
    
    The assertion can be triggered with:
    
      $ perf record -e instructions:pp ....
    
    Leading to paths:
    
      intel_pmu_pebs_enable
      intel_pmu_enable_event
      x86_perf_event_set_period
      x86_pmu_start
      perf_adjust_freq_unthr_context
      perf_event_task_tick
      scheduler_tick
    
    And:
    
      intel_pmu_lbr_enable
      intel_pmu_enable_event
      x86_perf_event_set_period
      x86_pmu_start
      perf_adjust_freq_unthr_context.
      perf_event_task_tick
      scheduler_tick
    
    cpuc->enabled is always on because when we get to
    perf_adjust_freq_unthr_context() the PMU is not totally
    disabled. Furthermore when we need to adjust a period,
    we only stop the event we need to change and not the
    entire PMU. Thus, when we re-enable, cpuc->enabled is
    already set. Note that when we stop the event, both
    pebs and lbr are stopped if necessary (and possible).
    Signed-off-by: default avatarStephane Eranian <eranian@google.com>
    Cc: peterz@infradead.org
    Link: http://lkml.kernel.org/r/20120202110401.GA30911@quadSigned-off-by: default avatarIngo Molnar <mingo@elte.hu>
    84f2b9b2
perf_event.c 38.6 KB