[PATCH] drm/amdgpu: skip force complete fences when ring is uninitialized
Chen, Guchun
Guchun.Chen at amd.com
Wed May 31 06:21:01 UTC 2023
[Public]
Reviewed-by: Guchun Chen <guchun.chen at amd.com>
Regards,
Guchun
> -----Original Message-----
> From: Bob Zhou <bob.zhou at amd.com>
> Sent: Wednesday, May 31, 2023 12:48 PM
> To: amd-gfx at lists.freedesktop.org; Min, Frank <Frank.Min at amd.com>;
> Koenig, Christian <Christian.Koenig at amd.com>
> Cc: Chen, Guchun <Guchun.Chen at amd.com>; Zhou, Bob
> <Bob.Zhou at amd.com>
> Subject: [PATCH] drm/amdgpu: skip force complete fences when ring is
> uninitialized
>
> uvd ring in uvd_v7_0_sw_init only initializes ring in bare metal case, so when
> executing amdgpu_uvd_resume to restore fence seq in SRIOV, a null pointer
> dereference will occur. This patch correct this.
>
> Fixes: 043f2271e2d0a ("drm/amdgpu: mark force completed fences with -
> ECANCELED")
>
> BUG: kernel NULL pointer dereference, address: 0000000000000000
> Oops: 0000 [#1] PREEMPT SMP PTI
> RIP: 0010:amdgpu_fence_driver_set_error+0x3f/0xc0 [amdgpu] Call Trace:
> <TASK>
> amdgpu_fence_driver_force_completion+0x18/0x50 [amdgpu]
> amdgpu_uvd_resume+0x1b2/0x380 [amdgpu]
> ? amdgpu_ring_init+0x73c/0x820 [amdgpu]
> uvd_v7_0_sw_init+0x358/0x450 [amdgpu]
> amdgpu_device_init.cold+0x198c/0x1fdf [amdgpu] ?
> pci_bus_read_config_byte+0x40/0x80
> ? pci_read_config_byte+0x27/0x50
> amdgpu_driver_load_kms+0x1a/0x160 [amdgpu]
> amdgpu_pci_probe+0x186/0x3c0 [amdgpu]
>
> Signed-off-by: Bob Zhou <bob.zhou at amd.com>
> ---
> drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c
> index c694b41f6461..d2c5484309a6 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c
> @@ -723,6 +723,8 @@ void amdgpu_fence_driver_set_error(struct
> amdgpu_ring *ring, int error)
> */
> void amdgpu_fence_driver_force_completion(struct amdgpu_ring *ring) {
> + if (ring->fence_drv.irq_src)
> + return;
> amdgpu_fence_driver_set_error(ring, -ECANCELED);
> amdgpu_fence_write(ring, ring->fence_drv.sync_seq);
> amdgpu_fence_process(ring);
> --
> 2.34.1
More information about the amd-gfx
mailing list