Lines Matching refs:lock_data

41 static int drm_lock_take(struct drm_lock_data *lock_data, unsigned int context);
177 int drm_lock_take(struct drm_lock_data *lock_data, in drm_lock_take() argument
181 volatile unsigned int *lock = &lock_data->hw_lock->lock; in drm_lock_take()
183 spin_lock_bh(&lock_data->spinlock); in drm_lock_take()
190 ((lock_data->user_waiters + lock_data->kernel_waiters > 1) ? in drm_lock_take()
195 spin_unlock_bh(&lock_data->spinlock); in drm_lock_take()
226 static int drm_lock_transfer(struct drm_lock_data *lock_data, in drm_lock_transfer() argument
230 volatile unsigned int *lock = &lock_data->hw_lock->lock; in drm_lock_transfer()
232 lock_data->file_priv = NULL; in drm_lock_transfer()
252 int drm_legacy_lock_free(struct drm_lock_data *lock_data, unsigned int context) in drm_legacy_lock_free() argument
255 volatile unsigned int *lock = &lock_data->hw_lock->lock; in drm_legacy_lock_free()
257 spin_lock_bh(&lock_data->spinlock); in drm_legacy_lock_free()
258 if (lock_data->kernel_waiters != 0) { in drm_legacy_lock_free()
259 drm_lock_transfer(lock_data, 0); in drm_legacy_lock_free()
260 lock_data->idle_has_lock = 1; in drm_legacy_lock_free()
261 spin_unlock_bh(&lock_data->spinlock); in drm_legacy_lock_free()
264 spin_unlock_bh(&lock_data->spinlock); in drm_legacy_lock_free()
277 wake_up_interruptible(&lock_data->lock_queue); in drm_legacy_lock_free()
294 void drm_legacy_idlelock_take(struct drm_lock_data *lock_data) in drm_legacy_idlelock_take() argument
298 spin_lock_bh(&lock_data->spinlock); in drm_legacy_idlelock_take()
299 lock_data->kernel_waiters++; in drm_legacy_idlelock_take()
300 if (!lock_data->idle_has_lock) { in drm_legacy_idlelock_take()
302 spin_unlock_bh(&lock_data->spinlock); in drm_legacy_idlelock_take()
303 ret = drm_lock_take(lock_data, DRM_KERNEL_CONTEXT); in drm_legacy_idlelock_take()
304 spin_lock_bh(&lock_data->spinlock); in drm_legacy_idlelock_take()
307 lock_data->idle_has_lock = 1; in drm_legacy_idlelock_take()
309 spin_unlock_bh(&lock_data->spinlock); in drm_legacy_idlelock_take()
313 void drm_legacy_idlelock_release(struct drm_lock_data *lock_data) in drm_legacy_idlelock_release() argument
316 volatile unsigned int *lock = &lock_data->hw_lock->lock; in drm_legacy_idlelock_release()
318 spin_lock_bh(&lock_data->spinlock); in drm_legacy_idlelock_release()
319 if (--lock_data->kernel_waiters == 0) { in drm_legacy_idlelock_release()
320 if (lock_data->idle_has_lock) { in drm_legacy_idlelock_release()
325 wake_up_interruptible(&lock_data->lock_queue); in drm_legacy_idlelock_release()
326 lock_data->idle_has_lock = 0; in drm_legacy_idlelock_release()
329 spin_unlock_bh(&lock_data->spinlock); in drm_legacy_idlelock_release()