From: Monk Liu Date: Tue, 21 Mar 2017 10:48:45 +0000 (+0800) Subject: drm/amdgpu:fix ring init sequence X-Git-Tag: v4.12-rc1~116^2~23^2~30 X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=e09706f46ebecf3ae39996772c0ece12e91d8c45;p=karo-tx-linux.git drm/amdgpu:fix ring init sequence ring->buf_mask need be set prior to ring_clear_ring invoke and fix ring_clear_ring as well which should use buf_mask instead of ptr_mask Signed-off-by: Monk Liu Reviewed-by: Alex Deucher Signed-off-by: Alex Deucher --- diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c index bfd4022210ed..783d52a007ea 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c @@ -235,6 +235,9 @@ int amdgpu_ring_init(struct amdgpu_device *adev, struct amdgpu_ring *ring, ring->ring_size = roundup_pow_of_two(max_dw * 4 * amdgpu_sched_hw_submission); + ring->buf_mask = (ring->ring_size / 4) - 1; + ring->ptr_mask = ring->funcs->support_64bit_ptrs ? + 0xffffffffffffffff : ring->buf_mask; /* Allocate ring buffer */ if (ring->ring_obj == NULL) { r = amdgpu_bo_create_kernel(adev, ring->ring_size, PAGE_SIZE, @@ -248,9 +251,6 @@ int amdgpu_ring_init(struct amdgpu_device *adev, struct amdgpu_ring *ring, } amdgpu_ring_clear_ring(ring); } - ring->buf_mask = (ring->ring_size / 4) - 1; - ring->ptr_mask = ring->funcs->support_64bit_ptrs ? - 0xffffffffffffffff : ring->buf_mask; ring->max_dw = max_dw; diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h index 9bc453f1855c..63e56398ca9a 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h @@ -195,7 +195,7 @@ void amdgpu_ring_fini(struct amdgpu_ring *ring); static inline void amdgpu_ring_clear_ring(struct amdgpu_ring *ring) { int i = 0; - while (i <= ring->ptr_mask) + while (i <= ring->buf_mask) ring->ring[i++] = ring->funcs->nop; }