Replace the deprecated API with new helpers, according to the
TODO list of the DRM subsystem.

In this first patch drm_modeset_lock_all() is replaced with
drm_modeset_lock_all_ctx(). Unlike drm_modeset_lock_all(),
the latter doesn’t take the global drm_mode_config.mutex
since that lock isn’t required for modeset state changes.

Signed-off-by: Fabio M. De Francesco <fmdefrance...@gmail.com>
---

Changes from v2: The work is split in two consecutive logical steps.
Changes from v1: Added further information to the commit message.

 drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
index 671ec1002230..856903db34c5 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
@@ -1438,8 +1438,15 @@ static int amdgpu_pmops_runtime_idle(struct device *dev)
 
        if (amdgpu_device_has_dc_support(adev)) {
                struct drm_crtc *crtc;
-
-               drm_modeset_lock_all(drm_dev);
+               struct drm_modeset_acquire_ctx ctx;
+               int ret_lock = 0;
+
+retry:
+               drm_modeset_lock_all_ctx(drm_dev, &ctx);
+               if(ret_lock == -EDEADLK) {
+                       drm_modeset_backoff(&ctx);
+                       goto retry;
+               }
 
                drm_for_each_crtc(crtc, drm_dev) {
                        if (crtc->state->active) {
@@ -1448,7 +1455,7 @@ static int amdgpu_pmops_runtime_idle(struct device *dev)
                        }
                }
 
-               drm_modeset_unlock_all(drm_dev);
+               drm_modeset_drop_locks(&ctx);
 
        } else {
                struct drm_connector *list_connector;
-- 
2.31.1

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to