Skip to content

Commit 59d2736

Browse files
Jack Xiaogregkh
authored andcommitted
drm/amdgpu: avoid dereferencing a NULL pointer
[ Upstream commit 55611b5 ] Check if irq_src is NULL to avoid dereferencing a NULL pointer, for MES ring is uneccessary to recieve an interrupt notification. Signed-off-by: Jack Xiao <Jack.Xiao@amd.com> Acked-by: Alex Deucher <alexander.deucher@amd.com> Reviewed-by: Hawking Zhang <Hawking.Zhang@amd.com> Reviewed-by: Christian König <christian.koenig@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
1 parent 5e5bcbb commit 59d2736

1 file changed

Lines changed: 12 additions & 7 deletions

File tree

drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -396,7 +396,9 @@ int amdgpu_fence_driver_start_ring(struct amdgpu_ring *ring,
396396
ring->fence_drv.gpu_addr = adev->uvd.inst[ring->me].gpu_addr + index;
397397
}
398398
amdgpu_fence_write(ring, atomic_read(&ring->fence_drv.last_seq));
399-
amdgpu_irq_get(adev, irq_src, irq_type);
399+
400+
if (irq_src)
401+
amdgpu_irq_get(adev, irq_src, irq_type);
400402

401403
ring->fence_drv.irq_src = irq_src;
402404
ring->fence_drv.irq_type = irq_type;
@@ -508,8 +510,9 @@ void amdgpu_fence_driver_fini(struct amdgpu_device *adev)
508510
/* no need to trigger GPU reset as we are unloading */
509511
amdgpu_fence_driver_force_completion(ring);
510512
}
511-
amdgpu_irq_put(adev, ring->fence_drv.irq_src,
512-
ring->fence_drv.irq_type);
513+
if (ring->fence_drv.irq_src)
514+
amdgpu_irq_put(adev, ring->fence_drv.irq_src,
515+
ring->fence_drv.irq_type);
513516
drm_sched_fini(&ring->sched);
514517
del_timer_sync(&ring->fence_drv.fallback_timer);
515518
for (j = 0; j <= ring->fence_drv.num_fences_mask; ++j)
@@ -545,8 +548,9 @@ void amdgpu_fence_driver_suspend(struct amdgpu_device *adev)
545548
}
546549

547550
/* disable the interrupt */
548-
amdgpu_irq_put(adev, ring->fence_drv.irq_src,
549-
ring->fence_drv.irq_type);
551+
if (ring->fence_drv.irq_src)
552+
amdgpu_irq_put(adev, ring->fence_drv.irq_src,
553+
ring->fence_drv.irq_type);
550554
}
551555
}
552556

@@ -572,8 +576,9 @@ void amdgpu_fence_driver_resume(struct amdgpu_device *adev)
572576
continue;
573577

574578
/* enable the interrupt */
575-
amdgpu_irq_get(adev, ring->fence_drv.irq_src,
576-
ring->fence_drv.irq_type);
579+
if (ring->fence_drv.irq_src)
580+
amdgpu_irq_get(adev, ring->fence_drv.irq_src,
581+
ring->fence_drv.irq_type);
577582
}
578583
}
579584

0 commit comments

Comments
 (0)