Home Home > GIT Browse > stable
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
commite3d9a887f30020f603dba9bec632b9dd7b829f3a (patch)
treef58d039f6fc7b42fe8d808bc5874b2e713749bff
parent5e8caf9afa5339180d7acbb91405bb8bcad6120f (diff)
coresight: tmc-etr: alloc_perf_buf: Do not call smp_processor_id
from preemptible (bnc#1012628).
-rw-r--r--patches.kernel.org/5.2.1-047-coresight-tmc-etr-alloc_perf_buf-Do-not-call-sm.patch75
-rw-r--r--series.conf1
2 files changed, 76 insertions, 0 deletions
diff --git a/patches.kernel.org/5.2.1-047-coresight-tmc-etr-alloc_perf_buf-Do-not-call-sm.patch b/patches.kernel.org/5.2.1-047-coresight-tmc-etr-alloc_perf_buf-Do-not-call-sm.patch
new file mode 100644
index 0000000000..1d920f985b
--- /dev/null
+++ b/patches.kernel.org/5.2.1-047-coresight-tmc-etr-alloc_perf_buf-Do-not-call-sm.patch
@@ -0,0 +1,75 @@
+From: Suzuki K Poulose <suzuki.poulose@arm.com>
+Date: Thu, 20 Jun 2019 16:12:34 -0600
+Subject: [PATCH] coresight: tmc-etr: alloc_perf_buf: Do not call
+ smp_processor_id from preemptible
+References: bnc#1012628
+Patch-mainline: 5.2.1
+Git-commit: 3a8710392db2c70f74aed6f06b16e8bec0f05a35
+
+commit 3a8710392db2c70f74aed6f06b16e8bec0f05a35 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/1743
+ caller is tmc_alloc_etr_buffer+0x1bc/0x1f0
+ CPU: 1 PID: 1743 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_etr_buffer+0x1bc/0x1f0
+ 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: 22f429f19c4135d51e9 ("coresight: etm-perf: Add support for ETR backend")
+Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
+Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com>
+Cc: stable <stable@vger.kernel.org> # 4.20+
+Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org>
+Link: https://lore.kernel.org/r/20190620221237.3536-3-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-etr.c | 7 ++-----
+ 1 file changed, 2 insertions(+), 5 deletions(-)
+
+diff --git a/drivers/hwtracing/coresight/coresight-tmc-etr.c b/drivers/hwtracing/coresight/coresight-tmc-etr.c
+index c6a36897924f..9f293b9dce8c 100644
+--- a/drivers/hwtracing/coresight/coresight-tmc-etr.c
++++ b/drivers/hwtracing/coresight/coresight-tmc-etr.c
+@@ -1178,14 +1178,11 @@ static struct etr_buf *
+ alloc_etr_buf(struct tmc_drvdata *drvdata, struct perf_event *event,
+ int nr_pages, void **pages, bool snapshot)
+ {
+- int node, cpu = event->cpu;
++ int node;
+ struct etr_buf *etr_buf;
+ unsigned long size;
+
+- if (cpu == -1)
+- cpu = smp_processor_id();
+- node = cpu_to_node(cpu);
+-
++ node = (event->cpu == -1) ? NUMA_NO_NODE : cpu_to_node(event->cpu);
+ /*
+ * Try to match the perf ring buffer size if it is larger
+ * than the size requested via sysfs.
+--
+2.22.0
+
diff --git a/series.conf b/series.conf
index 84adc3f710..9c1023050c 100644
--- a/series.conf
+++ b/series.conf
@@ -73,6 +73,7 @@
patches.kernel.org/5.2.1-044-coresight-Potential-uninitialized-variable-in-p.patch
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
########################################################
# Build fixes that apply to the vanilla kernel too.