]> git.baikalelectronics.ru Git - kernel.git/commitdiff
drm/amd/display/dc/core/dc_link: Move some local data from the stack to the heap
authorLee Jones <lee.jones@linaro.org>
Wed, 13 Jan 2021 08:07:40 +0000 (08:07 +0000)
committerAlex Deucher <alexander.deucher@amd.com>
Thu, 14 Jan 2021 18:20:21 +0000 (13:20 -0500)
Fixes the following W=1 kernel build warning(s):

 drivers/gpu/drm/amd/amdgpu/../display/dc/core/dc_link.c: In function ‘dc_link_construct’:
 drivers/gpu/drm/amd/amdgpu/../display/dc/core/dc_link.c:1588:1: warning: the frame size of 1176 bytes is larger than 1024 bytes [-Wframe-larger-than=]

Cc: Harry Wentland <harry.wentland@amd.com>
Cc: Leo Li <sunpeng.li@amd.com>
Cc: Alex Deucher <alexander.deucher@amd.com>
Cc: "Christian König" <christian.koenig@amd.com>
Cc: David Airlie <airlied@linux.ie>
Cc: Daniel Vetter <daniel@ffwll.ch>
Cc: amd-gfx@lists.freedesktop.org
Cc: dri-devel@lists.freedesktop.org
Signed-off-by: Lee Jones <lee.jones@linaro.org>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/dc/core/dc_link.c

index 5b5f84cc60366b70b96ea8d0011598cf59a443c7..f53c15a50dec7ee8c81e8a514de82d1c63ed6542 100644 (file)
@@ -1372,13 +1372,17 @@ static bool dc_link_construct(struct dc_link *link,
        struct dc_context *dc_ctx = init_params->ctx;
        struct encoder_init_data enc_init_data = { 0 };
        struct panel_cntl_init_data panel_cntl_init_data = { 0 };
-       struct integrated_info info = {{{ 0 }}};
+       struct integrated_info *info;
        struct dc_bios *bios = init_params->dc->ctx->dc_bios;
        const struct dc_vbios_funcs *bp_funcs = bios->funcs;
        struct bp_disp_connector_caps_info disp_connect_caps_info = { 0 };
 
        DC_LOGGER_INIT(dc_ctx->logger);
 
+       info = kzalloc(sizeof(info), GFP_KERNEL);
+       if (!info)
+               goto create_fail;
+
        link->irq_source_hpd = DC_IRQ_SOURCE_INVALID;
        link->irq_source_hpd_rx = DC_IRQ_SOURCE_INVALID;
 
@@ -1540,12 +1544,12 @@ static bool dc_link_construct(struct dc_link *link,
        }
 
        if (bios->integrated_info)
-               info = *bios->integrated_info;
+               memcpy(info, bios->integrated_info, sizeof(*info));
 
        /* Look for channel mapping corresponding to connector and device tag */
        for (i = 0; i < MAX_NUMBER_OF_EXT_DISPLAY_PATH; i++) {
                struct external_display_path *path =
-                       &info.ext_disp_conn_info.path[i];
+                       &info->ext_disp_conn_info.path[i];
 
                if (path->device_connector_id.enum_id == link->link_id.enum_id &&
                    path->device_connector_id.id == link->link_id.id &&
@@ -1592,6 +1596,8 @@ create_fail:
                link->hpd_gpio = NULL;
        }
 
+       kfree(info);
+
        return false;
 }