Home | History | Annotate | Download | only in drm

Lines Matching refs:lock_data

52 static int drm_lock_take(struct drm_lock_data *lock_data, unsigned int context);
64 int drm_lock_take(struct drm_lock_data *lock_data,
68 volatile unsigned int *lock = &lock_data->hw_lock->lock;
70 spin_lock_bh(&lock_data->spinlock);
77 ((lock_data->user_waiters + lock_data->kernel_waiters > 1) ?
82 spin_unlock_bh(&lock_data->spinlock);
113 static int drm_lock_transfer(struct drm_lock_data *lock_data,
117 volatile unsigned int *lock = &lock_data->hw_lock->lock;
119 lock_data->file_priv = NULL;
128 static int drm_legacy_lock_free(struct drm_lock_data *lock_data,
132 volatile unsigned int *lock = &lock_data->hw_lock->lock;
134 spin_lock_bh(&lock_data->spinlock);
135 if (lock_data->kernel_waiters != 0) {
136 drm_lock_transfer(lock_data, 0);
137 lock_data->idle_has_lock = 1;
138 spin_unlock_bh(&lock_data->spinlock);
141 spin_unlock_bh(&lock_data->spinlock);
154 wake_up_interruptible(&lock_data->lock_queue);
296 void drm_legacy_idlelock_take(struct drm_lock_data *lock_data)
300 spin_lock_bh(&lock_data->spinlock);
301 lock_data->kernel_waiters++;
302 if (!lock_data->idle_has_lock) {
304 spin_unlock_bh(&lock_data->spinlock);
305 ret = drm_lock_take(lock_data, DRM_KERNEL_CONTEXT);
306 spin_lock_bh(&lock_data->spinlock);
309 lock_data->idle_has_lock = 1;
311 spin_unlock_bh(&lock_data->spinlock);
315 void drm_legacy_idlelock_release(struct drm_lock_data *lock_data)
318 volatile unsigned int *lock = &lock_data->hw_lock->lock;
320 spin_lock_bh(&lock_data->spinlock);
321 if (--lock_data->kernel_waiters == 0) {
322 if (lock_data->idle_has_lock) {
327 wake_up_interruptible(&lock_data->lock_queue);
328 lock_data->idle_has_lock = 0;
331 spin_unlock_bh(&lock_data->spinlock);