diff options
Diffstat (limited to 'arch/s390')
-rw-r--r-- | arch/s390/kernel/perf_cpum_sf.c | 26 |
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))) |