Skip to content

Commit afe9555

Browse files
committed
drm/amd/display: use pre-allocated temp structure for bounding box
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+ #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]
1 parent faa64f6 commit afe9555

File tree

3 files changed

+5
-12
lines changed

3 files changed

+5
-12
lines changed

drivers/gpu/drm/amd/display/dc/dc.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1445,6 +1445,7 @@ struct dc {
14451445
} scratch;
14461446

14471447
struct dml2_configuration_options dml2_options;
1448+
struct dml2_configuration_options dml2_tmp;
14481449
enum dc_acpi_cm_power_state power_state;
14491450

14501451
};

drivers/gpu/drm/amd/display/dc/resource/dcn32/dcn32_resource.c

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2011,11 +2011,9 @@ void dcn32_calculate_wm_and_dlg(struct dc *dc, struct dc_state *context,
20112011

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

2016-
dml2_opt = kmemdup(&dc->dml2_options, sizeof(dc->dml2_options), GFP_KERNEL);
2017-
if (!dml2_opt)
2018-
return;
2016+
memcpy(dml2_opt, &dc->dml2_options, sizeof(dc->dml2_options));
20192017

20202018
DC_FP_START();
20212019

@@ -2030,8 +2028,6 @@ static void dcn32_update_bw_bounding_box(struct dc *dc, struct clk_bw_params *bw
20302028
dml2_reinit(dc, dml2_opt, &dc->current_state->bw_ctx.dml2_dc_power_source);
20312029

20322030
DC_FP_END();
2033-
2034-
kfree(dml2_opt);
20352031
}
20362032

20372033
static struct resource_funcs dcn32_res_pool_funcs = {

drivers/gpu/drm/amd/display/dc/resource/dcn321/dcn321_resource.c

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1581,11 +1581,9 @@ static struct dc_cap_funcs cap_funcs = {
15811581

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

1586-
dml2_opt = kmemdup(&dc->dml2_options, sizeof(dc->dml2_options), GFP_KERNEL);
1587-
if (!dml2_opt)
1588-
return;
1586+
memcpy(dml2_opt, &dc->dml2_options, sizeof(dc->dml2_options));
15891587

15901588
DC_FP_START();
15911589

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

16021600
DC_FP_END();
1603-
1604-
kfree(dml2_opt);
16051601
}
16061602

16071603
static struct resource_funcs dcn321_res_pool_funcs = {

0 commit comments

Comments
 (0)