[Public] > -----Original Message----- > From: amd-gfx <amd-gfx-bounces@xxxxxxxxxxxxxxxxxxxxx> On Behalf Of > Guchun Chen > Sent: Tuesday, May 9, 2023 4:25 AM > To: amd-gfx@xxxxxxxxxxxxxxxxxxxxx; Deucher, Alexander > <Alexander.Deucher@xxxxxxx>; Zhang, Hawking > <Hawking.Zhang@xxxxxxx>; Koenig, Christian > <Christian.Koenig@xxxxxxx> > Cc: Chen, Guchun <Guchun.Chen@xxxxxxx> > 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@xxxxxxx> Acked-by: Alex Deucher <alexander.deucher@xxxxxxx> > --- > 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