X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=tests%2Fkernel%2Ftest-tsc-sync.c;h=14cd008b3c59372acad35148ad88fa706bbbe79f;hb=54e7c22401bde470df54f7b9c1b02d126a1b8c80;hp=5ca7e57e9e27391467d060b65f40aa8b3da7cc87;hpb=31d375f53965ffd00fb78cf7217c35ea56405445;p=lttv.git diff --git a/tests/kernel/test-tsc-sync.c b/tests/kernel/test-tsc-sync.c index 5ca7e57e..14cd008b 100644 --- a/tests/kernel/test-tsc-sync.c +++ b/tests/kernel/test-tsc-sync.c @@ -13,18 +13,29 @@ static DEFINE_PER_CPU(cycles_t, count) = 0; static struct timer_list test_timer; +static atomic_t kernel_threads_to_run; + + /* IPI called on each CPU. */ static void test_each(void *info) { - __get_cpu_var(count) = get_cycles(); + unsigned long flags; + local_irq_save(flags); + atomic_dec(&kernel_threads_to_run); + while(atomic_read(&kernel_threads_to_run)) + cpu_relax(); + __get_cpu_var(count) = get_cycles_sync(); + local_irq_restore(flags); } static void do_test_timer(unsigned long data) { int cpu; - /* Increment the counters */ - on_each_cpu(test_each, NULL, 0, 1); + atomic_set(&kernel_threads_to_run, num_online_cpus()); + + smp_call_function(test_each, NULL, 0, 0); + test_each(NULL); /* Read all the counters */ printk("Counters read from CPU %d\n", smp_processor_id()); for_each_online_cpu(cpu) {