diff options
| author | Ingo Molnar <mingo@kernel.org> | 2012-06-18 05:47:58 -0400 |
|---|---|---|
| committer | Ingo Molnar <mingo@kernel.org> | 2012-06-18 05:47:58 -0400 |
| commit | d1ece0998eeb7b6543044f32b7d9bcbaf6dc294a (patch) | |
| tree | bcbb3dddee8b5db83f07585370b1bd57f92296ac /kernel | |
| parent | 76958a61e42fb6277a8431eb17e4bdb24176f1b7 (diff) | |
| parent | 9c5da09d266ca9b32eb16cf940f8161d949c2fe5 (diff) | |
Merge branch 'perf/urgent' into perf/core
Merge in all fixes before applying more changes.
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/events/core.c | 10 | ||||
| -rw-r--r-- | kernel/trace/trace.c | 2 | ||||
| -rw-r--r-- | kernel/watchdog.c | 19 |
3 files changed, 26 insertions, 5 deletions
diff --git a/kernel/events/core.c b/kernel/events/core.c index f85c0154b333..d7d71d6ec972 100644 --- a/kernel/events/core.c +++ b/kernel/events/core.c | |||
| @@ -253,9 +253,9 @@ perf_cgroup_match(struct perf_event *event) | |||
| 253 | return !event->cgrp || event->cgrp == cpuctx->cgrp; | 253 | return !event->cgrp || event->cgrp == cpuctx->cgrp; |
| 254 | } | 254 | } |
| 255 | 255 | ||
| 256 | static inline void perf_get_cgroup(struct perf_event *event) | 256 | static inline bool perf_tryget_cgroup(struct perf_event *event) |
| 257 | { | 257 | { |
| 258 | css_get(&event->cgrp->css); | 258 | return css_tryget(&event->cgrp->css); |
| 259 | } | 259 | } |
| 260 | 260 | ||
| 261 | static inline void perf_put_cgroup(struct perf_event *event) | 261 | static inline void perf_put_cgroup(struct perf_event *event) |
| @@ -484,7 +484,11 @@ static inline int perf_cgroup_connect(int fd, struct perf_event *event, | |||
| 484 | event->cgrp = cgrp; | 484 | event->cgrp = cgrp; |
| 485 | 485 | ||
| 486 | /* must be done before we fput() the file */ | 486 | /* must be done before we fput() the file */ |
| 487 | perf_get_cgroup(event); | 487 | if (!perf_tryget_cgroup(event)) { |
| 488 | event->cgrp = NULL; | ||
| 489 | ret = -ENOENT; | ||
| 490 | goto out; | ||
| 491 | } | ||
| 488 | 492 | ||
| 489 | /* | 493 | /* |
| 490 | * all events in a group must monitor | 494 | * all events in a group must monitor |
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index 68032c6177db..49249c28690d 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c | |||
| @@ -371,7 +371,7 @@ EXPORT_SYMBOL_GPL(tracing_on); | |||
| 371 | void tracing_off(void) | 371 | void tracing_off(void) |
| 372 | { | 372 | { |
| 373 | if (global_trace.buffer) | 373 | if (global_trace.buffer) |
| 374 | ring_buffer_record_on(global_trace.buffer); | 374 | ring_buffer_record_off(global_trace.buffer); |
| 375 | /* | 375 | /* |
| 376 | * This flag is only looked at when buffers haven't been | 376 | * This flag is only looked at when buffers haven't been |
| 377 | * allocated yet. We don't really care about the race | 377 | * allocated yet. We don't really care about the race |
diff --git a/kernel/watchdog.c b/kernel/watchdog.c index e5e1d85b8c7c..4b1dfba70f7c 100644 --- a/kernel/watchdog.c +++ b/kernel/watchdog.c | |||
| @@ -372,6 +372,13 @@ static int watchdog(void *unused) | |||
| 372 | 372 | ||
| 373 | 373 | ||
| 374 | #ifdef CONFIG_HARDLOCKUP_DETECTOR | 374 | #ifdef CONFIG_HARDLOCKUP_DETECTOR |
| 375 | /* | ||
| 376 | * People like the simple clean cpu node info on boot. | ||
| 377 | * Reduce the watchdog noise by only printing messages | ||
| 378 | * that are different from what cpu0 displayed. | ||
| 379 | */ | ||
| 380 | static unsigned long cpu0_err; | ||
| 381 | |||
| 375 | static int watchdog_nmi_enable(int cpu) | 382 | static int watchdog_nmi_enable(int cpu) |
| 376 | { | 383 | { |
| 377 | struct perf_event_attr *wd_attr; | 384 | struct perf_event_attr *wd_attr; |
| @@ -390,11 +397,21 @@ static int watchdog_nmi_enable(int cpu) | |||
| 390 | 397 | ||
| 391 | /* Try to register using hardware perf events */ | 398 | /* Try to register using hardware perf events */ |
| 392 | event = perf_event_create_kernel_counter(wd_attr, cpu, NULL, watchdog_overflow_callback, NULL); | 399 | event = perf_event_create_kernel_counter(wd_attr, cpu, NULL, watchdog_overflow_callback, NULL); |
| 400 | |||
| 401 | /* save cpu0 error for future comparision */ | ||
| 402 | if (cpu == 0 && IS_ERR(event)) | ||
| 403 | cpu0_err = PTR_ERR(event); | ||
| 404 | |||
| 393 | if (!IS_ERR(event)) { | 405 | if (!IS_ERR(event)) { |
| 394 | pr_info("enabled, takes one hw-pmu counter.\n"); | 406 | /* only print for cpu0 or different than cpu0 */ |
| 407 | if (cpu == 0 || cpu0_err) | ||
| 408 | pr_info("enabled on all CPUs, permanently consumes one hw-PMU counter.\n"); | ||
| 395 | goto out_save; | 409 | goto out_save; |
| 396 | } | 410 | } |
| 397 | 411 | ||
| 412 | /* skip displaying the same error again */ | ||
| 413 | if (cpu > 0 && (PTR_ERR(event) == cpu0_err)) | ||
| 414 | return PTR_ERR(event); | ||
| 398 | 415 | ||
| 399 | /* vary the KERN level based on the returned errno */ | 416 | /* vary the KERN level based on the returned errno */ |
| 400 | if (PTR_ERR(event) == -EOPNOTSUPP) | 417 | if (PTR_ERR(event) == -EOPNOTSUPP) |
