X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=trunk%2Ftests%2Fkernel%2Ftest-wbias-rwlock.c;h=5c7dde65f797d635b9568833f3f39e1d27eaf25a;hb=292f011035a22f3751aea1bed027158e395510bf;hp=987e8ae475d7d7f6e931369445d9730034d20eda;hpb=e5ef9b536ac655ffa628f8271cbe9924c7e63b84;p=lttv.git diff --git a/trunk/tests/kernel/test-wbias-rwlock.c b/trunk/tests/kernel/test-wbias-rwlock.c index 987e8ae4..5c7dde65 100644 --- a/trunk/tests/kernel/test-wbias-rwlock.c +++ b/trunk/tests/kernel/test-wbias-rwlock.c @@ -6,7 +6,6 @@ #include #include #include -#include #include #include #include @@ -14,6 +13,7 @@ #include #include #include +#include /* Test with no contention duration, in seconds */ #define SINGLE_WRITER_TEST_DURATION 10 @@ -26,7 +26,6 @@ #define NR_VARS 100 #define NR_WRITERS 2 #define NR_TRYLOCK_WRITERS 1 -#define NR_PREADERS 2 #define NR_NPREADERS 2 #define NR_TRYLOCK_READERS 1 @@ -50,6 +49,19 @@ #define NR_TRYLOCK_INTERRUPT_READERS 0 #endif +/* + * 1 : test with thread preemption readers. + * 0 : test only with non-preemptable thread readers. + */ +#define TEST_PREEMPT 1 + +#if (TEST_PREEMPT) +#define NR_PREADERS 2 +#else +#define NR_PREADERS 0 +#endif + + /* * Writer iteration delay, in us. 0 for busy loop. Caution : writers can * starve readers. @@ -121,9 +133,26 @@ static DEFINE_WBIAS_RWLOCK(wbiasrwlock); #if (TEST_INTERRUPTS) #define wrap_write_lock() wbias_write_lock_irq(&wbiasrwlock) #define wrap_write_unlock() wbias_write_unlock_irq(&wbiasrwlock) +#define wrap_write_trylock_else_subscribe() \ + wbias_write_trylock_irq_else_subscribe(&wbiasrwlock) +#define wrap_write_trylock_subscribed() \ + wbias_write_trylock_irq_subscribed(&wbiasrwlock) #else +#if (TEST_PREEMPT) #define wrap_write_lock() wbias_write_lock(&wbiasrwlock) #define wrap_write_unlock() wbias_write_unlock(&wbiasrwlock) +#define wrap_write_trylock_else_subscribe() \ + wbias_write_trylock_else_subscribe(&wbiasrwlock) +#define wrap_write_trylock_subscribed() \ + wbias_write_trylock_subscribed(&wbiasrwlock) +#else +#define wrap_write_lock() wbias_write_lock_atomic(&wbiasrwlock) +#define wrap_write_unlock() wbias_write_unlock_atomic(&wbiasrwlock) +#define wrap_write_trylock_else_subscribe() \ + wbias_write_trylock_atomic_else_subscribe(&wbiasrwlock) +#define wrap_write_trylock_subscribed() \ + wbias_write_trylock_atomic_subscribed(&wbiasrwlock) +#endif #endif #endif @@ -490,31 +519,19 @@ static int trylock_writer_thread(void *data) printk("trylock_writer_thread/%lu runnning\n", (unsigned long)data); do { iter++; -#if (TEST_INTERRUPTS) - if (wbias_write_trylock_irq_else_subscribe(&wbiasrwlock)) -#else - if (wbias_write_trylock_else_subscribe(&wbiasrwlock)) -#endif + if (wrap_write_trylock_else_subscribe()) goto locked; #if (TRYLOCK_WRITERS_FAIL_ITER == -1) for (;;) { iter++; -#if (TEST_INTERRUPTS) - if (wbias_write_trylock_irq_subscribed(&wbiasrwlock)) -#else - if (wbias_write_trylock_subscribed(&wbiasrwlock)) -#endif + if (wrap_write_trylock_subscribed()) goto locked; } #else for (i = 0; i < TRYLOCK_WRITERS_FAIL_ITER - 1; i++) { iter++; -#if (TEST_INTERRUPTS) - if (wbias_write_trylock_irq_subscribed(&wbiasrwlock)) -#else - if (wbias_write_trylock_subscribed(&wbiasrwlock)) -#endif + if (wrap_write_trylock_subscribed()) goto locked; } #endif @@ -527,11 +544,7 @@ locked: for (i = 0; i < NR_VARS; i++) { var[i] = new; } -#if (TEST_INTERRUPTS) - wbias_write_unlock_irq(&wbiasrwlock); -#else - wbias_write_unlock(&wbiasrwlock); -#endif + wrap_write_unlock(); loop: if (TRYLOCK_WRITER_DELAY > 0) udelay(TRYLOCK_WRITER_DELAY); @@ -690,6 +703,7 @@ static int my_open(struct inode *inode, struct file *file) wbias_rwlock_profile_latency_print(); +#if (TEST_PREEMPT) printk("** Single non-preemptable reader test, no contention **\n"); wbias_rwlock_profile_latency_reset(); npreader_threads[0] = kthread_run(npreader_thread, (void *)0, @@ -700,6 +714,7 @@ static int my_open(struct inode *inode, struct file *file) printk("\n"); wbias_rwlock_profile_latency_print(); +#endif printk("** Multiple p/non-p readers test, no contention **\n"); wbias_rwlock_profile_latency_reset(); @@ -746,22 +761,21 @@ int init_module(void) if (pentry) pentry->proc_fops = &my_operations; - printk("PTHREAD_ROFFSET : %lX\n", PTHREAD_ROFFSET); - printk("PTHREAD_RMASK : %lX\n", PTHREAD_RMASK); - printk("NPTHREAD_ROFFSET : %lX\n", NPTHREAD_ROFFSET); - printk("NPTHREAD_RMASK : %lX\n", NPTHREAD_RMASK); - printk("SOFTIRQ_ROFFSET : %lX\n", SOFTIRQ_ROFFSET); - printk("SOFTIRQ_RMASK : %lX\n", SOFTIRQ_RMASK); - printk("HARDIRQ_ROFFSET : %lX\n", HARDIRQ_ROFFSET); - printk("HARDIRQ_RMASK : %lX\n", HARDIRQ_RMASK); - printk("PTHREAD_WOFFSET : %lX\n", PTHREAD_WOFFSET); - printk("PTHREAD_WMASK : %lX\n", PTHREAD_WMASK); - printk("NPTHREAD_WOFFSET : %lX\n", NPTHREAD_WOFFSET); - printk("NPTHREAD_WMASK : %lX\n", NPTHREAD_WMASK); - printk("WRITER_MUTEX : %lX\n", WRITER_MUTEX); - printk("NPTHREAD_WMASK : %lX\n", SOFTIRQ_WMASK); - printk("SOFTIRQ_WMASK : %lX\n", SOFTIRQ_WMASK); - printk("HARDIRQ_WMASK : %lX\n", HARDIRQ_WMASK); + printk("PTHREAD_ROFFSET : %016lX\n", PTHREAD_ROFFSET); + printk("PTHREAD_RMASK : %016lX\n", PTHREAD_RMASK); + printk("NPTHREAD_ROFFSET : %016lX\n", NPTHREAD_ROFFSET); + printk("NPTHREAD_RMASK : %016lX\n", NPTHREAD_RMASK); + printk("SOFTIRQ_ROFFSET : %016lX\n", SOFTIRQ_ROFFSET); + printk("SOFTIRQ_RMASK : %016lX\n", SOFTIRQ_RMASK); + printk("HARDIRQ_ROFFSET : %016lX\n", HARDIRQ_ROFFSET); + printk("HARDIRQ_RMASK : %016lX\n", HARDIRQ_RMASK); + printk("PTHREAD_WOFFSET : %016lX\n", PTHREAD_WOFFSET); + printk("PTHREAD_WMASK : %016lX\n", PTHREAD_WMASK); + printk("NPTHREAD_WOFFSET : %016lX\n", NPTHREAD_WOFFSET); + printk("NPTHREAD_WMASK : %016lX\n", NPTHREAD_WMASK); + printk("WRITER_MUTEX : %016lX\n", WRITER_MUTEX); + printk("SOFTIRQ_WMASK : %016lX\n", SOFTIRQ_WMASK); + printk("HARDIRQ_WMASK : %016lX\n", HARDIRQ_WMASK); return 0; }