[PATCH] drm/amdgpu: skip disabling fence driver src_irqs when device is unplugged

Deucher, Alexander Alexander.Deucher at amd.com
Tue May 9 13:36:56 UTC 2023


[Public]

> -----Original Message-----
> From: amd-gfx <amd-gfx-bounces at lists.freedesktop.org> On Behalf Of
> Guchun Chen
> Sent: Tuesday, May 9, 2023 4:25 AM
> To: amd-gfx at lists.freedesktop.org; Deucher, Alexander
> <Alexander.Deucher at amd.com>; Zhang, Hawking
> <Hawking.Zhang at amd.com>; Koenig, Christian
> <Christian.Koenig at amd.com>
> Cc: Chen, Guchun <Guchun.Chen at amd.com>
> Subject: [PATCH] drm/amdgpu: skip disabling fence driver src_irqs when
> device is unplugged
> 
> When performing device unbind or halt, we have disabled all irqs at the very
> begining like amdgpu_pci_remove or amdgpu_device_halt. So
> amdgpu_irq_put for irqs stored in fence driver should not be called any
> more, otherwise, below calltrace will arrive.
> 
> [  139.114088] WARNING: CPU: 2 PID: 1550 at
> drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c:616
> amdgpu_irq_put+0xf6/0x110 [amdgpu] [  139.114655] Call Trace:
> [  139.114655]  <TASK>
> [  139.114657]  amdgpu_fence_driver_hw_fini+0x93/0x130 [amdgpu] [
> 139.114836]  amdgpu_device_fini_hw+0xb6/0x350 [amdgpu] [  139.114955]
> amdgpu_driver_unload_kms+0x51/0x70 [amdgpu] [  139.115075]
> amdgpu_pci_remove+0x63/0x160 [amdgpu] [  139.115193]  ?
> __pm_runtime_resume+0x64/0x90 [  139.115195]
> pci_device_remove+0x3a/0xb0 [  139.115197]  device_remove+0x43/0x70 [
> 139.115198]  device_release_driver_internal+0xbd/0x140
> 
> Signed-off-by: Guchun Chen <guchun.chen at amd.com>

Acked-by: Alex Deucher <alexander.deucher at amd.com>

> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c
> index 5d96f630a3aa..d0ed70f45db7 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c
> @@ -581,7 +581,8 @@ void amdgpu_fence_driver_hw_fini(struct
> amdgpu_device *adev)
>  		if (r)
>  			amdgpu_fence_driver_force_completion(ring);
> 
> -		if (ring->fence_drv.irq_src)
> +		if (!drm_dev_is_unplugged(adev_to_drm(adev)) &&
> +		    ring->fence_drv.irq_src)
>  			amdgpu_irq_put(adev, ring->fence_drv.irq_src,
>  				       ring->fence_drv.irq_type);
> 
> --
> 2.25.1


More information about the amd-gfx mailing list