• David S. Miller's avatar
    sparc: Fix single-pcr perf event counter management. · 9d388b0a
    David S. Miller authored
    [ Upstream commit cfdc3170 ]
    
    It is important to clear the hw->state value for non-stopped events
    when they are added into the PMU.  Otherwise when the event is
    scheduled out, we won't read the counter because HES_UPTODATE is still
    set.  This breaks 'perf stat' and similar use cases, causing all the
    events to show zero.
    
    This worked for multi-pcr because we make explicit sparc_pmu_start()
    calls in calculate_multiple_pcrs().  calculate_single_pcr() doesn't do
    this because the idea there is to accumulate all of the counter
    settings into the single pcr value.  So we have to add explicit
    hw->state handling there.
    
    Like x86, we use the PERF_HES_ARCH bit to track truly stopped events
    so that we don't accidently start them on a reload.
    
    Related to all of this, sparc_pmu_start() is missing a userpage update
    so add it.
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    9d388b0a
perf_event.c 45.9 KB