diff options
| -rw-r--r-- | arch/x86/events/intel/core.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/arch/x86/events/intel/core.c b/arch/x86/events/intel/core.c index f9451566cd9b..d35f4775d5f1 100644 --- a/arch/x86/events/intel/core.c +++ b/arch/x86/events/intel/core.c | |||
| @@ -2091,15 +2091,19 @@ static void intel_pmu_disable_event(struct perf_event *event) | |||
| 2091 | cpuc->intel_ctrl_host_mask &= ~(1ull << hwc->idx); | 2091 | cpuc->intel_ctrl_host_mask &= ~(1ull << hwc->idx); |
| 2092 | cpuc->intel_cp_status &= ~(1ull << hwc->idx); | 2092 | cpuc->intel_cp_status &= ~(1ull << hwc->idx); |
| 2093 | 2093 | ||
| 2094 | if (unlikely(event->attr.precise_ip)) | ||
| 2095 | intel_pmu_pebs_disable(event); | ||
| 2096 | |||
| 2097 | if (unlikely(hwc->config_base == MSR_ARCH_PERFMON_FIXED_CTR_CTRL)) { | 2094 | if (unlikely(hwc->config_base == MSR_ARCH_PERFMON_FIXED_CTR_CTRL)) { |
| 2098 | intel_pmu_disable_fixed(hwc); | 2095 | intel_pmu_disable_fixed(hwc); |
| 2099 | return; | 2096 | return; |
| 2100 | } | 2097 | } |
| 2101 | 2098 | ||
| 2102 | x86_pmu_disable_event(event); | 2099 | x86_pmu_disable_event(event); |
| 2100 | |||
| 2101 | /* | ||
| 2102 | * Needs to be called after x86_pmu_disable_event, | ||
| 2103 | * so we don't trigger the event without PEBS bit set. | ||
| 2104 | */ | ||
| 2105 | if (unlikely(event->attr.precise_ip)) | ||
| 2106 | intel_pmu_pebs_disable(event); | ||
| 2103 | } | 2107 | } |
| 2104 | 2108 | ||
| 2105 | static void intel_pmu_del_event(struct perf_event *event) | 2109 | static void intel_pmu_del_event(struct perf_event *event) |
