Instead of hand-coding the dma_resv_list allocation, use dma_resv_list_alloc, which masks the shared_max handling. While we're at it, since we only need shared_count fences, allocate shared_count fences rather than shared_max. (This is the only place in the kernel, outside of dma-resv.c, which touches shared_max. This suggests we'd probably be better off without it!) Signed-off-by: Stephen Kitt <steve@xxxxxxx> --- drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c index 888209eb8cec..aec595752200 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c @@ -234,12 +234,11 @@ static int amdgpu_amdkfd_remove_eviction_fence(struct amdgpu_bo *bo, if (!old) return 0; - new = kmalloc(offsetof(typeof(*new), shared[old->shared_max]), - GFP_KERNEL); + new = dma_resv_list_alloc(old->shared_count); if (!new) return -ENOMEM; - /* Go through all the shared fences in the resevation object and sort + /* Go through all the shared fences in the reservation object and sort * the interesting ones to the end of the list. */ for (i = 0, j = old->shared_count, k = 0; i < old->shared_count; ++i) { @@ -253,7 +252,6 @@ static int amdgpu_amdkfd_remove_eviction_fence(struct amdgpu_bo *bo, else RCU_INIT_POINTER(new->shared[k++], f); } - new->shared_max = old->shared_max; new->shared_count = k; /* Install the new fence list, seqcount provides the barriers */ -- 2.24.1