Lines Matching full:lock

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