a70918fbbc
rebase on Ubuntu-4.13.0-32.35 the effective kernel tree which gets compiled after patches have been applied is functionally identical (modulo parts for architectures which we don't care about and Ubuntu build files)
73 lines
2.6 KiB
Diff
73 lines
2.6 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Peter Zijlstra <peterz@infradead.org>
|
|
Date: Sun, 14 Jan 2018 11:27:13 +0100
|
|
Subject: [PATCH] x86,perf: Disable intel_bts when PTI
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
commit 99a9dc98ba52267ce5e062b52de88ea1f1b2a7d8 upstream.
|
|
|
|
The intel_bts driver does not use the 'normal' BTS buffer which is exposed
|
|
through the cpu_entry_area but instead uses the memory allocated for the
|
|
perf AUX buffer.
|
|
|
|
This obviously comes apart when using PTI because then the kernel mapping;
|
|
which includes that AUX buffer memory; disappears. Fixing this requires to
|
|
expose a mapping which is visible in all context and that's not trivial.
|
|
|
|
As a quick fix disable this driver when PTI is enabled to prevent
|
|
malfunction.
|
|
|
|
Fixes: 385ce0ea4c07 ("x86/mm/pti: Add Kconfig")
|
|
Reported-by: Vince Weaver <vincent.weaver@maine.edu>
|
|
Reported-by: Robert Święcki <robert@swiecki.net>
|
|
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
|
|
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
|
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
|
|
Cc: greg@kroah.com
|
|
Cc: hughd@google.com
|
|
Cc: luto@amacapital.net
|
|
Cc: Vince Weaver <vince@deater.net>
|
|
Cc: torvalds@linux-foundation.org
|
|
Cc: stable@vger.kernel.org
|
|
Link: https://lkml.kernel.org/r/20180114102713.GB6166@worktop.programming.kicks-ass.net
|
|
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
|
Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
|
|
---
|
|
arch/x86/events/intel/bts.c | 18 ++++++++++++++++++
|
|
1 file changed, 18 insertions(+)
|
|
|
|
diff --git a/arch/x86/events/intel/bts.c b/arch/x86/events/intel/bts.c
|
|
index ddd8d3516bfc..9a62e6fce0e0 100644
|
|
--- a/arch/x86/events/intel/bts.c
|
|
+++ b/arch/x86/events/intel/bts.c
|
|
@@ -582,6 +582,24 @@ static __init int bts_init(void)
|
|
if (!boot_cpu_has(X86_FEATURE_DTES64) || !x86_pmu.bts)
|
|
return -ENODEV;
|
|
|
|
+ if (boot_cpu_has(X86_FEATURE_PTI)) {
|
|
+ /*
|
|
+ * BTS hardware writes through a virtual memory map we must
|
|
+ * either use the kernel physical map, or the user mapping of
|
|
+ * the AUX buffer.
|
|
+ *
|
|
+ * However, since this driver supports per-CPU and per-task inherit
|
|
+ * we cannot use the user mapping since it will not be availble
|
|
+ * if we're not running the owning process.
|
|
+ *
|
|
+ * With PTI we can't use the kernal map either, because its not
|
|
+ * there when we run userspace.
|
|
+ *
|
|
+ * For now, disable this driver when using PTI.
|
|
+ */
|
|
+ return -ENODEV;
|
|
+ }
|
|
+
|
|
bts_pmu.capabilities = PERF_PMU_CAP_AUX_NO_SG | PERF_PMU_CAP_ITRACE |
|
|
PERF_PMU_CAP_EXCLUSIVE;
|
|
bts_pmu.task_ctx_nr = perf_sw_context;
|
|
--
|
|
2.14.2
|
|
|