Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 55baa2f8 authored by Hendrik Brueckner's avatar Hendrik Brueckner Committed by Martin Schwidefsky
Browse files

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: default avatarHendrik Brueckner <brueckner@linux.vnet.ibm.com>
Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
parent 8c069ff4
Loading
Loading
Loading
Loading
+22 −4
Original line number Original line Diff line number Diff line
@@ -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;


	switch (event->attr.type) {
	case PERF_TYPE_RAW:
		if (event->attr.config != PERF_EVENT_CPUM_SF)
		if (event->attr.config != PERF_EVENT_CPUM_SF)
			return -ENOENT;
			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;
	}


	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)))