* [PATCH v3 0/4] coresight: Do not call smp_processor_id from preemptible contexts
@ 2019-05-30 16:54 Suzuki K Poulose
2019-05-30 16:54 ` [PATCH v3 1/4] coresight: tmc-etr: Do not call smp_processor_id() from preemptible Suzuki K Poulose
` (3 more replies)
0 siblings, 4 replies; 7+ messages in thread
From: Suzuki K Poulose @ 2019-05-30 16:54 UTC (permalink / raw)
To: linux-arm-kernel
Cc: linux-kernel, coresight, mathieu.poirier, robin.murphy, Suzuki K Poulose
We have a few places where we call smp_processor_id() from preemptible
contexts during the perf buffer handling. We do this to figure out the
numa node for the allocation in case the event is not CPU bound. Use
numa_node_id() instead in such cases to avoid a splat.
Changes since V2:
- Use NUMA_NO_NODE instead of numa_node_id() for event->cpu == -1. (Robin Murphy)
Suzuki K Poulose (4):
coresight: tmc-etr: Do not call smp_processor_id() from preemptible
coresight: tmc-etr: alloc_perf_buf: Do not call smp_processor_id from
preemptible
coresight: tmc-etf: Do not call smp_processor_id from preemptible
coresight: etb10: Do not call smp_processor_id from preemptible
drivers/hwtracing/coresight/coresight-etb10.c | 6 ++----
drivers/hwtracing/coresight/coresight-tmc-etf.c | 6 ++----
drivers/hwtracing/coresight/coresight-tmc-etr.c | 13 ++++---------
3 files changed, 8 insertions(+), 17 deletions(-)
--
2.7.4
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v3 1/4] coresight: tmc-etr: Do not call smp_processor_id() from preemptible
2019-05-30 16:54 [PATCH v3 0/4] coresight: Do not call smp_processor_id from preemptible contexts Suzuki K Poulose
@ 2019-05-30 16:54 ` Suzuki K Poulose
2019-06-03 19:29 ` Mathieu Poirier
2019-05-30 16:54 ` [PATCH v3 2/4] coresight: tmc-etr: alloc_perf_buf: Do not call smp_processor_id " Suzuki K Poulose
` (2 subsequent siblings)
3 siblings, 1 reply; 7+ messages in thread
From: Suzuki K Poulose @ 2019-05-30 16:54 UTC (permalink / raw)
To: linux-arm-kernel
Cc: linux-kernel, coresight, mathieu.poirier, robin.murphy, Suzuki K Poulose
Instead of using smp_processor_id() to figure out the node,
use the numa_node_id() for the current CPU node to avoid
splats like :
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
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>
---
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 ce0114a..7c81f63 100644
--- a/drivers/hwtracing/coresight/coresight-tmc-etr.c
+++ b/drivers/hwtracing/coresight/coresight-tmc-etr.c
@@ -1323,13 +1323,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.7.4
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v3 2/4] coresight: tmc-etr: alloc_perf_buf: Do not call smp_processor_id from preemptible
2019-05-30 16:54 [PATCH v3 0/4] coresight: Do not call smp_processor_id from preemptible contexts Suzuki K Poulose
2019-05-30 16:54 ` [PATCH v3 1/4] coresight: tmc-etr: Do not call smp_processor_id() from preemptible Suzuki K Poulose
@ 2019-05-30 16:54 ` Suzuki K Poulose
2019-05-30 16:54 ` [PATCH v3 3/4] coresight: tmc-etf: " Suzuki K Poulose
2019-05-30 16:54 ` [PATCH v3 4/4] coresight: etb10: " Suzuki K Poulose
3 siblings, 0 replies; 7+ messages in thread
From: Suzuki K Poulose @ 2019-05-30 16:54 UTC (permalink / raw)
To: linux-arm-kernel
Cc: linux-kernel, coresight, mathieu.poirier, robin.murphy, Suzuki K Poulose
We find the current CPU using smp_processor_id() if the event is not bound
to a CPU, to find the node for memory allocation. Use the safe
numa_node_id() instead, to avoid BUG().
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
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>
---
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 7c81f63..5d2bf6d 100644
--- a/drivers/hwtracing/coresight/coresight-tmc-etr.c
+++ b/drivers/hwtracing/coresight/coresight-tmc-etr.c
@@ -1184,14 +1184,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.7.4
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v3 3/4] coresight: tmc-etf: Do not call smp_processor_id from preemptible
2019-05-30 16:54 [PATCH v3 0/4] coresight: Do not call smp_processor_id from preemptible contexts Suzuki K Poulose
2019-05-30 16:54 ` [PATCH v3 1/4] coresight: tmc-etr: Do not call smp_processor_id() from preemptible Suzuki K Poulose
2019-05-30 16:54 ` [PATCH v3 2/4] coresight: tmc-etr: alloc_perf_buf: Do not call smp_processor_id " Suzuki K Poulose
@ 2019-05-30 16:54 ` Suzuki K Poulose
2019-05-30 16:54 ` [PATCH v3 4/4] coresight: etb10: " Suzuki K Poulose
3 siblings, 0 replies; 7+ messages in thread
From: Suzuki K Poulose @ 2019-05-30 16:54 UTC (permalink / raw)
To: linux-arm-kernel
Cc: linux-kernel, coresight, mathieu.poirier, robin.murphy, Suzuki K Poulose
We find the current CPU using smp_processor_id() if the event is not bound
to a CPU, to find the node for memory allocation. Use the safe
numa_node_id() instead, to avoid BUG(). e.g:
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
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>
---
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 b89e29c..23b7ff0 100644
--- a/drivers/hwtracing/coresight/coresight-tmc-etf.c
+++ b/drivers/hwtracing/coresight/coresight-tmc-etf.c
@@ -377,12 +377,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.7.4
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v3 4/4] coresight: etb10: Do not call smp_processor_id from preemptible
2019-05-30 16:54 [PATCH v3 0/4] coresight: Do not call smp_processor_id from preemptible contexts Suzuki K Poulose
` (2 preceding siblings ...)
2019-05-30 16:54 ` [PATCH v3 3/4] coresight: tmc-etf: " Suzuki K Poulose
@ 2019-05-30 16:54 ` Suzuki K Poulose
3 siblings, 0 replies; 7+ messages in thread
From: Suzuki K Poulose @ 2019-05-30 16:54 UTC (permalink / raw)
To: linux-arm-kernel
Cc: linux-kernel, coresight, mathieu.poirier, robin.murphy, Suzuki K Poulose
We find the current CPU using smp_processor_id() if the event is not bound
to a CPU, to find the node for memory allocation. Use the safe
numa_node_id() instead, to avoid BUG(). e.g:
BUG: using smp_processor_id() in preemptible [00000000] code: perf/2544
Fixes: 2997aa4063d97fdb39 ("coresight: etb10: implementing AUX API")
Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com>
---
drivers/hwtracing/coresight/coresight-etb10.c | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/drivers/hwtracing/coresight/coresight-etb10.c b/drivers/hwtracing/coresight/coresight-etb10.c
index d5b9ede..3810290 100644
--- a/drivers/hwtracing/coresight/coresight-etb10.c
+++ b/drivers/hwtracing/coresight/coresight-etb10.c
@@ -374,12 +374,10 @@ static void *etb_alloc_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);
buf = kzalloc_node(sizeof(struct cs_buffers), GFP_KERNEL, node);
if (!buf)
--
2.7.4
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH v3 1/4] coresight: tmc-etr: Do not call smp_processor_id() from preemptible
2019-05-30 16:54 ` [PATCH v3 1/4] coresight: tmc-etr: Do not call smp_processor_id() from preemptible Suzuki K Poulose
@ 2019-06-03 19:29 ` Mathieu Poirier
2019-06-06 12:59 ` Suzuki K Poulose
0 siblings, 1 reply; 7+ messages in thread
From: Mathieu Poirier @ 2019-06-03 19:29 UTC (permalink / raw)
To: Suzuki K Poulose; +Cc: linux-arm-kernel, linux-kernel, coresight, robin.murphy
On Thu, May 30, 2019 at 05:54:24PM +0100, Suzuki K Poulose wrote:
> Instead of using smp_processor_id() to figure out the node,
> use the numa_node_id() for the current CPU node to avoid
> splats like :
I was in the process of applying this set when I noticed the changelogs are
still referring to numa_node_id(), which is not part of the solution anymore.
Please address in all 4 patches.
Mathieu
>
> 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
>
> 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>
> ---
> 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 ce0114a..7c81f63 100644
> --- a/drivers/hwtracing/coresight/coresight-tmc-etr.c
> +++ b/drivers/hwtracing/coresight/coresight-tmc-etr.c
> @@ -1323,13 +1323,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.7.4
>
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v3 1/4] coresight: tmc-etr: Do not call smp_processor_id() from preemptible
2019-06-03 19:29 ` Mathieu Poirier
@ 2019-06-06 12:59 ` Suzuki K Poulose
0 siblings, 0 replies; 7+ messages in thread
From: Suzuki K Poulose @ 2019-06-06 12:59 UTC (permalink / raw)
To: mathieu.poirier; +Cc: linux-arm-kernel, linux-kernel, coresight, robin.murphy
On 03/06/2019 20:29, Mathieu Poirier wrote:
> On Thu, May 30, 2019 at 05:54:24PM +0100, Suzuki K Poulose wrote:
>> Instead of using smp_processor_id() to figure out the node,
>> use the numa_node_id() for the current CPU node to avoid
>> splats like :
>
> I was in the process of applying this set when I noticed the changelogs are
> still referring to numa_node_id(), which is not part of the solution anymore.
> Please address in all 4 patches.
>
Sorry about the last minute messup. I will resend it.
Cheers
Suzuki
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2019-06-06 12:59 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-05-30 16:54 [PATCH v3 0/4] coresight: Do not call smp_processor_id from preemptible contexts Suzuki K Poulose
2019-05-30 16:54 ` [PATCH v3 1/4] coresight: tmc-etr: Do not call smp_processor_id() from preemptible Suzuki K Poulose
2019-06-03 19:29 ` Mathieu Poirier
2019-06-06 12:59 ` Suzuki K Poulose
2019-05-30 16:54 ` [PATCH v3 2/4] coresight: tmc-etr: alloc_perf_buf: Do not call smp_processor_id " Suzuki K Poulose
2019-05-30 16:54 ` [PATCH v3 3/4] coresight: tmc-etf: " Suzuki K Poulose
2019-05-30 16:54 ` [PATCH v3 4/4] coresight: etb10: " Suzuki K Poulose
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).