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

Commit 6d1acfd5 authored by Peter Zijlstra's avatar Peter Zijlstra Committed by Ingo Molnar
Browse files

perf: Optimize perf_output_*() by avoiding local_xchg()



Since the x86 XCHG ins implies LOCK, avoid the use by
using a sequence count instead.

Signed-off-by: default avatarPeter Zijlstra <a.p.zijlstra@chello.nl>
LKML-Reference: <new-submission>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent fa588151
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -804,6 +804,7 @@ struct perf_output_handle {
	struct perf_mmap_data		*data;
	unsigned long			head;
	unsigned long			offset;
	unsigned long			wakeup;
	int				nmi;
	int				sample;
};
+2 −1
Original line number Diff line number Diff line
@@ -2917,6 +2917,7 @@ static void perf_output_get_handle(struct perf_output_handle *handle)

	preempt_disable();
	local_inc(&data->nest);
	handle->wakeup = local_read(&data->wakeup);
}

static void perf_output_put_handle(struct perf_output_handle *handle)
@@ -2950,7 +2951,7 @@ static void perf_output_put_handle(struct perf_output_handle *handle)
		goto again;
	}

	if (local_xchg(&data->wakeup, 0))
	if (handle->wakeup != local_read(&data->wakeup))
		perf_output_wakeup(handle);

	preempt_enable();