* [PATCH] arm64: add cpu_idle tracepoints to arch_cpu_idle
@ 2015-09-16 14:23 Jisheng Zhang
2015-09-16 14:47 ` Lorenzo Pieralisi
2015-10-19 17:47 ` Catalin Marinas
0 siblings, 2 replies; 7+ messages in thread
From: Jisheng Zhang @ 2015-09-16 14:23 UTC (permalink / raw)
To: linux-arm-kernel
Currently, if cpuidle is disabled or not supported, powertop reports
zero wakeups and zero events. This is due to the cpu_idle tracepoints
are missing.
This patch is to make cpu_idle tracepoints always available even if
cpuidle is disabled or not supported.
Signed-off-by: Jisheng Zhang <jszhang@marvell.com>
---
arch/arm64/kernel/process.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/arch/arm64/kernel/process.c b/arch/arm64/kernel/process.c
index 223b093..f75b540 100644
--- a/arch/arm64/kernel/process.c
+++ b/arch/arm64/kernel/process.c
@@ -44,6 +44,7 @@
#include <linux/hw_breakpoint.h>
#include <linux/personality.h>
#include <linux/notifier.h>
+#include <trace/events/power.h>
#include <asm/compat.h>
#include <asm/cacheflush.h>
@@ -75,8 +76,10 @@ void arch_cpu_idle(void)
* This should do all the clock switching and wait for interrupt
* tricks
*/
+ trace_cpu_idle_rcuidle(1, smp_processor_id());
cpu_do_idle();
local_irq_enable();
+ trace_cpu_idle_rcuidle(PWR_EVENT_EXIT, smp_processor_id());
}
#ifdef CONFIG_HOTPLUG_CPU
--
2.5.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH] arm64: add cpu_idle tracepoints to arch_cpu_idle
2015-09-16 14:23 [PATCH] arm64: add cpu_idle tracepoints to arch_cpu_idle Jisheng Zhang
@ 2015-09-16 14:47 ` Lorenzo Pieralisi
2015-09-16 14:53 ` Jisheng Zhang
2015-10-19 17:47 ` Catalin Marinas
1 sibling, 1 reply; 7+ messages in thread
From: Lorenzo Pieralisi @ 2015-09-16 14:47 UTC (permalink / raw)
To: linux-arm-kernel
On Wed, Sep 16, 2015 at 03:23:21PM +0100, Jisheng Zhang wrote:
> Currently, if cpuidle is disabled or not supported, powertop reports
> zero wakeups and zero events. This is due to the cpu_idle tracepoints
> are missing.
>
> This patch is to make cpu_idle tracepoints always available even if
> cpuidle is disabled or not supported.
>
> Signed-off-by: Jisheng Zhang <jszhang@marvell.com>
Is there a reason why this code cannot be moved to the generic idle loop ?
Thanks,
Lorenzo
> ---
> arch/arm64/kernel/process.c | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/arch/arm64/kernel/process.c b/arch/arm64/kernel/process.c
> index 223b093..f75b540 100644
> --- a/arch/arm64/kernel/process.c
> +++ b/arch/arm64/kernel/process.c
> @@ -44,6 +44,7 @@
> #include <linux/hw_breakpoint.h>
> #include <linux/personality.h>
> #include <linux/notifier.h>
> +#include <trace/events/power.h>
>
> #include <asm/compat.h>
> #include <asm/cacheflush.h>
> @@ -75,8 +76,10 @@ void arch_cpu_idle(void)
> * This should do all the clock switching and wait for interrupt
> * tricks
> */
> + trace_cpu_idle_rcuidle(1, smp_processor_id());
> cpu_do_idle();
> local_irq_enable();
> + trace_cpu_idle_rcuidle(PWR_EVENT_EXIT, smp_processor_id());
> }
>
> #ifdef CONFIG_HOTPLUG_CPU
> --
> 2.5.1
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo at vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/
>
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH] arm64: add cpu_idle tracepoints to arch_cpu_idle
2015-09-16 14:47 ` Lorenzo Pieralisi
@ 2015-09-16 14:53 ` Jisheng Zhang
2015-09-16 15:11 ` Jisheng Zhang
0 siblings, 1 reply; 7+ messages in thread
From: Jisheng Zhang @ 2015-09-16 14:53 UTC (permalink / raw)
To: linux-arm-kernel
Dear Lorenzo,
On Wed, 16 Sep 2015 15:47:38 +0100
Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> wrote:
> On Wed, Sep 16, 2015 at 03:23:21PM +0100, Jisheng Zhang wrote:
> > Currently, if cpuidle is disabled or not supported, powertop reports
> > zero wakeups and zero events. This is due to the cpu_idle tracepoints
> > are missing.
> >
> > This patch is to make cpu_idle tracepoints always available even if
> > cpuidle is disabled or not supported.
> >
> > Signed-off-by: Jisheng Zhang <jszhang@marvell.com>
>
> Is there a reason why this code cannot be moved to the generic idle loop ?
Do you mean the cpu_idle_loop() in kernel/sched/idle.c? To be honest, I
dunno. Maybe kernel experts can give some hints.
Thanks,
Jisheng
>
> Thanks,
> Lorenzo
>
> > ---
> > arch/arm64/kernel/process.c | 3 +++
> > 1 file changed, 3 insertions(+)
> >
> > diff --git a/arch/arm64/kernel/process.c b/arch/arm64/kernel/process.c
> > index 223b093..f75b540 100644
> > --- a/arch/arm64/kernel/process.c
> > +++ b/arch/arm64/kernel/process.c
> > @@ -44,6 +44,7 @@
> > #include <linux/hw_breakpoint.h>
> > #include <linux/personality.h>
> > #include <linux/notifier.h>
> > +#include <trace/events/power.h>
> >
> > #include <asm/compat.h>
> > #include <asm/cacheflush.h>
> > @@ -75,8 +76,10 @@ void arch_cpu_idle(void)
> > * This should do all the clock switching and wait for interrupt
> > * tricks
> > */
> > + trace_cpu_idle_rcuidle(1, smp_processor_id());
> > cpu_do_idle();
> > local_irq_enable();
> > + trace_cpu_idle_rcuidle(PWR_EVENT_EXIT, smp_processor_id());
> > }
> >
> > #ifdef CONFIG_HOTPLUG_CPU
> > --
> > 2.5.1
> >
> > --
> > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> > the body of a message to majordomo at vger.kernel.org
> > More majordomo info at http://vger.kernel.org/majordomo-info.html
> > Please read the FAQ at http://www.tux.org/lkml/
> >
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH] arm64: add cpu_idle tracepoints to arch_cpu_idle
2015-09-16 14:53 ` Jisheng Zhang
@ 2015-09-16 15:11 ` Jisheng Zhang
2015-09-16 16:16 ` Lorenzo Pieralisi
0 siblings, 1 reply; 7+ messages in thread
From: Jisheng Zhang @ 2015-09-16 15:11 UTC (permalink / raw)
To: linux-arm-kernel
Dear Lorenzo,
On Wed, 16 Sep 2015 22:53:12 +0800
Jisheng Zhang <jszhang@marvell.com> wrote:
> Dear Lorenzo,
>
> On Wed, 16 Sep 2015 15:47:38 +0100
> Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> wrote:
>
> > On Wed, Sep 16, 2015 at 03:23:21PM +0100, Jisheng Zhang wrote:
> > > Currently, if cpuidle is disabled or not supported, powertop reports
> > > zero wakeups and zero events. This is due to the cpu_idle tracepoints
> > > are missing.
> > >
> > > This patch is to make cpu_idle tracepoints always available even if
> > > cpuidle is disabled or not supported.
> > >
> > > Signed-off-by: Jisheng Zhang <jszhang@marvell.com>
> >
> > Is there a reason why this code cannot be moved to the generic idle loop ?
>
> Do you mean the cpu_idle_loop() in kernel/sched/idle.c? To be honest, I
Maybe I know now. we need to trace different idle level, for example:
WFI idle: trace_cpu_idle_rcuidle(1, ...);
deeper idle: trace_cpu_idle_rcuidle(2, ...);
Usually, the first argument of trace_cpu_idle_rcuidle() equals to the index
of the idle level.
so generic idle loop is not a good candidate.
> dunno. Maybe kernel experts can give some hints.
>
> Thanks,
> Jisheng
>
> >
> > Thanks,
> > Lorenzo
> >
> > > ---
> > > arch/arm64/kernel/process.c | 3 +++
> > > 1 file changed, 3 insertions(+)
> > >
> > > diff --git a/arch/arm64/kernel/process.c b/arch/arm64/kernel/process.c
> > > index 223b093..f75b540 100644
> > > --- a/arch/arm64/kernel/process.c
> > > +++ b/arch/arm64/kernel/process.c
> > > @@ -44,6 +44,7 @@
> > > #include <linux/hw_breakpoint.h>
> > > #include <linux/personality.h>
> > > #include <linux/notifier.h>
> > > +#include <trace/events/power.h>
> > >
> > > #include <asm/compat.h>
> > > #include <asm/cacheflush.h>
> > > @@ -75,8 +76,10 @@ void arch_cpu_idle(void)
> > > * This should do all the clock switching and wait for interrupt
> > > * tricks
> > > */
> > > + trace_cpu_idle_rcuidle(1, smp_processor_id());
> > > cpu_do_idle();
> > > local_irq_enable();
> > > + trace_cpu_idle_rcuidle(PWR_EVENT_EXIT, smp_processor_id());
> > > }
> > >
> > > #ifdef CONFIG_HOTPLUG_CPU
> > > --
> > > 2.5.1
> > >
> > > --
> > > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> > > the body of a message to majordomo at vger.kernel.org
> > > More majordomo info at http://vger.kernel.org/majordomo-info.html
> > > Please read the FAQ at http://www.tux.org/lkml/
> > >
>
>
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH] arm64: add cpu_idle tracepoints to arch_cpu_idle
2015-09-16 15:11 ` Jisheng Zhang
@ 2015-09-16 16:16 ` Lorenzo Pieralisi
2015-09-16 16:56 ` Jisheng Zhang
0 siblings, 1 reply; 7+ messages in thread
From: Lorenzo Pieralisi @ 2015-09-16 16:16 UTC (permalink / raw)
To: linux-arm-kernel
On Wed, Sep 16, 2015 at 04:11:05PM +0100, Jisheng Zhang wrote:
> Dear Lorenzo,
>
> On Wed, 16 Sep 2015 22:53:12 +0800
> Jisheng Zhang <jszhang@marvell.com> wrote:
>
> > Dear Lorenzo,
> >
> > On Wed, 16 Sep 2015 15:47:38 +0100
> > Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> wrote:
> >
> > > On Wed, Sep 16, 2015 at 03:23:21PM +0100, Jisheng Zhang wrote:
> > > > Currently, if cpuidle is disabled or not supported, powertop reports
> > > > zero wakeups and zero events. This is due to the cpu_idle tracepoints
> > > > are missing.
> > > >
> > > > This patch is to make cpu_idle tracepoints always available even if
> > > > cpuidle is disabled or not supported.
> > > >
> > > > Signed-off-by: Jisheng Zhang <jszhang@marvell.com>
> > >
> > > Is there a reason why this code cannot be moved to the generic idle loop ?
> >
> > Do you mean the cpu_idle_loop() in kernel/sched/idle.c? To be honest, I
>
> Maybe I know now. we need to trace different idle level, for example:
>
> WFI idle: trace_cpu_idle_rcuidle(1, ...);
>
> deeper idle: trace_cpu_idle_rcuidle(2, ...);
>
> Usually, the first argument of trace_cpu_idle_rcuidle() equals to the index
> of the idle level.
>
> so generic idle loop is not a good candidate.
You are adding a trace for tracing state 1 (ie default idle state),
called from arch_cpu_idle(), which is the default idle call when the
CPUidle framework is not available, so I suggested moving the traces
you add to arm/arm64 arch_cpu_idle() calls to kernel/sched/idle.c
(see default_idle_call()) instead of patching architecture code.
I think you can't do that because on x86 calling arch_cpu_idle()
does not always mean entering idle state index 1 if I read the code
correctly (in particular the mwait based implementation - mwait_idle()).
So never mind, patch is fine (on arm64, on arm you should be careful
because some arm_pm_idle implementations trace state 1 already -
see omap3_pm_idle and if you add traces to arch_cpu_idle you should
remove the traces from mach implementations).
Acked-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH] arm64: add cpu_idle tracepoints to arch_cpu_idle
2015-09-16 16:16 ` Lorenzo Pieralisi
@ 2015-09-16 16:56 ` Jisheng Zhang
0 siblings, 0 replies; 7+ messages in thread
From: Jisheng Zhang @ 2015-09-16 16:56 UTC (permalink / raw)
To: linux-arm-kernel
On Wed, 16 Sep 2015 17:16:05 +0100
Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> wrote:
> On Wed, Sep 16, 2015 at 04:11:05PM +0100, Jisheng Zhang wrote:
> > Dear Lorenzo,
> >
> > On Wed, 16 Sep 2015 22:53:12 +0800
> > Jisheng Zhang <jszhang@marvell.com> wrote:
> >
> > > Dear Lorenzo,
> > >
> > > On Wed, 16 Sep 2015 15:47:38 +0100
> > > Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> wrote:
> > >
> > > > On Wed, Sep 16, 2015 at 03:23:21PM +0100, Jisheng Zhang wrote:
> > > > > Currently, if cpuidle is disabled or not supported, powertop reports
> > > > > zero wakeups and zero events. This is due to the cpu_idle tracepoints
> > > > > are missing.
> > > > >
> > > > > This patch is to make cpu_idle tracepoints always available even if
> > > > > cpuidle is disabled or not supported.
> > > > >
> > > > > Signed-off-by: Jisheng Zhang <jszhang@marvell.com>
> > > >
> > > > Is there a reason why this code cannot be moved to the generic idle loop ?
> > >
> > > Do you mean the cpu_idle_loop() in kernel/sched/idle.c? To be honest, I
> >
> > Maybe I know now. we need to trace different idle level, for example:
> >
> > WFI idle: trace_cpu_idle_rcuidle(1, ...);
> >
> > deeper idle: trace_cpu_idle_rcuidle(2, ...);
> >
> > Usually, the first argument of trace_cpu_idle_rcuidle() equals to the index
> > of the idle level.
> >
> > so generic idle loop is not a good candidate.
>
> You are adding a trace for tracing state 1 (ie default idle state),
> called from arch_cpu_idle(), which is the default idle call when the
> CPUidle framework is not available, so I suggested moving the traces
> you add to arm/arm64 arch_cpu_idle() calls to kernel/sched/idle.c
> (see default_idle_call()) instead of patching architecture code.
>
> I think you can't do that because on x86 calling arch_cpu_idle()
> does not always mean entering idle state index 1 if I read the code
> correctly (in particular the mwait based implementation - mwait_idle()).
>
> So never mind, patch is fine (on arm64, on arm you should be careful
> because some arm_pm_idle implementations trace state 1 already -
> see omap3_pm_idle and if you add traces to arch_cpu_idle you should
> remove the traces from mach implementations).
OOPs, I was debugging the cascaded irq issues on Marvell BG4CT SoC. Yes, this
arm_pm_idle should be taken care on arm, I should ignore arm_pm_idle, I'll
cook v2 for arm platform.
Thanks a lot,
Jisheng
>
> Acked-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH] arm64: add cpu_idle tracepoints to arch_cpu_idle
2015-09-16 14:23 [PATCH] arm64: add cpu_idle tracepoints to arch_cpu_idle Jisheng Zhang
2015-09-16 14:47 ` Lorenzo Pieralisi
@ 2015-10-19 17:47 ` Catalin Marinas
1 sibling, 0 replies; 7+ messages in thread
From: Catalin Marinas @ 2015-10-19 17:47 UTC (permalink / raw)
To: linux-arm-kernel
On Wed, Sep 16, 2015 at 10:23:21PM +0800, Jisheng Zhang wrote:
> Currently, if cpuidle is disabled or not supported, powertop reports
> zero wakeups and zero events. This is due to the cpu_idle tracepoints
> are missing.
>
> This patch is to make cpu_idle tracepoints always available even if
> cpuidle is disabled or not supported.
>
> Signed-off-by: Jisheng Zhang <jszhang@marvell.com>
Queued for 4.4. Thanks.
--
Catalin
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2015-10-19 17:47 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-09-16 14:23 [PATCH] arm64: add cpu_idle tracepoints to arch_cpu_idle Jisheng Zhang
2015-09-16 14:47 ` Lorenzo Pieralisi
2015-09-16 14:53 ` Jisheng Zhang
2015-09-16 15:11 ` Jisheng Zhang
2015-09-16 16:16 ` Lorenzo Pieralisi
2015-09-16 16:56 ` Jisheng Zhang
2015-10-19 17:47 ` Catalin Marinas
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).