OSDN Git Service

x86, perf_counter, bts: Do not allow kernel BTS tracing for now
authormarkus.t.metzger@intel.com <markus.t.metzger@intel.com>
Wed, 2 Sep 2009 14:04:48 +0000 (16:04 +0200)
committerIngo Molnar <mingo@elte.hu>
Fri, 4 Sep 2009 07:26:40 +0000 (09:26 +0200)
Kernel BTS tracing generates too much data too fast for us to
handle, causing the kernel to hang.

Fail for BTS requests for kernel code.

Signed-off-by: Markus Metzger <markus.t.metzger@intel.com>
Acked-by: Peter Zijlstra <a.p.zjilstra@chello.nl>
LKML-Reference: <20090902140616.901253000@intel.com>
[ This is really a workaround - but we want BTS tracing in .32
  so make sure we dont regress. The lockup should be fixed
  ASAP. ]
Signed-off-by: Ingo Molnar <mingo@elte.hu>
arch/x86/kernel/cpu/perf_counter.c

index 3776b0b..f9cd084 100644 (file)
@@ -984,8 +984,15 @@ static int __hw_perf_counter_init(struct perf_counter *counter)
         * Branch tracing:
         */
        if ((attr->config == PERF_COUNT_HW_BRANCH_INSTRUCTIONS) &&
-           (hwc->sample_period == 1) && !bts_available())
-               return -EOPNOTSUPP;
+           (hwc->sample_period == 1)) {
+               /* BTS is not supported by this architecture. */
+               if (!bts_available())
+                       return -EOPNOTSUPP;
+
+               /* BTS is currently only allowed for user-mode. */
+               if (hwc->config & ARCH_PERFMON_EVENTSEL_OS)
+                       return -EOPNOTSUPP;
+       }
 
        hwc->config |= config;