Commit b66596f6 authored by Guchun Chen's avatar Guchun Chen Committed by Alex Deucher

drm/amd/display: fix null pointer access in gpu reset

During GPU reset, when receiving a DMCUB OUTBUX0 interrupt,
DAL code will set it to be OUTBOX interrupt and sets hw interrupt.
However, OUTBOX interrupt is not registered yet, so a NULL pointer
access will be executed.

Call Trace:
  dal_irq_service_set+0x30/0x90 [amdgpu]
  dc_interrupt_set+0x24/0x30 [amdgpu]
  amdgpu_dm_set_dmub_outbox_irq_state+0x22/0x30 [amdgpu]
  amdgpu_irq_update+0x77/0xa0 [amdgpu]
  amdgpu_irq_gpu_reset_resume_helper+0x67/0xa0 [amdgpu]
  amdgpu_do_asic_reset+0x219/0x260 [amdgpu]
  amdgpu_device_gpu_recover.cold+0x8c5/0xb64 [amdgpu]
  amdgpu_debugfs_gpu_recover_show+0x2c/0x60 [amdgpu]
  seq_read_iter+0xc2/0x450
  ? do_anonymous_page+0x22c/0x3b0
  seq_read+0xf9/0x140
  full_proxy_read+0x5c/0x90
  vfs_read+0xaa/0x190
  ksys_read+0x67/0xe0
  __x64_sys_read+0x1a/0x20

Fixes: effbf6ca ("drm/amdgpu/display: remove an old DCN3 guard")
Signed-off-by: default avatarGuchun Chen <guchun.chen@amd.com>
Reviewed-and-tested-by: default avatarEvan Quan <evan.quan@amd.com>
Reviewed-by: default avatarHarry Wentland <harry.wentland@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent e38ca7e4
...@@ -119,7 +119,7 @@ bool dal_irq_service_set( ...@@ -119,7 +119,7 @@ bool dal_irq_service_set(
dal_irq_service_ack(irq_service, source); dal_irq_service_ack(irq_service, source);
if (info->funcs->set) if (info->funcs && info->funcs->set)
return info->funcs->set(irq_service, info, enable); return info->funcs->set(irq_service, info, enable);
dal_irq_service_set_generic(irq_service, info, enable); dal_irq_service_set_generic(irq_service, info, enable);
...@@ -153,7 +153,7 @@ bool dal_irq_service_ack( ...@@ -153,7 +153,7 @@ bool dal_irq_service_ack(
return false; return false;
} }
if (info->funcs->ack) if (info->funcs && info->funcs->ack)
return info->funcs->ack(irq_service, info); return info->funcs->ack(irq_service, info);
dal_irq_service_ack_generic(irq_service, info); dal_irq_service_ack_generic(irq_service, info);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment