diff options
| -rw-r--r-- | arch/x86/kernel/cpu/perf_event_intel.c | 6 | ||||
| -rw-r--r-- | arch/x86/kernel/cpu/perf_event_intel_ds.c | 11 |
2 files changed, 9 insertions, 8 deletions
diff --git a/arch/x86/kernel/cpu/perf_event_intel.c b/arch/x86/kernel/cpu/perf_event_intel.c index 82395f2378ec..c8f5c088cad1 100644 --- a/arch/x86/kernel/cpu/perf_event_intel.c +++ b/arch/x86/kernel/cpu/perf_event_intel.c | |||
| @@ -713,18 +713,18 @@ static int intel_pmu_handle_irq(struct pt_regs *regs) | |||
| 713 | struct cpu_hw_events *cpuc; | 713 | struct cpu_hw_events *cpuc; |
| 714 | int bit, loops; | 714 | int bit, loops; |
| 715 | u64 status; | 715 | u64 status; |
| 716 | int handled = 0; | 716 | int handled; |
| 717 | 717 | ||
| 718 | perf_sample_data_init(&data, 0); | 718 | perf_sample_data_init(&data, 0); |
| 719 | 719 | ||
| 720 | cpuc = &__get_cpu_var(cpu_hw_events); | 720 | cpuc = &__get_cpu_var(cpu_hw_events); |
| 721 | 721 | ||
| 722 | intel_pmu_disable_all(); | 722 | intel_pmu_disable_all(); |
| 723 | intel_pmu_drain_bts_buffer(); | 723 | handled = intel_pmu_drain_bts_buffer(); |
| 724 | status = intel_pmu_get_status(); | 724 | status = intel_pmu_get_status(); |
| 725 | if (!status) { | 725 | if (!status) { |
| 726 | intel_pmu_enable_all(0); | 726 | intel_pmu_enable_all(0); |
| 727 | return 0; | 727 | return handled; |
| 728 | } | 728 | } |
| 729 | 729 | ||
| 730 | loops = 0; | 730 | loops = 0; |
diff --git a/arch/x86/kernel/cpu/perf_event_intel_ds.c b/arch/x86/kernel/cpu/perf_event_intel_ds.c index 9893a2f77b7a..4977f9c400e5 100644 --- a/arch/x86/kernel/cpu/perf_event_intel_ds.c +++ b/arch/x86/kernel/cpu/perf_event_intel_ds.c | |||
| @@ -214,7 +214,7 @@ static void intel_pmu_disable_bts(void) | |||
| 214 | update_debugctlmsr(debugctlmsr); | 214 | update_debugctlmsr(debugctlmsr); |
| 215 | } | 215 | } |
| 216 | 216 | ||
| 217 | static void intel_pmu_drain_bts_buffer(void) | 217 | static int intel_pmu_drain_bts_buffer(void) |
| 218 | { | 218 | { |
| 219 | struct cpu_hw_events *cpuc = &__get_cpu_var(cpu_hw_events); | 219 | struct cpu_hw_events *cpuc = &__get_cpu_var(cpu_hw_events); |
| 220 | struct debug_store *ds = cpuc->ds; | 220 | struct debug_store *ds = cpuc->ds; |
| @@ -231,16 +231,16 @@ static void intel_pmu_drain_bts_buffer(void) | |||
| 231 | struct pt_regs regs; | 231 | struct pt_regs regs; |
| 232 | 232 | ||
| 233 | if (!event) | 233 | if (!event) |
| 234 | return; | 234 | return 0; |
| 235 | 235 | ||
| 236 | if (!ds) | 236 | if (!ds) |
| 237 | return; | 237 | return 0; |
| 238 | 238 | ||
| 239 | at = (struct bts_record *)(unsigned long)ds->bts_buffer_base; | 239 | at = (struct bts_record *)(unsigned long)ds->bts_buffer_base; |
| 240 | top = (struct bts_record *)(unsigned long)ds->bts_index; | 240 | top = (struct bts_record *)(unsigned long)ds->bts_index; |
| 241 | 241 | ||
| 242 | if (top <= at) | 242 | if (top <= at) |
| 243 | return; | 243 | return 0; |
| 244 | 244 | ||
| 245 | ds->bts_index = ds->bts_buffer_base; | 245 | ds->bts_index = ds->bts_buffer_base; |
| 246 | 246 | ||
| @@ -256,7 +256,7 @@ static void intel_pmu_drain_bts_buffer(void) | |||
| 256 | perf_prepare_sample(&header, &data, event, ®s); | 256 | perf_prepare_sample(&header, &data, event, ®s); |
| 257 | 257 | ||
| 258 | if (perf_output_begin(&handle, event, header.size * (top - at), 1, 1)) | 258 | if (perf_output_begin(&handle, event, header.size * (top - at), 1, 1)) |
| 259 | return; | 259 | return 1; |
| 260 | 260 | ||
| 261 | for (; at < top; at++) { | 261 | for (; at < top; at++) { |
| 262 | data.ip = at->from; | 262 | data.ip = at->from; |
| @@ -270,6 +270,7 @@ static void intel_pmu_drain_bts_buffer(void) | |||
| 270 | /* There's new data available. */ | 270 | /* There's new data available. */ |
| 271 | event->hw.interrupts++; | 271 | event->hw.interrupts++; |
| 272 | event->pending_kill = POLL_IN; | 272 | event->pending_kill = POLL_IN; |
| 273 | return 1; | ||
| 273 | } | 274 | } |
| 274 | 275 | ||
| 275 | /* | 276 | /* |
