1// SPDX-License-Identifier: MIT
2/*
3 * Copyright © 2023 Intel Corporation
4 */
5
6#include <drm/drm_modeset_lock.h>
7
8#include "intel_display_types.h"
9#include "intel_modeset_lock.h"
10
11void _intel_modeset_lock_begin(struct drm_modeset_acquire_ctx *ctx,
12 struct intel_atomic_state *state,
13 unsigned int flags, int *ret)
14{
15 drm_modeset_acquire_init(ctx, flags);
16
17 if (state)
18 state->base.acquire_ctx = ctx;
19
20 *ret = -EDEADLK;
21}
22
23bool _intel_modeset_lock_loop(int *ret)
24{
25 if (*ret == -EDEADLK) {
26 *ret = 0;
27 return true;
28 }
29
30 return false;
31}
32
33void _intel_modeset_lock_end(struct drm_modeset_acquire_ctx *ctx,
34 struct intel_atomic_state *state,
35 int *ret)
36{
37 if (*ret == -EDEADLK) {
38 if (state)
39 drm_atomic_state_clear(state: &state->base);
40
41 *ret = drm_modeset_backoff(ctx);
42 if (*ret == 0) {
43 *ret = -EDEADLK;
44 return;
45 }
46 }
47
48 drm_modeset_drop_locks(ctx);
49 drm_modeset_acquire_fini(ctx);
50}
51

source code of linux/drivers/gpu/drm/i915/display/intel_modeset_lock.c