perf, x86: Share IBS macros between perf and oprofile
authorRobert Richter <robert.richter@amd.com>
Wed, 21 Sep 2011 09:30:17 +0000 (11:30 +0200)
committerIngo Molnar <mingo@elte.hu>
Mon, 10 Oct 2011 04:57:11 +0000 (06:57 +0200)
Moving IBS macros from oprofile to <asm/perf_event.h> to make it
available to perf. No additional changes.

Signed-off-by: Robert Richter <robert.richter@amd.com>
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/1316597423-25723-2-git-send-email-robert.richter@amd.com
Signed-off-by: Ingo Molnar <mingo@elte.hu>
arch/x86/include/asm/perf_event.h
arch/x86/kernel/cpu/perf_event_amd.c
arch/x86/oprofile/op_model_amd.c

index e47cb61..e9e277c 100644 (file)
 #define AMD64_RAW_EVENT_MASK           \
        (X86_RAW_EVENT_MASK          |  \
         AMD64_EVENTSEL_EVENT)
+#define AMD64_NUM_COUNTERS                             4
+#define AMD64_NUM_COUNTERS_F15H                                6
+#define AMD64_NUM_COUNTERS_MAX                         AMD64_NUM_COUNTERS_F15H
 
-#define ARCH_PERFMON_UNHALTED_CORE_CYCLES_SEL                0x3c
+#define ARCH_PERFMON_UNHALTED_CORE_CYCLES_SEL          0x3c
 #define ARCH_PERFMON_UNHALTED_CORE_CYCLES_UMASK                (0x00 << 8)
-#define ARCH_PERFMON_UNHALTED_CORE_CYCLES_INDEX                         0
+#define ARCH_PERFMON_UNHALTED_CORE_CYCLES_INDEX                0
 #define ARCH_PERFMON_UNHALTED_CORE_CYCLES_PRESENT \
                (1 << (ARCH_PERFMON_UNHALTED_CORE_CYCLES_INDEX))
 
-#define ARCH_PERFMON_BRANCH_MISSES_RETIRED                      6
+#define ARCH_PERFMON_BRANCH_MISSES_RETIRED             6
 
 /*
  * Intel "Architectural Performance Monitoring" CPUID
@@ -113,6 +116,35 @@ union cpuid10_edx {
  */
 #define X86_PMC_IDX_FIXED_BTS                          (X86_PMC_IDX_FIXED + 16)
 
+/*
+ * IBS cpuid feature detection
+ */
+
+#define IBS_CPUID_FEATURES             0x8000001b
+
+/*
+ * Same bit mask as for IBS cpuid feature flags (Fn8000_001B_EAX), but
+ * bit 0 is used to indicate the existence of IBS.
+ */
+#define IBS_CAPS_AVAIL                 (1U<<0)
+#define IBS_CAPS_FETCHSAM              (1U<<1)
+#define IBS_CAPS_OPSAM                 (1U<<2)
+#define IBS_CAPS_RDWROPCNT             (1U<<3)
+#define IBS_CAPS_OPCNT                 (1U<<4)
+#define IBS_CAPS_BRNTRGT               (1U<<5)
+#define IBS_CAPS_OPCNTEXT              (1U<<6)
+
+#define IBS_CAPS_DEFAULT               (IBS_CAPS_AVAIL         \
+                                        | IBS_CAPS_FETCHSAM    \
+                                        | IBS_CAPS_OPSAM)
+
+/*
+ * IBS APIC setup
+ */
+#define IBSCTL                         0x1cc
+#define IBSCTL_LVT_OFFSET_VALID                (1ULL<<8)
+#define IBSCTL_LVT_OFFSET_MASK         0x0F
+
 /* IbsFetchCtl bits/masks */
 #define IBS_FETCH_RAND_EN      (1ULL<<57)
 #define IBS_FETCH_VAL          (1ULL<<49)
index db8e603..aeefd45 100644 (file)
@@ -411,7 +411,7 @@ static __initconst const struct x86_pmu amd_pmu = {
        .perfctr                = MSR_K7_PERFCTR0,
        .event_map              = amd_pmu_event_map,
        .max_events             = ARRAY_SIZE(amd_perfmon_event_map),
-       .num_counters           = 4,
+       .num_counters           = AMD64_NUM_COUNTERS,
        .cntval_bits            = 48,
        .cntval_mask            = (1ULL << 48) - 1,
        .apic                   = 1,
@@ -575,7 +575,7 @@ static __initconst const struct x86_pmu amd_pmu_f15h = {
        .perfctr                = MSR_F15H_PERF_CTR,
        .event_map              = amd_pmu_event_map,
        .max_events             = ARRAY_SIZE(amd_perfmon_event_map),
-       .num_counters           = 6,
+       .num_counters           = AMD64_NUM_COUNTERS_F15H,
        .cntval_bits            = 48,
        .cntval_mask            = (1ULL << 48) - 1,
        .apic                   = 1,
index 9cbb710..e947e5c 100644 (file)
@@ -29,8 +29,6 @@
 #include "op_x86_model.h"
 #include "op_counter.h"
 
-#define NUM_COUNTERS           4
-#define NUM_COUNTERS_F15H      6
 #ifdef CONFIG_OPROFILE_EVENT_MULTIPLEX
 #define NUM_VIRT_COUNTERS      32
 #else
@@ -70,35 +68,6 @@ static struct ibs_config ibs_config;
 static struct ibs_state ibs_state;
 
 /*
- * IBS cpuid feature detection
- */
-
-#define IBS_CPUID_FEATURES             0x8000001b
-
-/*
- * Same bit mask as for IBS cpuid feature flags (Fn8000_001B_EAX), but
- * bit 0 is used to indicate the existence of IBS.
- */
-#define IBS_CAPS_AVAIL                 (1U<<0)
-#define IBS_CAPS_FETCHSAM              (1U<<1)
-#define IBS_CAPS_OPSAM                 (1U<<2)
-#define IBS_CAPS_RDWROPCNT             (1U<<3)
-#define IBS_CAPS_OPCNT                 (1U<<4)
-#define IBS_CAPS_BRNTRGT               (1U<<5)
-#define IBS_CAPS_OPCNTEXT              (1U<<6)
-
-#define IBS_CAPS_DEFAULT               (IBS_CAPS_AVAIL         \
-                                        | IBS_CAPS_FETCHSAM    \
-                                        | IBS_CAPS_OPSAM)
-
-/*
- * IBS APIC setup
- */
-#define IBSCTL                         0x1cc
-#define IBSCTL_LVT_OFFSET_VALID                (1ULL<<8)
-#define IBSCTL_LVT_OFFSET_MASK         0x0F
-
-/*
  * IBS randomization macros
  */
 #define IBS_RANDOM_BITS                        12
@@ -439,7 +408,7 @@ static int op_amd_fill_in_addresses(struct op_msrs * const msrs)
                        goto fail;
                }
                /* both registers must be reserved */
-               if (num_counters == NUM_COUNTERS_F15H) {
+               if (num_counters == AMD64_NUM_COUNTERS_F15H) {
                        msrs->counters[i].addr = MSR_F15H_PERF_CTR + (i << 1);
                        msrs->controls[i].addr = MSR_F15H_PERF_CTL + (i << 1);
                } else {
@@ -741,9 +710,9 @@ static int op_amd_init(struct oprofile_operations *ops)
        ops->create_files = setup_ibs_files;
 
        if (boot_cpu_data.x86 == 0x15) {
-               num_counters = NUM_COUNTERS_F15H;
+               num_counters = AMD64_NUM_COUNTERS_F15H;
        } else {
-               num_counters = NUM_COUNTERS;
+               num_counters = AMD64_NUM_COUNTERS;
        }
 
        op_amd_spec.num_counters = num_counters;