Home Home > GIT Browse
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJiri Slaby <jslaby@suse.cz>2019-07-14 11:33:41 +0200
committerJiri Slaby <jslaby@suse.cz>2019-07-14 11:33:54 +0200
commit793d57b65cffcd9d581fed352aaa620cc09e8eae (patch)
treecff0e83faefad556f20546d3af8c6190308fed1f
parente3d9a887f30020f603dba9bec632b9dd7b829f3a (diff)
coresight: tmc-etf: Do not call smp_processor_id from
preemptible (bnc#1012628).
-rw-r--r--patches.kernel.org/5.2.1-048-coresight-tmc-etf-Do-not-call-smp_processor_id-.patch73
-rw-r--r--series.conf1
2 files changed, 74 insertions, 0 deletions
diff --git a/patches.kernel.org/5.2.1-048-coresight-tmc-etf-Do-not-call-smp_processor_id-.patch b/patches.kernel.org/5.2.1-048-coresight-tmc-etf-Do-not-call-smp_processor_id-.patch
new file mode 100644
index 0000000000..22bcd61ee4
--- /dev/null
+++ b/patches.kernel.org/5.2.1-048-coresight-tmc-etf-Do-not-call-smp_processor_id-.patch
@@ -0,0 +1,73 @@
+From: Suzuki K Poulose <suzuki.poulose@arm.com>
+Date: Thu, 20 Jun 2019 16:12:35 -0600
+Subject: [PATCH] coresight: tmc-etf: Do not call smp_processor_id from
+ preemptible
+References: bnc#1012628
+Patch-mainline: 5.2.1
+Git-commit: 024c1fd9dbcc1d8a847f1311f999d35783921b7f
+
+commit 024c1fd9dbcc1d8a847f1311f999d35783921b7f upstream.
+
+During a perf session we try to allocate buffers on the "node" associated
+with the CPU the event is bound to. If it is not bound to a CPU, we
+use the current CPU node, using smp_processor_id(). However this is unsafe
+in a pre-emptible context and could generate the splats as below :
+
+ BUG: using smp_processor_id() in preemptible [00000000] code: perf/2544
+ caller is tmc_alloc_etf_buffer+0x5c/0x60
+ CPU: 2 PID: 2544 Comm: perf Not tainted 5.1.0-rc6-147786-g116841e #344
+ Hardware name: ARM LTD ARM Juno Development Platform/ARM Juno Development Platform, BIOS EDK II Feb 1 2019
+ Call trace:
+ dump_backtrace+0x0/0x150
+ show_stack+0x14/0x20
+ dump_stack+0x9c/0xc4
+ debug_smp_processor_id+0x10c/0x110
+ tmc_alloc_etf_buffer+0x5c/0x60
+ etm_setup_aux+0x1c4/0x230
+ rb_alloc_aux+0x1b8/0x2b8
+ perf_mmap+0x35c/0x478
+ mmap_region+0x34c/0x4f0
+ do_mmap+0x2d8/0x418
+ vm_mmap_pgoff+0xd0/0xf8
+ ksys_mmap_pgoff+0x88/0xf8
+ __arm64_sys_mmap+0x28/0x38
+ el0_svc_handler+0xd8/0x138
+ el0_svc+0x8/0xc
+
+Use NUMA_NO_NODE hint instead of using the current node for events
+not bound to CPUs.
+
+Fixes: 2e499bbc1a929ac ("coresight: tmc: implementing TMC-ETF AUX space API")
+Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
+Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com>
+Cc: stable <stable@vger.kernel.org> # 4.7+
+Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org>
+Link: https://lore.kernel.org/r/20190620221237.3536-4-mathieu.poirier@linaro.org
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Jiri Slaby <jslaby@suse.cz>
+---
+ drivers/hwtracing/coresight/coresight-tmc-etf.c | 6 ++----
+ 1 file changed, 2 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/hwtracing/coresight/coresight-tmc-etf.c b/drivers/hwtracing/coresight/coresight-tmc-etf.c
+index 2527b5d3b65e..8de109de171f 100644
+--- a/drivers/hwtracing/coresight/coresight-tmc-etf.c
++++ b/drivers/hwtracing/coresight/coresight-tmc-etf.c
+@@ -378,12 +378,10 @@ static void *tmc_alloc_etf_buffer(struct coresight_device *csdev,
+ struct perf_event *event, void **pages,
+ int nr_pages, bool overwrite)
+ {
+- int node, cpu = event->cpu;
++ int node;
+ struct cs_buffers *buf;
+
+- if (cpu == -1)
+- cpu = smp_processor_id();
+- node = cpu_to_node(cpu);
++ node = (event->cpu == -1) ? NUMA_NO_NODE : cpu_to_node(event->cpu);
+
+ /* Allocate memory structure for interaction with Perf */
+ buf = kzalloc_node(sizeof(struct cs_buffers), GFP_KERNEL, node);
+--
+2.22.0
+
diff --git a/series.conf b/series.conf
index 9c1023050c..57f15be870 100644
--- a/series.conf
+++ b/series.conf
@@ -74,6 +74,7 @@
patches.kernel.org/5.2.1-045-coresight-etb10-Do-not-call-smp_processor_id-fr.patch
patches.kernel.org/5.2.1-046-coresight-tmc-etr-Do-not-call-smp_processor_id-.patch
patches.kernel.org/5.2.1-047-coresight-tmc-etr-alloc_perf_buf-Do-not-call-sm.patch
+ patches.kernel.org/5.2.1-048-coresight-tmc-etf-Do-not-call-smp_processor_id-.patch
########################################################
# Build fixes that apply to the vanilla kernel too.