mirror of
https://github.com/torvalds/linux.git
synced 2026-05-22 14:12:07 +02:00
[Why]
dcn32_validate_bandwidth() wraps dcn32_internal_validate_bw() with
DC_FP_START()/DC_FP_END(). In x86 non-RT, DC_FP_START takes fpregs_lock(),
which disables local softirqs.
The DML1 path through dcn32_enable_phantom_plane() calls kvzalloc() to
allocate ~335 KiB for dc_plane_state. This triggers the vmalloc path,
which calls BUG_ON(in_interrupt()) because it's invoked within the
FPU-enabled (softirq disabled) region, leading to a kernel crash.
[How]
Wrap the dc_state_create_phantom_plane() call with the
DC_RUN_WITH_PREEMPTION_ENABLED() macro to allow preemption during
this memory allocation.
Fixes:
|
||
|---|---|---|
| .. | ||
| dce60 | ||
| dce80 | ||
| dce100 | ||
| dce110 | ||
| dce112 | ||
| dce120 | ||
| dcn10 | ||
| dcn20 | ||
| dcn21 | ||
| dcn30 | ||
| dcn31 | ||
| dcn32 | ||
| dcn35 | ||
| dcn36 | ||
| dcn42 | ||
| dcn201 | ||
| dcn301 | ||
| dcn302 | ||
| dcn303 | ||
| dcn314 | ||
| dcn315 | ||
| dcn316 | ||
| dcn321 | ||
| dcn351 | ||
| dcn401 | ||
| Makefile | ||