Commit 09da9c81 authored by Peter Zijlstra's avatar Peter Zijlstra
Browse files

perf: Optimize get_recursion_context()

parent ce0f17fc
Loading
Loading
Loading
Loading
+6 −10
Original line number Diff line number Diff line
@@ -205,16 +205,12 @@ DEFINE_OUTPUT_COPY(__output_copy_user, arch_perf_out_copy_user)

static inline int get_recursion_context(int *recursion)
{
	int rctx;

	if (unlikely(in_nmi()))
		rctx = 3;
	else if (in_irq())
		rctx = 2;
	else if (in_serving_softirq())
		rctx = 1;
	else
		rctx = 0;
	unsigned int pc = preempt_count();
	unsigned char rctx = 0;

	rctx += !!(pc & (NMI_MASK));
	rctx += !!(pc & (NMI_MASK | HARDIRQ_MASK));
	rctx += !!(pc & (NMI_MASK | HARDIRQ_MASK | SOFTIRQ_OFFSET));

	if (recursion[rctx])
		return -1;