* [PATCH 1/2] ftrace: add notrace to ARM sched_clock routines
@ 2009-05-01 22:30 Tim Bird
2009-05-01 23:03 ` Steven Rostedt
2009-05-01 23:37 ` Frederic Weisbecker
0 siblings, 2 replies; 5+ messages in thread
From: Tim Bird @ 2009-05-01 22:30 UTC (permalink / raw)
To: linux kernel, linux-arm-kernel, Steven Rostedt, Ingo Molnar,
Frederic Weisbecker, Uwe Kleine-König, Russell King
Add notrace attribute to sched_clock, to avoid
recursion with ftrace function_graph tracing.
Signed-off-by: Tim Bird <tim.bird@am.sony.com>
---
arch/arm/mach-mmp/time.c | 2 +-
arch/arm/mach-pxa/time.c | 2 +-
arch/arm/mach-realview/core.c | 2 +-
arch/arm/mach-sa1100/generic.c | 2 +-
arch/arm/mach-versatile/core.c | 2 +-
arch/arm/plat-omap/common.c | 4 ++--
6 files changed, 7 insertions(+), 7 deletions(-)
--- a/arch/arm/mach-mmp/time.c
+++ b/arch/arm/mach-mmp/time.c
@@ -72,7 +72,7 @@ static inline uint32_t timer_read(void)
return __raw_readl(TIMERS_VIRT_BASE + TMR_CVWR(0));
}
-unsigned long long sched_clock(void)
+unsigned long long notrace sched_clock(void)
{
unsigned long long v = cnt32_to_63(timer_read());
return (v * tcr2ns_scale) >> TCR2NS_SCALE_FACTOR;
--- a/arch/arm/mach-pxa/time.c
+++ b/arch/arm/mach-pxa/time.c
@@ -51,7 +51,7 @@ static void __init set_oscr2ns_scale(uns
oscr2ns_scale++;
}
-unsigned long long sched_clock(void)
+unsigned long long notrace sched_clock(void)
{
unsigned long long v = cnt32_to_63(OSCR);
return (v * oscr2ns_scale) >> OSCR2NS_SCALE_FACTOR;
--- a/arch/arm/mach-realview/core.c
+++ b/arch/arm/mach-realview/core.c
@@ -60,7 +60,7 @@ void __iomem *gic_cpu_base_addr;
* This is the RealView sched_clock implementation. This has
* a resolution of 41.7ns, and a maximum value of about 179s.
*/
-unsigned long long sched_clock(void)
+unsigned long long notrace sched_clock(void)
{
unsigned long long v;
--- a/arch/arm/mach-sa1100/generic.c
+++ b/arch/arm/mach-sa1100/generic.c
@@ -131,7 +131,7 @@ EXPORT_SYMBOL(cpufreq_get);
*
* ( * 1E9 / 3686400 => * 78125 / 288)
*/
-unsigned long long sched_clock(void)
+unsigned long long notrace sched_clock(void)
{
unsigned long long v = cnt32_to_63(OSCR);
--- a/arch/arm/mach-versatile/core.c
+++ b/arch/arm/mach-versatile/core.c
@@ -237,7 +237,7 @@ void __init versatile_map_io(void)
* long as there is always less than 89 seconds between successive
* calls to this function.
*/
-unsigned long long sched_clock(void)
+unsigned long long notrace sched_clock(void)
{
unsigned long long v = cnt32_to_63(readl(VERSATILE_REFCOUNTER));
--- a/arch/arm/plat-omap/common.c
+++ b/arch/arm/plat-omap/common.c
@@ -185,7 +185,7 @@ console_initcall(omap_add_serial_console
#include <linux/clocksource.h>
-static cycle_t omap_32k_read(struct clocksource *cs)
+static cycle_t notrace omap_32k_read(struct clocksource *cs)
{
return omap_readl(TIMER_32K_SYNCHRONIZED);
}
@@ -203,7 +203,7 @@ static struct clocksource clocksource_32
* Returns current time from boot in nsecs. It's OK for this to wrap
* around for now, as it's just a relative time stamp.
*/
-unsigned long long sched_clock(void)
+unsigned long long notrace sched_clock(void)
{
unsigned long long ret;
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 1/2] ftrace: add notrace to ARM sched_clock routines
2009-05-01 22:30 [PATCH 1/2] ftrace: add notrace to ARM sched_clock routines Tim Bird
@ 2009-05-01 23:03 ` Steven Rostedt
2009-05-01 23:37 ` Frederic Weisbecker
1 sibling, 0 replies; 5+ messages in thread
From: Steven Rostedt @ 2009-05-01 23:03 UTC (permalink / raw)
To: Tim Bird
Cc: linux kernel, linux-arm-kernel, Ingo Molnar, Frederic Weisbecker,
Uwe Kleine-König, Russell King
On Fri, 1 May 2009, Tim Bird wrote:
> Add notrace attribute to sched_clock, to avoid
> recursion with ftrace function_graph tracing.
If there's nothing in those files that you don't really want to trace
anyway, you could just disable the tracing from those files:
For example, in the Makefile add:
CFLAGS_REMOVE_time.o := -pg
-- Steve
>
> Signed-off-by: Tim Bird <tim.bird@am.sony.com>
> ---
> arch/arm/mach-mmp/time.c | 2 +-
> arch/arm/mach-pxa/time.c | 2 +-
> arch/arm/mach-realview/core.c | 2 +-
> arch/arm/mach-sa1100/generic.c | 2 +-
> arch/arm/mach-versatile/core.c | 2 +-
> arch/arm/plat-omap/common.c | 4 ++--
> 6 files changed, 7 insertions(+), 7 deletions(-)
>
> --- a/arch/arm/mach-mmp/time.c
> +++ b/arch/arm/mach-mmp/time.c
> @@ -72,7 +72,7 @@ static inline uint32_t timer_read(void)
> return __raw_readl(TIMERS_VIRT_BASE + TMR_CVWR(0));
> }
>
> -unsigned long long sched_clock(void)
> +unsigned long long notrace sched_clock(void)
> {
> unsigned long long v = cnt32_to_63(timer_read());
> return (v * tcr2ns_scale) >> TCR2NS_SCALE_FACTOR;
> --- a/arch/arm/mach-pxa/time.c
> +++ b/arch/arm/mach-pxa/time.c
> @@ -51,7 +51,7 @@ static void __init set_oscr2ns_scale(uns
> oscr2ns_scale++;
> }
>
> -unsigned long long sched_clock(void)
> +unsigned long long notrace sched_clock(void)
> {
> unsigned long long v = cnt32_to_63(OSCR);
> return (v * oscr2ns_scale) >> OSCR2NS_SCALE_FACTOR;
> --- a/arch/arm/mach-realview/core.c
> +++ b/arch/arm/mach-realview/core.c
> @@ -60,7 +60,7 @@ void __iomem *gic_cpu_base_addr;
> * This is the RealView sched_clock implementation. This has
> * a resolution of 41.7ns, and a maximum value of about 179s.
> */
> -unsigned long long sched_clock(void)
> +unsigned long long notrace sched_clock(void)
> {
> unsigned long long v;
>
> --- a/arch/arm/mach-sa1100/generic.c
> +++ b/arch/arm/mach-sa1100/generic.c
> @@ -131,7 +131,7 @@ EXPORT_SYMBOL(cpufreq_get);
> *
> * ( * 1E9 / 3686400 => * 78125 / 288)
> */
> -unsigned long long sched_clock(void)
> +unsigned long long notrace sched_clock(void)
> {
> unsigned long long v = cnt32_to_63(OSCR);
>
> --- a/arch/arm/mach-versatile/core.c
> +++ b/arch/arm/mach-versatile/core.c
> @@ -237,7 +237,7 @@ void __init versatile_map_io(void)
> * long as there is always less than 89 seconds between successive
> * calls to this function.
> */
> -unsigned long long sched_clock(void)
> +unsigned long long notrace sched_clock(void)
> {
> unsigned long long v = cnt32_to_63(readl(VERSATILE_REFCOUNTER));
>
> --- a/arch/arm/plat-omap/common.c
> +++ b/arch/arm/plat-omap/common.c
> @@ -185,7 +185,7 @@ console_initcall(omap_add_serial_console
>
> #include <linux/clocksource.h>
>
> -static cycle_t omap_32k_read(struct clocksource *cs)
> +static cycle_t notrace omap_32k_read(struct clocksource *cs)
> {
> return omap_readl(TIMER_32K_SYNCHRONIZED);
> }
> @@ -203,7 +203,7 @@ static struct clocksource clocksource_32
> * Returns current time from boot in nsecs. It's OK for this to wrap
> * around for now, as it's just a relative time stamp.
> */
> -unsigned long long sched_clock(void)
> +unsigned long long notrace sched_clock(void)
> {
> unsigned long long ret;
>
>
>
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 1/2] ftrace: add notrace to ARM sched_clock routines
2009-05-01 22:30 [PATCH 1/2] ftrace: add notrace to ARM sched_clock routines Tim Bird
2009-05-01 23:03 ` Steven Rostedt
@ 2009-05-01 23:37 ` Frederic Weisbecker
2009-05-01 23:43 ` Steven Rostedt
1 sibling, 1 reply; 5+ messages in thread
From: Frederic Weisbecker @ 2009-05-01 23:37 UTC (permalink / raw)
To: Tim Bird
Cc: linux kernel, linux-arm-kernel, Steven Rostedt, Ingo Molnar,
Uwe Kleine-König, Russell King
On Fri, May 01, 2009 at 03:30:05PM -0700, Tim Bird wrote:
> Add notrace attribute to sched_clock, to avoid
> recursion with ftrace function_graph tracing.
>
> Signed-off-by: Tim Bird <tim.bird@am.sony.com>
> ---
> arch/arm/mach-mmp/time.c | 2 +-
> arch/arm/mach-pxa/time.c | 2 +-
> arch/arm/mach-realview/core.c | 2 +-
> arch/arm/mach-sa1100/generic.c | 2 +-
> arch/arm/mach-versatile/core.c | 2 +-
> arch/arm/plat-omap/common.c | 4 ++--
> 6 files changed, 7 insertions(+), 7 deletions(-)
>
> --- a/arch/arm/mach-mmp/time.c
> +++ b/arch/arm/mach-mmp/time.c
> @@ -72,7 +72,7 @@ static inline uint32_t timer_read(void)
> return __raw_readl(TIMERS_VIRT_BASE + TMR_CVWR(0));
> }
>
> -unsigned long long sched_clock(void)
> +unsigned long long notrace sched_clock(void)
> {
> unsigned long long v = cnt32_to_63(timer_read());
> return (v * tcr2ns_scale) >> TCR2NS_SCALE_FACTOR;
> --- a/arch/arm/mach-pxa/time.c
> +++ b/arch/arm/mach-pxa/time.c
> @@ -51,7 +51,7 @@ static void __init set_oscr2ns_scale(uns
> oscr2ns_scale++;
> }
>
> -unsigned long long sched_clock(void)
> +unsigned long long notrace sched_clock(void)
> {
> unsigned long long v = cnt32_to_63(OSCR);
> return (v * oscr2ns_scale) >> OSCR2NS_SCALE_FACTOR;
> --- a/arch/arm/mach-realview/core.c
> +++ b/arch/arm/mach-realview/core.c
> @@ -60,7 +60,7 @@ void __iomem *gic_cpu_base_addr;
> * This is the RealView sched_clock implementation. This has
> * a resolution of 41.7ns, and a maximum value of about 179s.
> */
> -unsigned long long sched_clock(void)
> +unsigned long long notrace sched_clock(void)
> {
> unsigned long long v;
>
> --- a/arch/arm/mach-sa1100/generic.c
> +++ b/arch/arm/mach-sa1100/generic.c
> @@ -131,7 +131,7 @@ EXPORT_SYMBOL(cpufreq_get);
> *
> * ( * 1E9 / 3686400 => * 78125 / 288)
> */
> -unsigned long long sched_clock(void)
> +unsigned long long notrace sched_clock(void)
> {
> unsigned long long v = cnt32_to_63(OSCR);
>
> --- a/arch/arm/mach-versatile/core.c
> +++ b/arch/arm/mach-versatile/core.c
> @@ -237,7 +237,7 @@ void __init versatile_map_io(void)
> * long as there is always less than 89 seconds between successive
> * calls to this function.
> */
> -unsigned long long sched_clock(void)
> +unsigned long long notrace sched_clock(void)
> {
> unsigned long long v = cnt32_to_63(readl(VERSATILE_REFCOUNTER));
>
> --- a/arch/arm/plat-omap/common.c
> +++ b/arch/arm/plat-omap/common.c
> @@ -185,7 +185,7 @@ console_initcall(omap_add_serial_console
>
> #include <linux/clocksource.h>
>
> -static cycle_t omap_32k_read(struct clocksource *cs)
> +static cycle_t notrace omap_32k_read(struct clocksource *cs)
> {
> return omap_readl(TIMER_32K_SYNCHRONIZED);
> }
> @@ -203,7 +203,7 @@ static struct clocksource clocksource_32
> * Returns current time from boot in nsecs. It's OK for this to wrap
> * around for now, as it's just a relative time stamp.
> */
> -unsigned long long sched_clock(void)
> +unsigned long long notrace sched_clock(void)
> {
> unsigned long long ret;
I've looked into all of these functions and they don't seem to call
anything that could be traced. I could have missed something though
but it looks good.
Acked-by: Frederic Weisbecker <fweisbec@gmail.com>
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 1/2] ftrace: add notrace to ARM sched_clock routines
2009-05-01 23:37 ` Frederic Weisbecker
@ 2009-05-01 23:43 ` Steven Rostedt
2009-05-01 23:54 ` Frederic Weisbecker
0 siblings, 1 reply; 5+ messages in thread
From: Steven Rostedt @ 2009-05-01 23:43 UTC (permalink / raw)
To: Frederic Weisbecker
Cc: Tim Bird, linux kernel, linux-arm-kernel, Ingo Molnar,
Uwe Kleine-König, Russell King
On Sat, 2 May 2009, Frederic Weisbecker wrote:
> > }
> > @@ -203,7 +203,7 @@ static struct clocksource clocksource_32
> > * Returns current time from boot in nsecs. It's OK for this to wrap
> > * around for now, as it's just a relative time stamp.
> > */
> > -unsigned long long sched_clock(void)
> > +unsigned long long notrace sched_clock(void)
> > {
> > unsigned long long ret;
>
>
> I've looked into all of these functions and they don't seem to call
> anything that could be traced. I could have missed something though
> but it looks good.
I think the issue is that the tracing clock will call these functions, and
we will waste time recursing into them.
>
> Acked-by: Frederic Weisbecker <fweisbec@gmail.com>
Heck I'll add mine too ;-)
Acked-by: Steven Rostedt <rostedt@goodmis.org>
-- Steve
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 1/2] ftrace: add notrace to ARM sched_clock routines
2009-05-01 23:43 ` Steven Rostedt
@ 2009-05-01 23:54 ` Frederic Weisbecker
0 siblings, 0 replies; 5+ messages in thread
From: Frederic Weisbecker @ 2009-05-01 23:54 UTC (permalink / raw)
To: Steven Rostedt
Cc: Tim Bird, linux kernel, linux-arm-kernel, Ingo Molnar,
Uwe Kleine-König, Russell King
On Fri, May 01, 2009 at 07:43:50PM -0400, Steven Rostedt wrote:
>
> On Sat, 2 May 2009, Frederic Weisbecker wrote:
> > > }
> > > @@ -203,7 +203,7 @@ static struct clocksource clocksource_32
> > > * Returns current time from boot in nsecs. It's OK for this to wrap
> > > * around for now, as it's just a relative time stamp.
> > > */
> > > -unsigned long long sched_clock(void)
> > > +unsigned long long notrace sched_clock(void)
> > > {
> > > unsigned long long ret;
> >
> >
> > I've looked into all of these functions and they don't seem to call
> > anything that could be traced. I could have missed something though
> > but it looks good.
>
> I think the issue is that the tracing clock will call these functions, and
> we will waste time recursing into them.
Indeed, but I wanted to ensure that none of these sched_clock() were calling
any traceable function, or it would recurse inside the function graph
low level helpers which are not protected. Hence an endless stack overrun which
ends up on an immediate reboot :)
But it looks good.
> >
> > Acked-by: Frederic Weisbecker <fweisbec@gmail.com>
>
> Heck I'll add mine too ;-)
>
> Acked-by: Steven Rostedt <rostedt@goodmis.org>
>
> -- Steve
>
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2009-05-01 23:54 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-05-01 22:30 [PATCH 1/2] ftrace: add notrace to ARM sched_clock routines Tim Bird
2009-05-01 23:03 ` Steven Rostedt
2009-05-01 23:37 ` Frederic Weisbecker
2009-05-01 23:43 ` Steven Rostedt
2009-05-01 23:54 ` Frederic Weisbecker
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox