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

Commit 3fb2b8dd authored by Peter Zijlstra's avatar Peter Zijlstra Committed by Ingo Molnar
Browse files

perf, x86, Do not user perf_disable from NMI context



Explicitly use intel_pmu_{disable,enable}_all() in intel_pmu_handle_irq()
to avoid the NMI race conditions in perf_{disable,enable}

Signed-off-by: default avatarPeter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Arnaldo Carvalho de Melo <acme@infradead.org>
Cc: paulus@samba.org
Cc: eranian@google.com
Cc: robert.richter@amd.com
Cc: fweisbec@gmail.com
LKML-Reference: <new-submission>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent 32975a4f
Loading
Loading
Loading
Loading
+5 −6
Original line number Diff line number Diff line
@@ -745,11 +745,11 @@ static int intel_pmu_handle_irq(struct pt_regs *regs)

	cpuc = &__get_cpu_var(cpu_hw_events);

	perf_disable();
	intel_pmu_disable_all();
	intel_pmu_drain_bts_buffer();
	status = intel_pmu_get_status();
	if (!status) {
		perf_enable();
		intel_pmu_enable_all();
		return 0;
	}

@@ -759,8 +759,7 @@ static int intel_pmu_handle_irq(struct pt_regs *regs)
		WARN_ONCE(1, "perfevents: irq loop stuck!\n");
		perf_event_print_debug();
		intel_pmu_reset();
		perf_enable();
		return 1;
		goto done;
	}

	inc_irq_stat(apic_perf_irqs);
@@ -790,8 +789,8 @@ static int intel_pmu_handle_irq(struct pt_regs *regs)
	if (status)
		goto again;

	perf_enable();

done:
	intel_pmu_enable_all();
	return 1;
}