From 9093a5251f7cdf7b2360f42ee4ba310ca7aefd22 Mon Sep 17 00:00:00 2001 From: q66 Date: Sat, 8 Aug 2020 23:41:50 +0200 Subject: [PATCH] linux5.4: add navi dsc20 kernel alloc fix --- srcpkgs/linux5.4/patches/navi_alloc.patch | 33 +++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 srcpkgs/linux5.4/patches/navi_alloc.patch diff --git a/srcpkgs/linux5.4/patches/navi_alloc.patch b/srcpkgs/linux5.4/patches/navi_alloc.patch new file mode 100644 index 00000000000..02f794d63ec --- /dev/null +++ b/srcpkgs/linux5.4/patches/navi_alloc.patch @@ -0,0 +1,33 @@ +From 2fdd63feb95c6751526068c02f7512fd4bea6956 Mon Sep 17 00:00:00 2001 +From: Daniel Kolesa +Date: Sat, 8 Aug 2020 20:05:29 +0200 +Subject: [PATCH] dcn20_resource: use GFP_ATOMIC in validate_bandwidth_internal + +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 +--- + drivers/gpu/drm/amd/display/dc/dcn20/dcn20_resource.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/gpu/drm/amd/display/dc/dcn20/dcn20_resource.c b/drivers/gpu/drm/amd/display/dc/dcn20/dcn20_resource.c +index 2719cde..d37ede0 100644 +--- a/drivers/gpu/drm/amd/display/dc/dcn20/dcn20_resource.c ++++ b/drivers/gpu/drm/amd/display/dc/dcn20/dcn20_resource.c +@@ -3031,7 +3031,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(); +-- +2.28.0 +