Lines Matching refs:lock_data

43 static int drm_lock_take(struct drm_lock_data *lock_data, unsigned int context);
183 int drm_lock_take(struct drm_lock_data *lock_data, in drm_lock_take() argument
187 volatile unsigned int *lock = &lock_data->hw_lock->lock; in drm_lock_take()
189 mtx_lock(&lock_data->spinlock); in drm_lock_take()
196 ((lock_data->user_waiters + lock_data->kernel_waiters > 1) ? in drm_lock_take()
201 mtx_unlock(&lock_data->spinlock); in drm_lock_take()
232 static int drm_lock_transfer(struct drm_lock_data *lock_data, in drm_lock_transfer() argument
236 volatile unsigned int *lock = &lock_data->hw_lock->lock; in drm_lock_transfer()
238 lock_data->file_priv = NULL; in drm_lock_transfer()
258 int drm_lock_free(struct drm_lock_data *lock_data, unsigned int context) in drm_lock_free() argument
261 volatile unsigned int *lock = &lock_data->hw_lock->lock; in drm_lock_free()
263 mtx_lock(&lock_data->spinlock); in drm_lock_free()
264 if (lock_data->kernel_waiters != 0) { in drm_lock_free()
265 drm_lock_transfer(lock_data, 0); in drm_lock_free()
266 lock_data->idle_has_lock = 1; in drm_lock_free()
267 mtx_unlock(&lock_data->spinlock); in drm_lock_free()
270 mtx_unlock(&lock_data->spinlock); in drm_lock_free()
283 wake_up_interruptible(&lock_data->lock_queue); in drm_lock_free()
333 void drm_idlelock_take(struct drm_lock_data *lock_data) in drm_idlelock_take() argument
337 mtx_lock(&lock_data->spinlock); in drm_idlelock_take()
338 lock_data->kernel_waiters++; in drm_idlelock_take()
339 if (!lock_data->idle_has_lock) { in drm_idlelock_take()
341 mtx_unlock(&lock_data->spinlock); in drm_idlelock_take()
342 ret = drm_lock_take(lock_data, DRM_KERNEL_CONTEXT); in drm_idlelock_take()
343 mtx_lock(&lock_data->spinlock); in drm_idlelock_take()
346 lock_data->idle_has_lock = 1; in drm_idlelock_take()
348 mtx_unlock(&lock_data->spinlock); in drm_idlelock_take()
352 void drm_idlelock_release(struct drm_lock_data *lock_data) in drm_idlelock_release() argument
355 volatile unsigned int *lock = &lock_data->hw_lock->lock; in drm_idlelock_release()
357 mtx_lock(&lock_data->spinlock); in drm_idlelock_release()
358 if (--lock_data->kernel_waiters == 0) { in drm_idlelock_release()
359 if (lock_data->idle_has_lock) { in drm_idlelock_release()
364 wake_up_interruptible(&lock_data->lock_queue); in drm_idlelock_release()
365 lock_data->idle_has_lock = 0; in drm_idlelock_release()
368 mtx_unlock(&lock_data->spinlock); in drm_idlelock_release()