On Mon, Jun 12, 2023 at 11:07:39AM +0200, Peter Zijlstra wrote: > @@ -224,17 +243,15 @@ static int event_function(void *info) > int ret = 0; > > lockdep_assert_irqs_disabled(); > + guard(perf_ctx_lock)(cpuctx, task_ctx); > > - perf_ctx_lock(cpuctx, task_ctx); > /* > * Since we do the IPI call without holding ctx->lock things can have > * changed, double check we hit the task we set out to hit. > */ > if (ctx->task) { > - if (ctx->task != current) { > - ret = -ESRCH; > - goto unlock; > - } > + if (ctx->task != current) > + return -ESRCH; > > /* > * We only use event_function_call() on established contexts, > @@ -254,8 +271,6 @@ static int event_function(void *info) > } > > efs->func(event, cpuctx, ctx, efs->data); > -unlock: > - perf_ctx_unlock(cpuctx, task_ctx); > > return ret; We can change this to a return 0; and get rid of the "ret" variable. regards, dan carpenter