]> www.infradead.org Git - users/hch/misc.git/commitdiff
drm/amd/display: Use _free() macro for amdgpu_dm_commit_zero_streams()
authorMario Limonciello <mario.limonciello@amd.com>
Tue, 18 Feb 2025 04:58:31 +0000 (22:58 -0600)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 5 Mar 2025 15:41:25 +0000 (10:41 -0500)
All cases except a failure to create a copy of the current context will
call dc_state_release() on the copied context.

Use a _free() macro to free the context and then adjust the error handling
flow to drop the unnecessary use of goto statements.

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 80503d084b828fe8c274672bac1d9f4771831b28..e41d1ab34705f2f9cbb3fa0c2b04dcb91682fe48 100644 (file)
@@ -3086,10 +3086,11 @@ static void dm_gpureset_toggle_interrupts(struct amdgpu_device *adev,
 
 }
 
+DEFINE_FREE(state_release, struct dc_state *, if (_T) dc_state_release(_T))
+
 static enum dc_status amdgpu_dm_commit_zero_streams(struct dc *dc)
 {
-       struct dc_state *context = NULL;
-       enum dc_status res = DC_ERROR_UNEXPECTED;
+       struct dc_state *context __free(state_release) = NULL;
        int i;
        struct dc_stream_state *del_streams[MAX_PIPES];
        int del_streams_count = 0;
@@ -3099,7 +3100,7 @@ static enum dc_status amdgpu_dm_commit_zero_streams(struct dc *dc)
 
        context = dc_state_create_current_copy(dc);
        if (context == NULL)
-               goto context_alloc_fail;
+               return DC_ERROR_UNEXPECTED;
 
        /* First remove from context all streams */
        for (i = 0; i < context->stream_count; i++) {
@@ -3110,25 +3111,20 @@ static enum dc_status amdgpu_dm_commit_zero_streams(struct dc *dc)
 
        /* Remove all planes for removed streams and then remove the streams */
        for (i = 0; i < del_streams_count; i++) {
-               if (!dc_state_rem_all_planes_for_stream(dc, del_streams[i], context)) {
-                       res = DC_FAIL_DETACH_SURFACES;
-                       goto fail;
-               }
+               enum dc_status res;
+
+               if (!dc_state_rem_all_planes_for_stream(dc, del_streams[i], context))
+                       return DC_FAIL_DETACH_SURFACES;
 
                res = dc_state_remove_stream(dc, context, del_streams[i]);
                if (res != DC_OK)
-                       goto fail;
+                       return res;
        }
 
        params.streams = context->streams;
        params.stream_count = context->stream_count;
-       res = dc_commit_streams(dc, &params);
-
-fail:
-       dc_state_release(context);
 
-context_alloc_fail:
-       return res;
+       return dc_commit_streams(dc, &params);
 }
 
 static void hpd_rx_irq_work_suspend(struct amdgpu_display_manager *dm)