Re: [PATCH v3 6/6] stm class: ftrace: use different channel accroding to CPU

2020-09-22 Thread Tingwei Zhang
On Fri, Sep 18, 2020 at 08:45:52PM +0800, Alexander Shishkin wrote:
> Tingwei Zhang  writes:
> 
> > @@ -63,6 +65,7 @@ static int __init stm_ftrace_init(void)
> >  {
> > int ret;
> >  
> > +   stm_ftrace.data.nr_chans = num_possible_cpus();
> 
> Not a problem with this patch necesarily, but this made me realize that
> .nr_chans may be larger than:
> 
>  (1) what the policy permits,
>  (2) what the stm device can handle.
> 
> While (1) the user can fix in the policy, they won't be able to fix (2),
> in which case they won't be able to use stm_ftrace at all. I'm thinking
> if a link-time callback would be good enough.
>

Hi Alex,

I'm not sure if I understand this correct. If the nr_chans requested by
stm_ftrace is larger than policy permits or stm device can handle,
stm_assign_first_policy() returns with error so stm_source_link_add()
will fail. User would notice that when link happens.  There's not much
we can do if resource is not enough.
 
> Another thing is that .nr_chans needs to be a power of 2 at the moment.
> 
I'll change to below.
stm_ftrace.data.nr_chans = roundup_pow_of_two(num_possible_cpus());
> Regards,
> --
> Alex
> 
> ___
> linux-arm-kernel mailing list
> linux-arm-ker...@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel


Re: [PATCH v3 6/6] stm class: ftrace: use different channel accroding to CPU

2020-09-18 Thread Alexander Shishkin
Tingwei Zhang  writes:

> @@ -63,6 +65,7 @@ static int __init stm_ftrace_init(void)
>  {
>   int ret;
>  
> + stm_ftrace.data.nr_chans = num_possible_cpus();

Not a problem with this patch necesarily, but this made me realize that
.nr_chans may be larger than:

 (1) what the policy permits,
 (2) what the stm device can handle.

While (1) the user can fix in the policy, they won't be able to fix (2),
in which case they won't be able to use stm_ftrace at all. I'm thinking
if a link-time callback would be good enough.

Another thing is that .nr_chans needs to be a power of 2 at the moment.

Regards,
--
Alex


[PATCH v3 6/6] stm class: ftrace: use different channel accroding to CPU

2020-09-02 Thread Tingwei Zhang
To avoid mixup of packets from differnt ftrace packets simultaneously,
use different channel for packets from different CPU.

Signed-off-by: Tingwei Zhang 
Reviewed-by: Steven Rostedt (VMware) 
---
 drivers/hwtracing/stm/ftrace.c | 5 -
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/drivers/hwtracing/stm/ftrace.c b/drivers/hwtracing/stm/ftrace.c
index c694a6e692d1..ebf29489919c 100644
--- a/drivers/hwtracing/stm/ftrace.c
+++ b/drivers/hwtracing/stm/ftrace.c
@@ -37,8 +37,10 @@ static void notrace
 stm_ftrace_write(struct trace_export *export, const void *buf, unsigned int 
len)
 {
struct stm_ftrace *stm = container_of(export, struct stm_ftrace, 
ftrace);
+   /* This is called from trace system with preemption disabled */
+   unsigned int cpu = smp_processor_id();
 
-   stm_source_write(>data, STM_FTRACE_CHAN, buf, len);
+   stm_source_write(>data, STM_FTRACE_CHAN + cpu, buf, len);
 }
 
 static int stm_ftrace_link(struct stm_source_data *data)
@@ -63,6 +65,7 @@ static int __init stm_ftrace_init(void)
 {
int ret;
 
+   stm_ftrace.data.nr_chans = num_possible_cpus();
ret = stm_source_register_device(NULL, _ftrace.data);
if (ret)
pr_err("Failed to register stm_source - ftrace.\n");
-- 
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
a Linux Foundation Collaborative Project



[PATCH v3 6/6] stm class: ftrace: use different channel accroding to CPU

2020-08-12 Thread Tingwei Zhang
To avoid mixup of packets from differnt ftrace packets simultaneously,
use different channel for packets from different CPU.

Signed-off-by: Tingwei Zhang 
Reviewed-by: Steven Rostedt (VMware) 
---
 drivers/hwtracing/stm/ftrace.c | 5 -
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/drivers/hwtracing/stm/ftrace.c b/drivers/hwtracing/stm/ftrace.c
index c694a6e692d1..ebf29489919c 100644
--- a/drivers/hwtracing/stm/ftrace.c
+++ b/drivers/hwtracing/stm/ftrace.c
@@ -37,8 +37,10 @@ static void notrace
 stm_ftrace_write(struct trace_export *export, const void *buf, unsigned int 
len)
 {
struct stm_ftrace *stm = container_of(export, struct stm_ftrace, 
ftrace);
+   /* This is called from trace system with preemption disabled */
+   unsigned int cpu = smp_processor_id();
 
-   stm_source_write(>data, STM_FTRACE_CHAN, buf, len);
+   stm_source_write(>data, STM_FTRACE_CHAN + cpu, buf, len);
 }
 
 static int stm_ftrace_link(struct stm_source_data *data)
@@ -63,6 +65,7 @@ static int __init stm_ftrace_init(void)
 {
int ret;
 
+   stm_ftrace.data.nr_chans = num_possible_cpus();
ret = stm_source_register_device(NULL, _ftrace.data);
if (ret)
pr_err("Failed to register stm_source - ftrace.\n");
-- 
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
a Linux Foundation Collaborative Project



[PATCH v3 6/6] stm class: ftrace: use different channel accroding to CPU

2020-08-10 Thread Tingwei Zhang
To avoid mixup of packets from differnt ftrace packets simultaneously,
use different channel for packets from different CPU.

Signed-off-by: Tingwei Zhang 
Reviewed-by: Steven Rostedt (VMware) 
---
 drivers/hwtracing/stm/ftrace.c | 5 -
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/drivers/hwtracing/stm/ftrace.c b/drivers/hwtracing/stm/ftrace.c
index c694a6e692d1..ebf29489919c 100644
--- a/drivers/hwtracing/stm/ftrace.c
+++ b/drivers/hwtracing/stm/ftrace.c
@@ -37,8 +37,10 @@ static void notrace
 stm_ftrace_write(struct trace_export *export, const void *buf, unsigned int 
len)
 {
struct stm_ftrace *stm = container_of(export, struct stm_ftrace, 
ftrace);
+   /* This is called from trace system with preemption disabled */
+   unsigned int cpu = smp_processor_id();
 
-   stm_source_write(>data, STM_FTRACE_CHAN, buf, len);
+   stm_source_write(>data, STM_FTRACE_CHAN + cpu, buf, len);
 }
 
 static int stm_ftrace_link(struct stm_source_data *data)
@@ -63,6 +65,7 @@ static int __init stm_ftrace_init(void)
 {
int ret;
 
+   stm_ftrace.data.nr_chans = num_possible_cpus();
ret = stm_source_register_device(NULL, _ftrace.data);
if (ret)
pr_err("Failed to register stm_source - ftrace.\n");
-- 
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
a Linux Foundation Collaborative Project



[PATCH v3 6/6] stm class: ftrace: use different channel accroding to CPU

2020-07-27 Thread Tingwei Zhang
To avoid mixup of packets from differnt ftrace packets simultaneously,
use different channel for packets from different CPU.

Signed-off-by: Tingwei Zhang 
Reviewed-by: Steven Rostedt (VMware) 
---
 drivers/hwtracing/stm/ftrace.c | 5 -
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/drivers/hwtracing/stm/ftrace.c b/drivers/hwtracing/stm/ftrace.c
index c694a6e692d1..ebf29489919c 100644
--- a/drivers/hwtracing/stm/ftrace.c
+++ b/drivers/hwtracing/stm/ftrace.c
@@ -37,8 +37,10 @@ static void notrace
 stm_ftrace_write(struct trace_export *export, const void *buf, unsigned int 
len)
 {
struct stm_ftrace *stm = container_of(export, struct stm_ftrace, 
ftrace);
+   /* This is called from trace system with preemption disabled */
+   unsigned int cpu = smp_processor_id();
 
-   stm_source_write(>data, STM_FTRACE_CHAN, buf, len);
+   stm_source_write(>data, STM_FTRACE_CHAN + cpu, buf, len);
 }
 
 static int stm_ftrace_link(struct stm_source_data *data)
@@ -63,6 +65,7 @@ static int __init stm_ftrace_init(void)
 {
int ret;
 
+   stm_ftrace.data.nr_chans = num_possible_cpus();
ret = stm_source_register_device(NULL, _ftrace.data);
if (ret)
pr_err("Failed to register stm_source - ftrace.\n");
-- 
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
a Linux Foundation Collaborative Project