s390/perf: Improve PMU selection for PERF_COUNT_HW_CPU_CYCLES events
The cpum_cf (counter facility) PMU does not support sampling events. With cpum_sf (sampling facility), a PMU for sampling CPU cycles is available. Make cpum_sf the "default" PMU for PERF_COUNT_HW_CPU_CYCLES sampling events but use the more precise cpum_cf PMU for non-sampling events. Signed-off-by: Hendrik Brueckner <brueckner@linux.vnet.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:
parent
8c069ff4bd
commit
55baa2f831
1 changed files with 21 additions and 3 deletions
|
@ -468,11 +468,29 @@ static int cpumsf_pmu_event_init(struct perf_event *event)
|
||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
if (event->attr.type != PERF_TYPE_RAW)
|
/* No support for taken branch sampling */
|
||||||
return -ENOENT;
|
if (has_branch_stack(event))
|
||||||
|
return -EOPNOTSUPP;
|
||||||
|
|
||||||
if (event->attr.config != PERF_EVENT_CPUM_SF)
|
switch (event->attr.type) {
|
||||||
|
case PERF_TYPE_RAW:
|
||||||
|
if (event->attr.config != PERF_EVENT_CPUM_SF)
|
||||||
|
return -ENOENT;
|
||||||
|
break;
|
||||||
|
case PERF_TYPE_HARDWARE:
|
||||||
|
/* Support sampling of CPU cycles in addition to the
|
||||||
|
* counter facility. However, the counter facility
|
||||||
|
* is more precise and, hence, restrict this PMU to
|
||||||
|
* sampling events only.
|
||||||
|
*/
|
||||||
|
if (event->attr.config != PERF_COUNT_HW_CPU_CYCLES)
|
||||||
|
return -ENOENT;
|
||||||
|
if (!is_sampling_event(event))
|
||||||
|
return -ENOENT;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
return -ENOENT;
|
return -ENOENT;
|
||||||
|
}
|
||||||
|
|
||||||
if (event->cpu >= nr_cpumask_bits ||
|
if (event->cpu >= nr_cpumask_bits ||
|
||||||
(event->cpu >= 0 && !cpu_online(event->cpu)))
|
(event->cpu >= 0 && !cpu_online(event->cpu)))
|
||||||
|
|
Loading…
Reference in a new issue