51 lines
922 B
C
51 lines
922 B
C
|
// SPDX-License-Identifier: MIT
|
||
|
/*
|
||
|
* Copyright © 2023 Intel Corporation
|
||
|
*/
|
||
|
|
||
|
#include <drm/drm_modeset_lock.h>
|
||
|
|
||
|
#include "intel_display_types.h"
|
||
|
#include "intel_modeset_lock.h"
|
||
|
|
||
|
void _intel_modeset_lock_begin(struct drm_modeset_acquire_ctx *ctx,
|
||
|
struct intel_atomic_state *state,
|
||
|
unsigned int flags, int *ret)
|
||
|
{
|
||
|
drm_modeset_acquire_init(ctx, flags);
|
||
|
|
||
|
if (state)
|
||
|
state->base.acquire_ctx = ctx;
|
||
|
|
||
|
*ret = -EDEADLK;
|
||
|
}
|
||
|
|
||
|
bool _intel_modeset_lock_loop(int *ret)
|
||
|
{
|
||
|
if (*ret == -EDEADLK) {
|
||
|
*ret = 0;
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
void _intel_modeset_lock_end(struct drm_modeset_acquire_ctx *ctx,
|
||
|
struct intel_atomic_state *state,
|
||
|
int *ret)
|
||
|
{
|
||
|
if (*ret == -EDEADLK) {
|
||
|
if (state)
|
||
|
drm_atomic_state_clear(&state->base);
|
||
|
|
||
|
*ret = drm_modeset_backoff(ctx);
|
||
|
if (*ret == 0) {
|
||
|
*ret = -EDEADLK;
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
drm_modeset_drop_locks(ctx);
|
||
|
drm_modeset_acquire_fini(ctx);
|
||
|
}
|