* [PATCH 1/2] coresight: Do not call smp_processor_id() from preemptible
@ 2019-05-03 16:04 Suzuki K Poulose
2019-05-03 16:04 ` [PATCH 2/2] coresight: alloc_perf_buf: Do not call smp_processor_id " Suzuki K Poulose
2019-05-08 16:39 ` [PATCH 1/2] coresight: Do not call smp_processor_id() " Mathieu Poirier
0 siblings, 2 replies; 4+ messages in thread
From: Suzuki K Poulose @ 2019-05-03 16:04 UTC (permalink / raw)
To: linux-arm-kernel
Cc: linux-kernel, coresight, mathieu.poirier, 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 793639f..74578bd 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_node_id() : 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] 4+ messages in thread
* [PATCH 2/2] coresight: alloc_perf_buf: Do not call smp_processor_id from preemptible
2019-05-03 16:04 [PATCH 1/2] coresight: Do not call smp_processor_id() from preemptible Suzuki K Poulose
@ 2019-05-03 16:04 ` Suzuki K Poulose
2019-05-08 16:39 ` [PATCH 1/2] coresight: Do not call smp_processor_id() " Mathieu Poirier
1 sibling, 0 replies; 4+ messages in thread
From: Suzuki K Poulose @ 2019-05-03 16:04 UTC (permalink / raw)
To: linux-arm-kernel
Cc: linux-kernel, coresight, mathieu.poirier, 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 74578bd..104df66 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_node_id() : 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] 4+ messages in thread
* Re: [PATCH 1/2] coresight: Do not call smp_processor_id() from preemptible
2019-05-03 16:04 [PATCH 1/2] coresight: Do not call smp_processor_id() from preemptible Suzuki K Poulose
2019-05-03 16:04 ` [PATCH 2/2] coresight: alloc_perf_buf: Do not call smp_processor_id " Suzuki K Poulose
@ 2019-05-08 16:39 ` Mathieu Poirier
2019-05-08 16:43 ` Suzuki K Poulose
1 sibling, 1 reply; 4+ messages in thread
From: Mathieu Poirier @ 2019-05-08 16:39 UTC (permalink / raw)
To: Suzuki K Poulose
Cc: linux-arm-kernel, Linux Kernel Mailing List, Coresight ML
Hi Suzuki,
On Fri, 3 May 2019 at 10:04, Suzuki K Poulose <suzuki.poulose@arm.com> 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 :
>
> 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
>
That is very interesting...
> 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 793639f..74578bd 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_node_id() : cpu_to_node(event->cpu);
Seems to me using numa_node_id() simply circumvent function
debug_smp_processor_id() and using get_cpu() and put_cpu() would be
more appropriate. But I'll trust the NUMA people have thought about
this long before me. Would you mind sending another revision that fix
the same code for ETB and ETF?
Thanks,
Mathieu
>
> etr_perf = kzalloc_node(sizeof(*etr_perf), GFP_KERNEL, node);
> if (!etr_perf)
> --
> 2.7.4
>
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH 1/2] coresight: Do not call smp_processor_id() from preemptible
2019-05-08 16:39 ` [PATCH 1/2] coresight: Do not call smp_processor_id() " Mathieu Poirier
@ 2019-05-08 16:43 ` Suzuki K Poulose
0 siblings, 0 replies; 4+ messages in thread
From: Suzuki K Poulose @ 2019-05-08 16:43 UTC (permalink / raw)
To: mathieu.poirier; +Cc: linux-arm-kernel, linux-kernel, coresight
On 08/05/2019 17:39, Mathieu Poirier wrote:
> Hi Suzuki,
>
> On Fri, 3 May 2019 at 10:04, Suzuki K Poulose <suzuki.poulose@arm.com> 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 :
>>
>> 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
>>
>
> That is very interesting...
>
>> 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 793639f..74578bd 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_node_id() : cpu_to_node(event->cpu);
>
> Seems to me using numa_node_id() simply circumvent function
> debug_smp_processor_id() and using get_cpu() and put_cpu() would be
> more appropriate. But I'll trust the NUMA people have thought about
> this long before me. Would you mind sending another revision that fix
> the same code for ETB and ETF?
Sure, will send it soon.
Suzuki
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2019-05-08 16:43 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-05-03 16:04 [PATCH 1/2] coresight: Do not call smp_processor_id() from preemptible Suzuki K Poulose
2019-05-03 16:04 ` [PATCH 2/2] coresight: alloc_perf_buf: Do not call smp_processor_id " Suzuki K Poulose
2019-05-08 16:39 ` [PATCH 1/2] coresight: Do not call smp_processor_id() " Mathieu Poirier
2019-05-08 16:43 ` 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).