aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/events/core.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/events/core.c')
-rw-r--r--kernel/events/core.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/kernel/events/core.c b/kernel/events/core.c
index 2067cbb378eb..45e5543e2a1e 100644
--- a/kernel/events/core.c
+++ b/kernel/events/core.c
@@ -243,7 +243,7 @@ static void perf_duration_warn(struct irq_work *w)
243 printk_ratelimited(KERN_WARNING 243 printk_ratelimited(KERN_WARNING
244 "perf interrupt took too long (%lld > %lld), lowering " 244 "perf interrupt took too long (%lld > %lld), lowering "
245 "kernel.perf_event_max_sample_rate to %d\n", 245 "kernel.perf_event_max_sample_rate to %d\n",
246 avg_local_sample_len, allowed_ns, 246 avg_local_sample_len, allowed_ns >> 1,
247 sysctl_perf_event_sample_rate); 247 sysctl_perf_event_sample_rate);
248} 248}
249 249
@@ -283,7 +283,12 @@ void perf_sample_event_took(u64 sample_len_ns)
283 283
284 update_perf_cpu_limits(); 284 update_perf_cpu_limits();
285 285
286 irq_work_queue(&perf_duration_work); 286 if (!irq_work_queue(&perf_duration_work)) {
287 early_printk("perf interrupt took too long (%lld > %lld), lowering "
288 "kernel.perf_event_max_sample_rate to %d\n",
289 avg_local_sample_len, allowed_ns >> 1,
290 sysctl_perf_event_sample_rate);
291 }
287} 292}
288 293
289static atomic64_t perf_event_id; 294static atomic64_t perf_event_id;