aboutsummaryrefslogtreecommitdiffstats
path: root/arch/s390
diff options
context:
space:
mode:
Diffstat (limited to 'arch/s390')
-rw-r--r--arch/s390/kernel/perf_cpum_sf.c26
1 files changed, 22 insertions, 4 deletions
diff --git a/arch/s390/kernel/perf_cpum_sf.c b/arch/s390/kernel/perf_cpum_sf.c
index 141eca0917f4..52bf36ee91aa 100644
--- a/arch/s390/kernel/perf_cpum_sf.c
+++ b/arch/s390/kernel/perf_cpum_sf.c
@@ -468,11 +468,29 @@ static int cpumsf_pmu_event_init(struct perf_event *event)
468{ 468{
469 int err; 469 int err;
470 470
471 if (event->attr.type != PERF_TYPE_RAW) 471 /* No support for taken branch sampling */
472 return -ENOENT; 472 if (has_branch_stack(event))
473 473 return -EOPNOTSUPP;
474 if (event->attr.config != PERF_EVENT_CPUM_SF) 474
475 switch (event->attr.type) {
476 case PERF_TYPE_RAW:
477 if (event->attr.config != PERF_EVENT_CPUM_SF)
478 return -ENOENT;
479 break;
480 case PERF_TYPE_HARDWARE:
481 /* Support sampling of CPU cycles in addition to the
482 * counter facility. However, the counter facility
483 * is more precise and, hence, restrict this PMU to
484 * sampling events only.
485 */
486 if (event->attr.config != PERF_COUNT_HW_CPU_CYCLES)
487 return -ENOENT;
488 if (!is_sampling_event(event))
489 return -ENOENT;
490 break;
491 default:
475 return -ENOENT; 492 return -ENOENT;
493 }
476 494
477 if (event->cpu >= nr_cpumask_bits || 495 if (event->cpu >= nr_cpumask_bits ||
478 (event->cpu >= 0 && !cpu_online(event->cpu))) 496 (event->cpu >= 0 && !cpu_online(event->cpu)))