]> www.infradead.org Git - users/hch/misc.git/commitdiff
drm/amd/display: Use _free() macro for amdgpu_dm_update_connector_after_detect()
authorMario Limonciello <mario.limonciello@amd.com>
Tue, 18 Feb 2025 04:58:38 +0000 (22:58 -0600)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 5 Mar 2025 15:42:18 +0000 (10:42 -0500)
By using a _free() macro multiple duplicated snippets of code to free
the sink can be dropped. The sink will be released when leaving scope.

Reviewed-by: Alex Hung <alex.hung@amd.com>
Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
Signed-off-by: Wayne Lin <wayne.lin@amd.com>
Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c

index 1b754c49896bdb0bb31e2dd5cc1ba2c49b932705..c73e194cb0275181061628c7cfc900974433dca9 100644 (file)
@@ -3654,12 +3654,14 @@ static void update_connector_ext_caps(struct amdgpu_dm_connector *aconnector)
                caps->min_input_signal = min_input_signal_override;
 }
 
+DEFINE_FREE(sink_release, struct dc_sink *, if (_T) dc_sink_release(_T))
+
 void amdgpu_dm_update_connector_after_detect(
                struct amdgpu_dm_connector *aconnector)
 {
        struct drm_connector *connector = &aconnector->base;
+       struct dc_sink *sink __free(sink_release) = NULL;
        struct drm_device *dev = connector->dev;
-       struct dc_sink *sink;
 
        /* MST handled by drm_mst framework */
        if (aconnector->mst_mgr.mst_state == true)
@@ -3706,8 +3708,6 @@ void amdgpu_dm_update_connector_after_detect(
                        }
                }
 
-               if (sink)
-                       dc_sink_release(sink);
                return;
        }
 
@@ -3715,10 +3715,8 @@ void amdgpu_dm_update_connector_after_detect(
         * TODO: temporary guard to look for proper fix
         * if this sink is MST sink, we should not do anything
         */
-       if (sink && sink->sink_signal == SIGNAL_TYPE_DISPLAY_PORT_MST) {
-               dc_sink_release(sink);
+       if (sink && sink->sink_signal == SIGNAL_TYPE_DISPLAY_PORT_MST)
                return;
-       }
 
        if (aconnector->dc_sink == sink) {
                /*
@@ -3727,8 +3725,6 @@ void amdgpu_dm_update_connector_after_detect(
                 */
                drm_dbg_kms(dev, "DCHPD: connector_id=%d: dc_sink didn't change.\n",
                                 aconnector->connector_id);
-               if (sink)
-                       dc_sink_release(sink);
                return;
        }
 
@@ -3798,9 +3794,6 @@ void amdgpu_dm_update_connector_after_detect(
        }
 
        update_subconnector_property(aconnector);
-
-       if (sink)
-               dc_sink_release(sink);
 }
 
 static void handle_hpd_irq_helper(struct amdgpu_dm_connector *aconnector)