<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<p style="font-family:Arial;font-size:10pt;color:#008000;margin:15pt;" align="Left">
[Public]<br>
</p>
<br>
<div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Acked-by: Alex Deucher <alexander.deucher@amd.com><br>
</div>
<div id="appendonsend"></div>
<hr style="display:inline-block;width:98%" tabindex="-1">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" style="font-size:11pt" color="#000000"><b>From:</b> amd-gfx <amd-gfx-bounces@lists.freedesktop.org> on behalf of CHANDAN VURDIGERE NATARAJ <chandan.vurdigerenataraj@amd.com><br>
<b>Sent:</b> Tuesday, March 29, 2022 4:29 AM<br>
<b>To:</b> Wentland, Harry <Harry.Wentland@amd.com>; Li, Sun peng (Leo) <Sunpeng.Li@amd.com>; Deucher, Alexander <Alexander.Deucher@amd.com><br>
<b>Cc:</b> VURDIGERENATARAJ, CHANDAN <CHANDAN.VURDIGERENATARAJ@amd.com>; amd-gfx@lists.freedesktop.org <amd-gfx@lists.freedesktop.org><br>
<b>Subject:</b> [PATCH] drm/amd/display: Fix by adding FPU protection for dcn30_internal_validate_bw</font>
<div> </div>
</div>
<div class="BodyFragment"><font size="2"><span style="font-size:11pt;">
<div class="PlainText">[WHY]<br>
Below general protection fault observed when WebGL Aquarium is run for<br>
longer duration. If drm debug logs are enabled and set to 0x1f then the<br>
issue is observed within 10 minutes of run.<br>
<br>
[  100.717056] general protection fault, probably for non-canonical address 0x2d33302d32323032: 0000 [#1] PREEMPT SMP NOPTI<br>
[  100.727921] CPU: 3 PID: 1906 Comm: DrmThread Tainted: G        W         5.15.30 #12 d726c6a2d6ebe5cf9223931cbca6892f916fe18b<br>
[  100.754419] RIP: 0010:CalculateSwathWidth+0x1f7/0x44f<br>
[  100.767109] Code: 00 00 00 f2 42 0f 11 04 f0 48 8b 85 88 00 00 00 f2 42 0f 10 04 f0 48 8b 85 98 00 00 00 f2 42 0f 11 04 f0 48 8b 45 10 0f 57 c0 <f3> 42 0f 2a 04 b0 0f 57 c9 f3 43 0f 2a 0c b4 e8 8c e2 f3 ff 48 8b<br>
[  100.781269] RSP: 0018:ffffa9230079eeb0 EFLAGS: 00010246<br>
[  100.812528] RAX: 2d33302d32323032 RBX: 0000000000000500 RCX: 0000000000000000<br>
[  100.819656] RDX: 0000000000000001 RSI: ffff99deb712c49c RDI: 0000000000000000<br>
[  100.826781] RBP: ffffa9230079ef50 R08: ffff99deb712460c R09: ffff99deb712462c<br>
[  100.833907] R10: ffff99deb7124940 R11: ffff99deb7124d70 R12: ffff99deb712ae44<br>
[  100.841033] R13: 0000000000000001 R14: 0000000000000000 R15: ffffa9230079f0a0<br>
[  100.848159] FS:  00007af121212640(0000) GS:ffff99deba780000(0000) knlGS:0000000000000000<br>
[  100.856240] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033<br>
[  100.861980] CR2: 0000209000fe1000 CR3: 000000011b18c000 CR4: 0000000000350ee0<br>
[  100.869106] Call Trace:<br>
[  100.871555]  <TASK><br>
[  100.873655]  ? asm_sysvec_reschedule_ipi+0x12/0x20<br>
[  100.878449]  CalculateSwathAndDETConfiguration+0x1a3/0x6dd<br>
[  100.883937]  dml31_ModeSupportAndSystemConfigurationFull+0x2ce4/0x76da<br>
[  100.890467]  ? kallsyms_lookup_buildid+0xc8/0x163<br>
[  100.895173]  ? kallsyms_lookup_buildid+0xc8/0x163<br>
[  100.899874]  ? __sprint_symbol+0x80/0x135<br>
[  100.903883]  ? dm_update_plane_state+0x3f9/0x4d2<br>
[  100.908500]  ? symbol_string+0xb7/0xde<br>
[  100.912250]  ? number+0x145/0x29b<br>
[  100.915566]  ? vsnprintf+0x341/0x5ff<br>
[  100.919141]  ? desc_read_finalized_seq+0x39/0x87<br>
[  100.923755]  ? update_load_avg+0x1b9/0x607<br>
[  100.927849]  ? compute_mst_dsc_configs_for_state+0x7d/0xd5b<br>
[  100.933416]  ? fetch_pipe_params+0xa4d/0xd0c<br>
[  100.937686]  ? dc_fpu_end+0x3d/0xa8<br>
[  100.941175]  dml_get_voltage_level+0x16b/0x180<br>
[  100.945619]  dcn30_internal_validate_bw+0x10e/0x89b<br>
[  100.950495]  ? dcn31_validate_bandwidth+0x68/0x1fc<br>
[  100.955285]  ? resource_build_scaling_params+0x98b/0xb8c<br>
[  100.960595]  ? dcn31_validate_bandwidth+0x68/0x1fc<br>
[  100.965384]  dcn31_validate_bandwidth+0x9a/0x1fc<br>
[  100.970001]  dc_validate_global_state+0x238/0x295<br>
[  100.974703]  amdgpu_dm_atomic_check+0x9c1/0xbce<br>
[  100.979235]  ? _printk+0x59/0x73<br>
[  100.982467]  drm_atomic_check_only+0x403/0x78b<br>
[  100.986912]  drm_mode_atomic_ioctl+0x49b/0x546<br>
[  100.991358]  ? drm_ioctl+0x1c1/0x3b3<br>
[  100.994936]  ? drm_atomic_set_property+0x92a/0x92a<br>
[  100.999725]  drm_ioctl_kernel+0xdc/0x149<br>
[  101.003648]  drm_ioctl+0x27f/0x3b3<br>
[  101.007051]  ? drm_atomic_set_property+0x92a/0x92a<br>
[  101.011842]  amdgpu_drm_ioctl+0x49/0x7d<br>
[  101.015679]  __se_sys_ioctl+0x7c/0xb8<br>
[  101.015685]  do_syscall_64+0x5f/0xb8<br>
[  101.015690]  ? __irq_exit_rcu+0x34/0x96<br>
<br>
[HOW]<br>
It calles populate_dml_pipes which uses doubles to initialize.<br>
Adding FPU protection avoids context switch and probable loss of vba context<br>
as there is potential contention while drm debug logs are enabled.<br>
<br>
Signed-off-by: CHANDAN VURDIGERE NATARAJ <chandan.vurdigerenataraj@amd.com><br>
<br>
diff --git a/drivers/gpu/drm/amd/display/dc/dcn31/dcn31_resource.c b/drivers/gpu/drm/amd/display/dc/dcn31/dcn31_resource.c<br>
index 826970f2bd0a..f27262417abe 100644<br>
--- a/drivers/gpu/drm/amd/display/dc/dcn31/dcn31_resource.c<br>
+++ b/drivers/gpu/drm/amd/display/dc/dcn31/dcn31_resource.c<br>
@@ -1750,7 +1750,9 @@ bool dcn31_validate_bandwidth(struct dc *dc,<br>
 <br>
         BW_VAL_TRACE_COUNT();<br>
 <br>
+       DC_FP_START();<br>
         out = dcn30_internal_validate_bw(dc, context, pipes, &pipe_cnt, &vlevel, fast_validate);<br>
+       DC_FP_END();<br>
 <br>
         // Disable fast_validate to set min dcfclk in alculate_wm_and_dlg<br>
         if (pipe_cnt == 0)<br>
-- <br>
2.25.1<br>
<br>
</div>
</span></font></div>
</div>
</body>
</html>