1 | // SPDX-License-Identifier: GPL-2.0 |
---|---|
2 | #include "util.h" |
3 | #include "rwsem.h" |
4 | |
5 | #if RWS_ERRORCHECK |
6 | #include "mutex.h" |
7 | #endif |
8 | |
9 | int init_rwsem(struct rw_semaphore *sem) |
10 | { |
11 | #if RWS_ERRORCHECK |
12 | mutex_init(&sem->mtx); |
13 | return 0; |
14 | #else |
15 | return pthread_rwlock_init(&sem->lock, NULL); |
16 | #endif |
17 | } |
18 | |
19 | int exit_rwsem(struct rw_semaphore *sem) |
20 | { |
21 | #if RWS_ERRORCHECK |
22 | mutex_destroy(&sem->mtx); |
23 | return 0; |
24 | #else |
25 | return pthread_rwlock_destroy(&sem->lock); |
26 | #endif |
27 | } |
28 | |
29 | int down_read(struct rw_semaphore *sem) |
30 | { |
31 | #if RWS_ERRORCHECK |
32 | mutex_lock(&sem->mtx); |
33 | return 0; |
34 | #else |
35 | return perf_singlethreaded ? 0 : pthread_rwlock_rdlock(&sem->lock); |
36 | #endif |
37 | } |
38 | |
39 | int up_read(struct rw_semaphore *sem) |
40 | { |
41 | #if RWS_ERRORCHECK |
42 | mutex_unlock(&sem->mtx); |
43 | return 0; |
44 | #else |
45 | return perf_singlethreaded ? 0 : pthread_rwlock_unlock(&sem->lock); |
46 | #endif |
47 | } |
48 | |
49 | int down_write(struct rw_semaphore *sem) |
50 | { |
51 | #if RWS_ERRORCHECK |
52 | mutex_lock(&sem->mtx); |
53 | return 0; |
54 | #else |
55 | return perf_singlethreaded ? 0 : pthread_rwlock_wrlock(&sem->lock); |
56 | #endif |
57 | } |
58 | |
59 | int up_write(struct rw_semaphore *sem) |
60 | { |
61 | #if RWS_ERRORCHECK |
62 | mutex_unlock(&sem->mtx); |
63 | return 0; |
64 | #else |
65 | return perf_singlethreaded ? 0 : pthread_rwlock_unlock(&sem->lock); |
66 | #endif |
67 | } |
68 |