diff options
Diffstat (limited to 'arch/x86/kernel/cpu/perf_event_intel.c')
-rw-r--r-- | arch/x86/kernel/cpu/perf_event_intel.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/arch/x86/kernel/cpu/perf_event_intel.c b/arch/x86/kernel/cpu/perf_event_intel.c index fc6dbc46af4a..b7b3ff21c832 100644 --- a/arch/x86/kernel/cpu/perf_event_intel.c +++ b/arch/x86/kernel/cpu/perf_event_intel.c | |||
@@ -1942,6 +1942,17 @@ static int intel_pmu_hw_config(struct perf_event *event) | |||
1942 | ret = intel_pmu_setup_lbr_filter(event); | 1942 | ret = intel_pmu_setup_lbr_filter(event); |
1943 | if (ret) | 1943 | if (ret) |
1944 | return ret; | 1944 | return ret; |
1945 | |||
1946 | /* | ||
1947 | * BTS is set up earlier in this path, so don't account twice | ||
1948 | */ | ||
1949 | if (!intel_pmu_has_bts(event)) { | ||
1950 | /* disallow lbr if conflicting events are present */ | ||
1951 | if (x86_add_exclusive(x86_lbr_exclusive_lbr)) | ||
1952 | return -EBUSY; | ||
1953 | |||
1954 | event->destroy = hw_perf_lbr_event_destroy; | ||
1955 | } | ||
1945 | } | 1956 | } |
1946 | 1957 | ||
1947 | if (event->attr.type != PERF_TYPE_RAW) | 1958 | if (event->attr.type != PERF_TYPE_RAW) |