Lines Matching refs:ctx

69 	struct drm_modeset_acquire_ctx *ctx;  in drm_modeset_lock_all()  local
72 ctx = kzalloc(sizeof(*ctx), GFP_KERNEL); in drm_modeset_lock_all()
73 if (WARN_ON(!ctx)) in drm_modeset_lock_all()
78 drm_modeset_acquire_init(ctx, 0); in drm_modeset_lock_all()
81 ret = drm_modeset_lock(&config->connection_mutex, ctx); in drm_modeset_lock_all()
84 ret = drm_modeset_lock_all_crtcs(dev, ctx); in drm_modeset_lock_all()
93 config->acquire_ctx = ctx; in drm_modeset_lock_all()
101 drm_modeset_backoff(ctx); in drm_modeset_lock_all()
105 kfree(ctx); in drm_modeset_lock_all()
118 struct drm_modeset_acquire_ctx *ctx = config->acquire_ctx; in drm_modeset_unlock_all() local
120 if (WARN_ON(!ctx)) in drm_modeset_unlock_all()
124 drm_modeset_drop_locks(ctx); in drm_modeset_unlock_all()
125 drm_modeset_acquire_fini(ctx); in drm_modeset_unlock_all()
127 kfree(ctx); in drm_modeset_unlock_all()
149 struct drm_modeset_acquire_ctx *ctx; in drm_modeset_lock_crtc() local
152 ctx = kzalloc(sizeof(*ctx), GFP_KERNEL); in drm_modeset_lock_crtc()
153 if (WARN_ON(!ctx)) in drm_modeset_lock_crtc()
156 drm_modeset_acquire_init(ctx, 0); in drm_modeset_lock_crtc()
159 ret = drm_modeset_lock(&crtc->mutex, ctx); in drm_modeset_lock_crtc()
164 ret = drm_modeset_lock(&plane->mutex, ctx); in drm_modeset_lock_crtc()
169 ret = drm_modeset_lock(&plane->crtc->mutex, ctx); in drm_modeset_lock_crtc()
180 crtc->acquire_ctx = ctx; in drm_modeset_lock_crtc()
186 drm_modeset_backoff(ctx); in drm_modeset_lock_crtc()
222 struct drm_modeset_acquire_ctx *ctx = crtc->acquire_ctx; in drm_modeset_unlock_crtc() local
224 if (WARN_ON(!ctx)) in drm_modeset_unlock_crtc()
228 drm_modeset_drop_locks(ctx); in drm_modeset_unlock_crtc()
229 drm_modeset_acquire_fini(ctx); in drm_modeset_unlock_crtc()
231 kfree(ctx); in drm_modeset_unlock_crtc()
262 void drm_modeset_acquire_init(struct drm_modeset_acquire_ctx *ctx, in drm_modeset_acquire_init() argument
265 memset(ctx, 0, sizeof(*ctx)); in drm_modeset_acquire_init()
266 ww_acquire_init(&ctx->ww_ctx, &crtc_ww_class); in drm_modeset_acquire_init()
267 INIT_LIST_HEAD(&ctx->locked); in drm_modeset_acquire_init()
275 void drm_modeset_acquire_fini(struct drm_modeset_acquire_ctx *ctx) in drm_modeset_acquire_fini() argument
277 ww_acquire_fini(&ctx->ww_ctx); in drm_modeset_acquire_fini()
287 void drm_modeset_drop_locks(struct drm_modeset_acquire_ctx *ctx) in drm_modeset_drop_locks() argument
289 WARN_ON(ctx->contended); in drm_modeset_drop_locks()
290 while (!list_empty(&ctx->locked)) { in drm_modeset_drop_locks()
293 lock = list_first_entry(&ctx->locked, in drm_modeset_drop_locks()
302 struct drm_modeset_acquire_ctx *ctx, in modeset_lock() argument
307 WARN_ON(ctx->contended); in modeset_lock()
309 if (ctx->trylock_only) { in modeset_lock()
310 lockdep_assert_held(&ctx->ww_ctx); in modeset_lock()
317 ret = ww_mutex_lock_slow_interruptible(&lock->mutex, &ctx->ww_ctx); in modeset_lock()
319 ret = ww_mutex_lock_interruptible(&lock->mutex, &ctx->ww_ctx); in modeset_lock()
321 ww_mutex_lock_slow(&lock->mutex, &ctx->ww_ctx); in modeset_lock()
324 ret = ww_mutex_lock(&lock->mutex, &ctx->ww_ctx); in modeset_lock()
328 list_add(&lock->head, &ctx->locked); in modeset_lock()
337 ctx->contended = lock; in modeset_lock()
343 static int modeset_backoff(struct drm_modeset_acquire_ctx *ctx, in modeset_backoff() argument
346 struct drm_modeset_lock *contended = ctx->contended; in modeset_backoff()
348 ctx->contended = NULL; in modeset_backoff()
353 drm_modeset_drop_locks(ctx); in modeset_backoff()
355 return modeset_lock(contended, ctx, interruptible, true); in modeset_backoff()
366 void drm_modeset_backoff(struct drm_modeset_acquire_ctx *ctx) in drm_modeset_backoff() argument
368 modeset_backoff(ctx, false); in drm_modeset_backoff()
378 int drm_modeset_backoff_interruptible(struct drm_modeset_acquire_ctx *ctx) in drm_modeset_backoff_interruptible() argument
380 return modeset_backoff(ctx, true); in drm_modeset_backoff_interruptible()
396 struct drm_modeset_acquire_ctx *ctx) in drm_modeset_lock() argument
398 if (ctx) in drm_modeset_lock()
399 return modeset_lock(lock, ctx, false, false); in drm_modeset_lock()
414 struct drm_modeset_acquire_ctx *ctx) in drm_modeset_lock_interruptible() argument
416 if (ctx) in drm_modeset_lock_interruptible()
417 return modeset_lock(lock, ctx, true, false); in drm_modeset_lock_interruptible()
437 struct drm_modeset_acquire_ctx *ctx) in drm_modeset_lock_all_crtcs() argument
444 ret = drm_modeset_lock(&crtc->mutex, ctx); in drm_modeset_lock_all_crtcs()
450 ret = drm_modeset_lock(&plane->mutex, ctx); in drm_modeset_lock_all_crtcs()