drm/amdgpu/display: use GFP_ATOMIC in dcn20_validate_bandwidth_internal
authorDaniel Kolesa <daniel@octaforge.org>
Sat, 8 Aug 2020 20:42:35 +0000 (22:42 +0200)
committerAlex Deucher <alexander.deucher@amd.com>
Mon, 10 Aug 2020 22:09:46 +0000 (18:09 -0400)
GFP_KERNEL may and will sleep, and this is being executed in
a non-preemptible context; this will mess things up since it's
called inbetween DC_FP_START/END, and rescheduling will result
in the DC_FP_END later being called in a different context (or
just crashing if any floating point/vector registers/instructions
are used after the call is resumed in a different context).

Signed-off-by: Daniel Kolesa <daniel@octaforge.org>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Cc: stable@vger.kernel.org
drivers/gpu/drm/amd/display/dc/dcn20/dcn20_resource.c

index 790baf5526959aa845cbd72847f1f87ee4191d38..9140b3fc767ab7fa61c232b4d2a03441898a55e4 100644 (file)
@@ -3141,7 +3141,7 @@ static bool dcn20_validate_bandwidth_internal(struct dc *dc, struct dc_state *co
        int vlevel = 0;
        int pipe_split_from[MAX_PIPES];
        int pipe_cnt = 0;
-       display_e2e_pipe_params_st *pipes = kzalloc(dc->res_pool->pipe_count * sizeof(display_e2e_pipe_params_st), GFP_KERNEL);
+       display_e2e_pipe_params_st *pipes = kzalloc(dc->res_pool->pipe_count * sizeof(display_e2e_pipe_params_st), GFP_ATOMIC);
        DC_LOGGER_INIT(dc->ctx->logger);
 
        BW_VAL_TRACE_COUNT();