tsc-sync.c is now available to test if TSC is synchronized across cores. Given I currently don't have access to a MIPS board myself, help trying to use it when CPUs go online and testing the implementation would be welcome. Signed-off-by: Mathieu Desnoyers CC: Ralf Baechle CC: Peter Zijlstra --- arch/mips/include/asm/timex.h | 26 ++++++++++++++++++++++++++ arch/mips/kernel/smp.c | 1 + 2 files changed, 27 insertions(+) Index: linux.trees.git/arch/mips/kernel/smp.c =================================================================== --- linux.trees.git.orig/arch/mips/kernel/smp.c 2008-11-12 18:15:47.000000000 -0500 +++ linux.trees.git/arch/mips/kernel/smp.c 2008-11-26 06:57:38.000000000 -0500 @@ -178,6 +178,7 @@ void __init smp_cpus_done(unsigned int m { mp_ops->cpus_done(); synchronise_count_master(); + test_tsc_synchronization(); } /* called from main before smp_init() */ Index: linux.trees.git/arch/mips/include/asm/timex.h =================================================================== --- linux.trees.git.orig/arch/mips/include/asm/timex.h 2008-11-26 06:49:34.000000000 -0500 +++ linux.trees.git/arch/mips/include/asm/timex.h 2008-11-26 06:57:38.000000000 -0500 @@ -58,13 +58,39 @@ static inline cycles_t get_cycles_rate(v { return mips_hpt_frequency; } + +extern int test_tsc_synchronization(void); +extern int _tsc_is_sync; +static inline int tsc_is_sync(void) +{ + return _tsc_is_sync; +} #else static inline cycles_t get_cycles(void) { return 0; } +static inline int test_tsc_synchronization(void) +{ + return 0; +} +static inline int tsc_is_sync(void) +{ + return 0; +} #endif +#define DELAY_INTERRUPT 100 +/* + * Only updates 32 LSB. + */ +static inline void write_tsc(u32 val1, u32 val2) +{ + write_c0_count(val1); + /* Arrange for an interrupt in a short while */ + write_c0_compare(read_c0_count() + DELAY_INTERRUPT); +} + #endif /* __KERNEL__ */ #endif /* _ASM_TIMEX_H */ -- Mathieu Desnoyers OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/