Skip to content

Commit

Permalink
drm/amd/display: use pre-allocated temp structure for bounding box
Browse files Browse the repository at this point in the history
[ Upstream commit afe9555 ]

This mirrors what the driver does for older DCN generations.

Should fix:

BUG: sleeping function called from invalid context at include/linux/sched/mm.h:306
in_atomic(): 1, irqs_disabled(): 0, non_block: 0, pid: 449, name: kworker/u64:8
preempt_count: 2, expected: 0
RCU nest depth: 0, expected: 0
Preemption disabled at:
ffffffffc0ce1580>] dc_fpu_begin+0x30/0xd0 [amdgpu]
CPU: 5 PID: 449 Comm: kworker/u64:8 Tainted: G        W          6.8.0+ torvalds#35
Hardware name: System manufacturer System Product Name/ROG STRIX X570-E GAMING WIFI II, BIOS 4204 02/24/2022
Workqueue: events_unbound async_run_entry_fn

v2: drop extra memcpy

Fixes: 88c6182 ("drm/amd/display: dynamically allocate dml2_configuration_options structures")
Reviewed-by: Harry Wentland <[email protected]>
Tested-by: George Zhang <[email protected]> (v1)
Suggested-by: Hamza Mahfooz <[email protected]>
Signed-off-by: Alex Deucher <[email protected]>
Cc: George Zhang <[email protected]>
Cc: Arnd Bergmann <[email protected]>
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Signed-off-by: Sasha Levin <[email protected]>
  • Loading branch information
alexdeucher authored and gregkh committed Aug 3, 2024
1 parent 898d200 commit 23f5e18
Show file tree
Hide file tree
Showing 3 changed files with 5 additions and 12 deletions.
1 change: 1 addition & 0 deletions drivers/gpu/drm/amd/display/dc/dc.h
Original file line number Diff line number Diff line change
Expand Up @@ -1392,6 +1392,7 @@ struct dc {
} scratch;

struct dml2_configuration_options dml2_options;
struct dml2_configuration_options dml2_tmp;
enum dc_acpi_cm_power_state power_state;

};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2006,11 +2006,9 @@ void dcn32_calculate_wm_and_dlg(struct dc *dc, struct dc_state *context,

static void dcn32_update_bw_bounding_box(struct dc *dc, struct clk_bw_params *bw_params)
{
struct dml2_configuration_options *dml2_opt;
struct dml2_configuration_options *dml2_opt = &dc->dml2_tmp;

dml2_opt = kmemdup(&dc->dml2_options, sizeof(dc->dml2_options), GFP_KERNEL);
if (!dml2_opt)
return;
memcpy(dml2_opt, &dc->dml2_options, sizeof(dc->dml2_options));

DC_FP_START();

Expand All @@ -2025,8 +2023,6 @@ static void dcn32_update_bw_bounding_box(struct dc *dc, struct clk_bw_params *bw
dml2_reinit(dc, dml2_opt, &dc->current_state->bw_ctx.dml2_dc_power_source);

DC_FP_END();

kfree(dml2_opt);
}

static struct resource_funcs dcn32_res_pool_funcs = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1581,11 +1581,9 @@ static struct dc_cap_funcs cap_funcs = {

static void dcn321_update_bw_bounding_box(struct dc *dc, struct clk_bw_params *bw_params)
{
struct dml2_configuration_options *dml2_opt;
struct dml2_configuration_options *dml2_opt = &dc->dml2_tmp;

dml2_opt = kmemdup(&dc->dml2_options, sizeof(dc->dml2_options), GFP_KERNEL);
if (!dml2_opt)
return;
memcpy(dml2_opt, &dc->dml2_options, sizeof(dc->dml2_options));

DC_FP_START();

Expand All @@ -1600,8 +1598,6 @@ static void dcn321_update_bw_bounding_box(struct dc *dc, struct clk_bw_params *b
dml2_reinit(dc, dml2_opt, &dc->current_state->bw_ctx.dml2_dc_power_source);

DC_FP_END();

kfree(dml2_opt);
}

static struct resource_funcs dcn321_res_pool_funcs = {
Expand Down

0 comments on commit 23f5e18

Please sign in to comment.