| #include "qrwlock.h" |
| |
| unsigned long __rmem_stop_addr = 0x0; |
| struct qrwlock lock = __ARCH_RW_LOCK_UNLOCKED; |
| static int count = 0; |
| |
| /* |
| * Test driver for qrwlock. |
| * Want to ensure that writers are serialised wrt everybody else. |
| */ |
| static void writer(void) |
| { |
| arch_write_lock(&lock); |
| count++; |
| barrier(); |
| count++; |
| arch_write_unlock(&lock); |
| } |
| |
| static void reader(void) |
| { |
| arch_read_lock(&lock); |
| assert((count & 1) == 0); |
| arch_read_unlock(&lock); |
| } |
| |
| void _start(void) |
| { |
| __rmem_thread_start(writer); |
| __rmem_thread_start(writer); |
| __rmem_thread_start(reader); |
| reader(); |
| } |