Lines Matching refs:lock_data

45 static int drm_lock_take(struct drm_lock_data *lock_data, unsigned int context);
185 int drm_lock_take(struct drm_lock_data *lock_data, in drm_lock_take() argument
189 volatile unsigned int *lock = &lock_data->hw_lock->lock; in drm_lock_take()
191 mtx_lock(&lock_data->spinlock); in drm_lock_take()
198 ((lock_data->user_waiters + lock_data->kernel_waiters > 1) ? in drm_lock_take()
203 mtx_unlock(&lock_data->spinlock); in drm_lock_take()
234 static int drm_lock_transfer(struct drm_lock_data *lock_data, in drm_lock_transfer() argument
238 volatile unsigned int *lock = &lock_data->hw_lock->lock; in drm_lock_transfer()
240 lock_data->file_priv = NULL; in drm_lock_transfer()
260 int drm_lock_free(struct drm_lock_data *lock_data, unsigned int context) in drm_lock_free() argument
263 volatile unsigned int *lock = &lock_data->hw_lock->lock; in drm_lock_free()
265 mtx_lock(&lock_data->spinlock); in drm_lock_free()
266 if (lock_data->kernel_waiters != 0) { in drm_lock_free()
267 drm_lock_transfer(lock_data, 0); in drm_lock_free()
268 lock_data->idle_has_lock = 1; in drm_lock_free()
269 mtx_unlock(&lock_data->spinlock); in drm_lock_free()
272 mtx_unlock(&lock_data->spinlock); in drm_lock_free()
285 wake_up_interruptible(&lock_data->lock_queue); in drm_lock_free()
335 void drm_idlelock_take(struct drm_lock_data *lock_data) in drm_idlelock_take() argument
339 mtx_lock(&lock_data->spinlock); in drm_idlelock_take()
340 lock_data->kernel_waiters++; in drm_idlelock_take()
341 if (!lock_data->idle_has_lock) { in drm_idlelock_take()
343 mtx_unlock(&lock_data->spinlock); in drm_idlelock_take()
344 ret = drm_lock_take(lock_data, DRM_KERNEL_CONTEXT); in drm_idlelock_take()
345 mtx_lock(&lock_data->spinlock); in drm_idlelock_take()
348 lock_data->idle_has_lock = 1; in drm_idlelock_take()
350 mtx_unlock(&lock_data->spinlock); in drm_idlelock_take()
354 void drm_idlelock_release(struct drm_lock_data *lock_data) in drm_idlelock_release() argument
357 volatile unsigned int *lock = &lock_data->hw_lock->lock; in drm_idlelock_release()
359 mtx_lock(&lock_data->spinlock); in drm_idlelock_release()
360 if (--lock_data->kernel_waiters == 0) { in drm_idlelock_release()
361 if (lock_data->idle_has_lock) { in drm_idlelock_release()
366 wake_up_interruptible(&lock_data->lock_queue); in drm_idlelock_release()
367 lock_data->idle_has_lock = 0; in drm_idlelock_release()
370 mtx_unlock(&lock_data->spinlock); in drm_idlelock_release()