Re: [PATCH v2 06/54] perf: Support get/put passthrough PMU interfaces

Peter Zijlstra
2024-05-07T08:35:57Z

On Mon, May 06, 2024 at 05:29:31AM +0000, Mingwei Zhang wrote:

> +int perf_get_mediated_pmu(void)
> +{
> + int ret = 0;
> +
> + mutex_lock(&perf_mediated_pmu_mutex);
> + if (refcount_inc_not_zero(&nr_mediated_pmu_vms))
> + goto end;
> +
> + if (atomic_read(&nr_include_guest_events)) {
> + ret = -EBUSY;
> + goto end;
> + }
> + refcount_set(&nr_mediated_pmu_vms, 1);
> +end:
> + mutex_unlock(&perf_mediated_pmu_mutex);
> + return ret;
> +}
> +EXPORT_SYMBOL_GPL(perf_get_mediated_pmu);

Blergh... it seems I never got my perf guard patches merged :/, but
could we please write this like:

int perf_get_mediated_pmu(void)
{
guard(mutex)(&perf_mediated_pmu_mutex);
if (refcount_inc_not_zero(&nr_mediated_pmu_vms))
return 0;

if (atomic_read(&nr_include_guest_events))
return -EBUSY;

refcount_set(&nr_mediated_pmu_vms, 1);
return 0;
}

And avoid adding more unlock goto thingies?