diff options
author | Michal Simek <monstr@monstr.eu> | 2010-04-16 09:50:13 +0200 |
---|---|---|
committer | Michal Simek <monstr@monstr.eu> | 2010-08-04 10:22:35 +0200 |
commit | 6f34b08f58f5097bb408e188e09cda75e61ee513 (patch) | |
tree | 141296e498aeffcf9f3fda777c93a7dc84dae8f5 /arch/microblaze/kernel/timer.c | |
parent | microblaze: Add stack unwinder (diff) | |
download | linux-6f34b08f58f5097bb408e188e09cda75e61ee513.tar.xz linux-6f34b08f58f5097bb408e188e09cda75e61ee513.zip |
microblaze: Improve ftrace time measuring
I had to comment sched_clock generic function because of broken toolchain.
It is fine grain timing.
Signed-off-by: Michal Simek <monstr@monstr.eu>
Diffstat (limited to 'arch/microblaze/kernel/timer.c')
-rw-r--r-- | arch/microblaze/kernel/timer.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/arch/microblaze/kernel/timer.c b/arch/microblaze/kernel/timer.c index ed61b2f17719..22e296eb871b 100644 --- a/arch/microblaze/kernel/timer.c +++ b/arch/microblaze/kernel/timer.c @@ -235,6 +235,12 @@ static int __init microblaze_clocksource_init(void) return 0; } +/* + * We have to protect accesses before timer initialization + * and return 0 for sched_clock function below. + */ +static int timer_initialized; + void __init time_init(void) { u32 irq, i = 0; @@ -289,4 +295,15 @@ void __init time_init(void) #endif microblaze_clocksource_init(); microblaze_clockevent_init(); + timer_initialized = 1; +} + +unsigned long long notrace sched_clock(void) +{ + if (timer_initialized) { + struct clocksource *cs = &clocksource_microblaze; + cycle_t cyc = cs->read(NULL); + return clocksource_cyc2ns(cyc, cs->mult, cs->shift); + } + return 0; } |