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:53 +0200
commit5e8caf9afa5339180d7acbb91405bb8bcad6120f (patch)
treeb2873b07735ed8de8fdf4abe83a56302b0fc565c
parentbca7ba64fb9f2fc6c979b414bea88e3ab2fe071c (diff)
coresight: tmc-etr: Do not call smp_processor_id() from
preemptible (bnc#1012628).
-rw-r--r--patches.kernel.org/5.2.1-046-coresight-tmc-etr-Do-not-call-smp_processor_id-.patch75
-rw-r--r--series.conf1
2 files changed, 76 insertions, 0 deletions
diff --git a/patches.kernel.org/5.2.1-046-coresight-tmc-etr-Do-not-call-smp_processor_id-.patch b/patches.kernel.org/5.2.1-046-coresight-tmc-etr-Do-not-call-smp_processor_id-.patch
new file mode 100644
index 0000000000..7bbbf80cac
--- /dev/null
+++ b/patches.kernel.org/5.2.1-046-coresight-tmc-etr-Do-not-call-smp_processor_id-.patch
@@ -0,0 +1,75 @@
+From: Suzuki K Poulose <suzuki.poulose@arm.com>
+Date: Thu, 20 Jun 2019 16:12:33 -0600
+Subject: [PATCH] coresight: tmc-etr: Do not call smp_processor_id() from
+ preemptible
+References: bnc#1012628
+Patch-mainline: 5.2.1
+Git-commit: 3ff44563dbb02456a33f2a42000f04db4ef19a8f
+
+commit 3ff44563dbb02456a33f2a42000f04db4ef19a8f upstream.
+
+During a perf session we try to allocate buffers on the "node" associated
+with the CPU the event is bound to. If it's 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 alloc_etr_buf.isra.6+0x80/0xa0
+ 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
+ alloc_etr_buf.isra.6+0x80/0xa0
+ tmc_alloc_etr_buffer+0x12c/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: 855ab61c16bf70b646 ("coresight: tmc-etr: Refactor function tmc_etr_setup_perf_buf()")
+Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
+Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com>
+Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org>
+Cc: stable <stable@vger.kernel.org>
+Link: https://lore.kernel.org/r/20190620221237.3536-2-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 | 6 ++----
+ 1 file changed, 2 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/hwtracing/coresight/coresight-tmc-etr.c b/drivers/hwtracing/coresight/coresight-tmc-etr.c
+index df6e4b0b84e9..c6a36897924f 100644
+--- a/drivers/hwtracing/coresight/coresight-tmc-etr.c
++++ b/drivers/hwtracing/coresight/coresight-tmc-etr.c
+@@ -1317,13 +1317,11 @@ static struct etr_perf_buffer *
+ tmc_etr_setup_perf_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;
+ struct etr_perf_buffer *etr_perf;
+
+- if (cpu == -1)
+- cpu = smp_processor_id();
+- node = cpu_to_node(cpu);
++ node = (event->cpu == -1) ? NUMA_NO_NODE : cpu_to_node(event->cpu);
+
+ etr_perf = kzalloc_node(sizeof(*etr_perf), GFP_KERNEL, node);
+ if (!etr_perf)
+--
+2.22.0
+
diff --git a/series.conf b/series.conf
index 69e31320ae..84adc3f710 100644
--- a/series.conf
+++ b/series.conf
@@ -72,6 +72,7 @@
patches.kernel.org/5.2.1-043-iio-adc-stm32-adc-add-missing-vdda-supply.patch
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
########################################################
# Build fixes that apply to the vanilla kernel too.