On Thu, 16 Jul 2009 17:14:07 -0700 john stultz <johnstul@xxxxxxxxxx> wrote: > This patch converts alpha to use GENERIC_TIME via the arch_getoffset() > infrastructure, reducing the amount of arch specific code we need to > maintain. > > I suspect the alpha arch could even be further improved to provide and > rpcc() based clocksource, but not having the hardware, I don't feel > comfortable attempting the more complicated conversion (but I'd be glad > to help if anyone else is interested). > > This patch applies on top of Linus' current -git tree (2.6.31-rc3). > > I've taken my best swing at converting this, but I'm not 100% confident > I got it right. My cross-compiler is now too old, so I couldn't check if > it builds. So any assistance from arch maintainers or testers to get > this merged would be great. > It breaks the build: cc1: warnings being treated as errors arch/alpha/kernel/time.c: In function 'arch_gettimeoffset': arch/alpha/kernel/time.c:413: warning: unused variable 'partial_tick' arch/alpha/kernel/time.c:413: warning: unused variable 'delta_cycles' make[1]: *** [arch/alpha/kernel/time.o] Error 1 u32 arch_gettimeoffset(void) { unsigned long delta_cycles, delta_usec, partial_tick; #ifdef CONFIG_SMP /* Until and unless we figure out how to get cpu cycle counters in sync and keep them there, we can't use the rpcc tricks. */ delta_usec = 0; #else delta_cycles = rpcc() - state.last_time; partial_tick = state.partial_tick; /* * usec = cycles * ticks_per_cycle * 2**48 * 1e6 / (2**48 * ticks) * = cycles * (s_t_p_c) * 1e6 / (2**48 * ticks) * = cycles * (s_t_p_c) * 15625 / (2**42 * ticks) * * which, given a 600MHz cycle and a 1024Hz tick, has a * dynamic range of about 1.7e17, which is less than the * 1.8e19 in an unsigned long, so we are safe from overflow. * * Round, but with .5 up always, since .5 to even is harder * with no clear gain. */ delta_usec = (delta_cycles * state.scaled_ticks_per_cycle + partial_tick) * 15625; delta_usec = ((delta_usec / ((1UL << (FIX_SHIFT-6-1)) * HZ)) + 1) / 2; #endif return delta_usec * 1000; } I converted the CONFIG_SMP=y case into a plain old `return 0;'. Which means that we could turn the CONFIG_SMP=y case into a static inline, really. From: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> cc1: warnings being treated as errors arch/alpha/kernel/time.c: In function 'arch_gettimeoffset': arch/alpha/kernel/time.c:413: warning: unused variable 'partial_tick' arch/alpha/kernel/time.c:413: warning: unused variable 'delta_cycles' make[1]: *** [arch/alpha/kernel/time.o] Error 1 Cc: Ivan Kokshaysky <ink@xxxxxxxxxxxxxxxxxxxx> Cc: John Stultz <johnstul@xxxxxxxxxx> Cc: Richard Henderson <rth@xxxxxxxxxxx> Cc: john stultz <johnstul@xxxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- arch/alpha/kernel/time.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) --- a/arch/alpha/kernel/time.c~alpha-convert-to-use-arch_gettimeoffset-fix +++ a/arch/alpha/kernel/time.c @@ -410,13 +410,13 @@ time_init(void) */ u32 arch_gettimeoffset(void) { - unsigned long delta_cycles, delta_usec, partial_tick; - #ifdef CONFIG_SMP /* Until and unless we figure out how to get cpu cycle counters in sync and keep them there, we can't use the rpcc tricks. */ - delta_usec = 0; + return 0; #else + unsigned long delta_cycles, delta_usec, partial_tick; + delta_cycles = rpcc() - state.last_time; partial_tick = state.partial_tick; /* @@ -435,9 +435,8 @@ u32 arch_gettimeoffset(void) delta_usec = (delta_cycles * state.scaled_ticks_per_cycle + partial_tick) * 15625; delta_usec = ((delta_usec / ((1UL << (FIX_SHIFT-6-1)) * HZ)) + 1) / 2; -#endif - return delta_usec * 1000; +#endif } /* _ -- To unsubscribe from this list: send the line "unsubscribe linux-alpha" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html