Lines Matching defs:lock
45 void ttm_lock_init(struct ttm_lock *lock)
47 spin_lock_init(&lock->lock);
48 init_waitqueue_head(&lock->queue);
49 lock->rw = 0;
50 lock->flags = 0;
53 void ttm_read_unlock(struct ttm_lock *lock)
55 spin_lock(&lock->lock);
56 if (--lock->rw == 0)
57 wake_up_all(&lock->queue);
58 spin_unlock(&lock->lock);
61 static bool __ttm_read_lock(struct ttm_lock *lock)
65 spin_lock(&lock->lock);
66 if (lock->rw >= 0 && lock->flags == 0) {
67 ++lock->rw;
70 spin_unlock(&lock->lock);
74 int ttm_read_lock(struct ttm_lock *lock, bool interruptible)
79 ret = wait_event_interruptible(lock->queue,
80 __ttm_read_lock(lock));
82 wait_event(lock->queue, __ttm_read_lock(lock));
86 static bool __ttm_read_trylock(struct ttm_lock *lock, bool *locked)
92 spin_lock(&lock->lock);
93 if (lock->rw >= 0 && lock->flags == 0) {
94 ++lock->rw;
97 } else if (lock->flags == 0) {
100 spin_unlock(&lock->lock);
105 int ttm_read_trylock(struct ttm_lock *lock, bool interruptible)
112 (lock->queue, __ttm_read_trylock(lock, &locked));
114 wait_event(lock->queue, __ttm_read_trylock(lock, &locked));
124 void ttm_write_unlock(struct ttm_lock *lock)
126 spin_lock(&lock->lock);
127 lock->rw = 0;
128 wake_up_all(&lock->queue);
129 spin_unlock(&lock->lock);
132 static bool __ttm_write_lock(struct ttm_lock *lock)
136 spin_lock(&lock->lock);
137 if (lock->rw == 0 && ((lock->flags & ~TTM_WRITE_LOCK_PENDING) == 0)) {
138 lock->rw = -1;
139 lock->flags &= ~TTM_WRITE_LOCK_PENDING;
142 lock->flags |= TTM_WRITE_LOCK_PENDING;
144 spin_unlock(&lock->lock);
148 int ttm_write_lock(struct ttm_lock *lock, bool interruptible)
153 ret = wait_event_interruptible(lock->queue,
154 __ttm_write_lock(lock));
156 spin_lock(&lock->lock);
157 lock->flags &= ~TTM_WRITE_LOCK_PENDING;
158 wake_up_all(&lock->queue);
159 spin_unlock(&lock->lock);
162 wait_event(lock->queue, __ttm_write_lock(lock));
167 void ttm_suspend_unlock(struct ttm_lock *lock)
169 spin_lock(&lock->lock);
170 lock->flags &= ~TTM_SUSPEND_LOCK;
171 wake_up_all(&lock->queue);
172 spin_unlock(&lock->lock);
175 static bool __ttm_suspend_lock(struct ttm_lock *lock)
179 spin_lock(&lock->lock);
180 if (lock->rw == 0) {
181 lock->flags &= ~TTM_SUSPEND_LOCK_PENDING;
182 lock->flags |= TTM_SUSPEND_LOCK;
185 lock->flags |= TTM_SUSPEND_LOCK_PENDING;
187 spin_unlock(&lock->lock);
191 void ttm_suspend_lock(struct ttm_lock *lock)
193 wait_event(lock->queue, __ttm_suspend_lock(lock));