X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=tests%2Fkernel%2Ftest-cmpxchg-nolock2.c;h=fcae83e44fd546acefd4bd1e910d58b5bb207120;hb=54e7c22401bde470df54f7b9c1b02d126a1b8c80;hp=c1bec8971f7b712dfb35d899c861384df7636ce7;hpb=fa2b47ddc10cc4a9c65be7898d4a3f229387576f;p=lttv.git diff --git a/tests/kernel/test-cmpxchg-nolock2.c b/tests/kernel/test-cmpxchg-nolock2.c index c1bec897..fcae83e4 100644 --- a/tests/kernel/test-cmpxchg-nolock2.c +++ b/tests/kernel/test-cmpxchg-nolock2.c @@ -16,6 +16,33 @@ int test_val; +static void do_testbaseline(void) +{ + int ret; + long flags; + unsigned int i; + cycles_t time1, time2, time; + long rem; + + local_irq_save(flags); + preempt_disable(); + time1 = get_cycles(); + for (i = 0; i < NR_LOOPS; i++) { + asm volatile (""); + } + time2 = get_cycles(); + local_irq_restore(flags); + preempt_enable(); + time = time2 - time1; + + printk(KERN_ALERT "test results: time for baseline\n"); + printk(KERN_ALERT "number of loops: %d\n", NR_LOOPS); + printk(KERN_ALERT "total time: %llu\n", time); + time = div_long_long_rem(time, NR_LOOPS, &rem); + printk(KERN_ALERT "-> baseline takes %llu cycles\n", time); + printk(KERN_ALERT "test end\n"); +} + static void do_test_sync_cmpxchg(void) { int ret; @@ -131,16 +158,46 @@ static void do_test_disable_int(void) printk(KERN_ALERT "test end\n"); } +static void do_test_int(void) +{ + long flags; + unsigned int i; + cycles_t time1, time2, time; + long rem; + + local_irq_save(flags); + preempt_disable(); + time1 = get_cycles(); + for (i = 0; i < NR_LOOPS; i++) { + local_irq_restore(flags); + local_irq_save(flags); + } + time2 = get_cycles(); + local_irq_restore(flags); + preempt_enable(); + time = time2 - time1; + + printk(KERN_ALERT "test results: time for disabling/enabling interrupts (STI/CLI)\n"); + printk(KERN_ALERT "number of loops: %d\n", NR_LOOPS); + printk(KERN_ALERT "total time: %llu\n", time); + time = div_long_long_rem(time, NR_LOOPS, &rem); + printk(KERN_ALERT "-> enabling/disabling interrupts (STI/CLI) takes %llu cycles\n", + time); + printk(KERN_ALERT "test end\n"); +} + static int ltt_test_init(void) { printk(KERN_ALERT "test init\n"); + do_testbaseline(); do_test_sync_cmpxchg(); do_test_cmpxchg(); do_test_enable_int(); do_test_disable_int(); + do_test_int(); return -EAGAIN; /* Fail will directly unload the module */ }