Allocate a local atomic state for the autoretrain modeset. This
prepares for a follow-up change that needs to access the state after
the modeset for sending userspace notifications.

v2: Rebase on upstream drm_atomic_state -> drm_atomic_commit rename.

Signed-off-by: Imre Deak <[email protected]>
---
 .../gpu/drm/i915/display/intel_dp_link_training.c | 15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_dp_link_training.c 
b/drivers/gpu/drm/i915/display/intel_dp_link_training.c
index ad67f9df46d7b..0231ca0cea30c 100644
--- a/drivers/gpu/drm/i915/display/intel_dp_link_training.c
+++ b/drivers/gpu/drm/i915/display/intel_dp_link_training.c
@@ -27,6 +27,7 @@
 #include <drm/display/drm_dp_helper.h>
 #include <drm/drm_print.h>
 
+#include "intel_display.h"
 #include "intel_display_core.h"
 #include "intel_display_jiffies.h"
 #include "intel_display_types.h"
@@ -2165,6 +2166,8 @@ static int intel_dp_retrain_link(struct intel_encoder 
*encoder,
        struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
        struct intel_dp_link_training *link_training =
                intel_dp->link.training;
+       struct intel_atomic_state *state;
+       struct drm_atomic_commit *_state;
        u8 pipe_mask;
        int ret;
 
@@ -2194,9 +2197,15 @@ static int intel_dp_retrain_link(struct intel_encoder 
*encoder,
                    encoder->base.base.id, encoder->base.name,
                    
str_yes_no(intel_dp_link_training_get_force_retrain(link_training)));
 
-       ret = intel_modeset_commit_pipes(display, pipe_mask, ctx);
+       _state = drm_atomic_commit_alloc(display->drm);
+       if (!_state)
+               return -ENOMEM;
+
+       state = to_intel_atomic_state(_state);
+
+       ret = intel_modeset_commit_pipes_for_atomic_state(state, pipe_mask, 
ctx);
        if (ret == -EDEADLK)
-               return ret;
+               goto out;
 
        intel_dp_link_training_set_force_retrain(link_training, false);
 
@@ -2205,6 +2214,8 @@ static int intel_dp_retrain_link(struct intel_encoder 
*encoder,
                            "[ENCODER:%d:%s] link retraining failed: %pe\n",
                            encoder->base.base.id, encoder->base.name,
                            ERR_PTR(ret));
+out:
+       drm_atomic_commit_put(&state->base);
 
        return ret;
 }
-- 
2.49.1

Reply via email to