perf/x86: Detect number of instances of uncore CBox
authorYan, Zheng <zheng.z.yan@intel.com>
Wed, 4 Jul 2012 06:00:14 +0000 (14:00 +0800)
committerIngo Molnar <mingo@kernel.org>
Thu, 5 Jul 2012 19:56:00 +0000 (21:56 +0200)
The CBox manages the interface between the core and the LLC, so
the instances of uncore CBox is equal to number of cores.

Reported-by: Andrew Cooks <acooks@gmail.com>
Signed-off-by: Yan, Zheng <zheng.z.yan@intel.com>
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/1341381616-12229-4-git-send-email-zheng.z.yan@intel.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
arch/x86/kernel/cpu/perf_event_intel_uncore.c

index 7d755d2..4fecbd0 100644 (file)
@@ -1605,8 +1605,9 @@ static void __init uncore_cpu_setup(void *dummy)
 
 static int __init uncore_cpu_init(void)
 {
-       int ret, cpu;
+       int ret, cpu, max_cores;
 
+       max_cores = boot_cpu_data.x86_max_cores;
        switch (boot_cpu_data.x86_model) {
        case 26: /* Nehalem */
        case 30:
@@ -1615,9 +1616,13 @@ static int __init uncore_cpu_init(void)
                msr_uncores = nhm_msr_uncores;
                break;
        case 42: /* Sandy Bridge */
+               if (snb_uncore_cbox.num_boxes > max_cores)
+                       snb_uncore_cbox.num_boxes = max_cores;
                msr_uncores = snb_msr_uncores;
                break;
        case 45: /* Sandy Birdge-EP */
+               if (snbep_uncore_cbox.num_boxes > max_cores)
+                       snbep_uncore_cbox.num_boxes = max_cores;
                msr_uncores = snbep_msr_uncores;
                break;
        default: