From f57afc80188efa0b7dc523a85e2d08ff2589ae77 Mon Sep 17 00:00:00 2001 From: compudj Date: Thu, 8 May 2008 01:05:49 +0000 Subject: [PATCH] update git-svn-id: http://ltt.polymtl.ca/svn@2894 04897980-b3bd-0310-b5e0-8ef037075253 --- tests/kernel/Makefile | 2 +- tests/kernel/test-cmpxchg-nolock2.c | 31 +++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/tests/kernel/Makefile b/tests/kernel/Makefile index 31656791..c244a439 100644 --- a/tests/kernel/Makefile +++ b/tests/kernel/Makefile @@ -14,7 +14,7 @@ ifneq ($(CONFIG_LTT),) endif #obj-m += test-sys_call.o # obj-m += test-bug.o - obj-m += test-cmpxchg.o + obj-m += test-cmpxchg-nolock2.o #obj-m += test-mark-speed.o #obj-m += test-mark-speed-edit.o #obj-m += test-mark-speed-opt.o diff --git a/tests/kernel/test-cmpxchg-nolock2.c b/tests/kernel/test-cmpxchg-nolock2.c index 3cef7af9..4b7b3cca 100644 --- a/tests/kernel/test-cmpxchg-nolock2.c +++ b/tests/kernel/test-cmpxchg-nolock2.c @@ -16,6 +16,37 @@ int test_val; +static void do_test_sync_cmpxchg(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++) { +#ifdef CONFIG_X86_32 + ret = sync_cmpxchg(&test_val, 0, 0); +#else + ret = cmpxchg(&test_val, 0, 0); +#endif + } + time2 = get_cycles(); + local_irq_restore(flags); + preempt_enable(); + time = time2 - time1; + + printk(KERN_ALERT "test results: time for locked cmpxchg\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 "-> locked cmpxchg takes %llu cycles\n", time); + printk(KERN_ALERT "test end\n"); +} + static void do_test_cmpxchg(void) { int ret; -- 2.34.1