lkml.org 
[lkml]   [2011]   [Oct]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2 2/9] perf, amd: Use GO/HO bits in perf-ctr
    Date
    From: Joerg Roedel <joerg.roedel@amd.com>

    The AMD perf-counters support counting in guest or host-mode
    only. Make use of that feature when user-space specified
    guest/host-mode only counting.

    Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
    Signed-off-by: Gleb Natapov <gleb@redhat.com>
    ---
    arch/x86/include/asm/perf_event.h | 3 +++
    arch/x86/kernel/cpu/perf_event_amd.c | 13 +++++++++++++
    2 files changed, 16 insertions(+), 0 deletions(-)

    diff --git a/arch/x86/include/asm/perf_event.h b/arch/x86/include/asm/perf_event.h
    index 094fb30..ce2bfb3 100644
    --- a/arch/x86/include/asm/perf_event.h
    +++ b/arch/x86/include/asm/perf_event.h
    @@ -29,6 +29,9 @@
    #define ARCH_PERFMON_EVENTSEL_INV (1ULL << 23)
    #define ARCH_PERFMON_EVENTSEL_CMASK 0xFF000000ULL

    +#define AMD_PERFMON_EVENTSEL_GUESTONLY (1ULL << 40)
    +#define AMD_PERFMON_EVENTSEL_HOSTONLY (1ULL << 41)
    +
    #define AMD64_EVENTSEL_EVENT \
    (ARCH_PERFMON_EVENTSEL_EVENT | (0x0FULL << 32))
    #define INTEL_ARCH_EVENT_MASK \
    diff --git a/arch/x86/kernel/cpu/perf_event_amd.c b/arch/x86/kernel/cpu/perf_event_amd.c
    index 941caa2..5c01a73 100644
    --- a/arch/x86/kernel/cpu/perf_event_amd.c
    +++ b/arch/x86/kernel/cpu/perf_event_amd.c
    @@ -132,6 +132,19 @@ static int amd_pmu_hw_config(struct perf_event *event)
    if (ret)
    return ret;

    + if (event->attr.exclude_host && event->attr.exclude_guest)
    + /*
    + * When HO == GO == 1 the hardware treats that as GO == HO == 0
    + * and will count in both modes. We don't want to count in that
    + * case so we emulate no-counting by setting US = OS = 0.
    + */
    + event->hw.config &= ~(ARCH_PERFMON_EVENTSEL_USR |
    + ARCH_PERFMON_EVENTSEL_OS);
    + else if (event->attr.exclude_host)
    + event->hw.config |= AMD_PERFMON_EVENTSEL_GUESTONLY;
    + else if (event->attr.exclude_guest)
    + event->hw.config |= AMD_PERFMON_EVENTSEL_HOSTONLY;
    +
    if (event->attr.type != PERF_TYPE_RAW)
    return 0;

    --
    1.7.5.3


    \
     
     \ /
      Last update: 2011-10-05 14:03    [W:0.021 / U:91.352 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site