Message ID | 20200125114624.2093235-1-steve@sk2.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | amdgpu: use dma-resv API instead of manual kmalloc | expand |
And of course I forgot this is an internal API, so this doesn't work without some of other stuff which isn't ready. Please ignore... Regards, Stephen Le 25/01/2020 12:46, Stephen Kitt a écrit : > 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@sk2.org> > --- > 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 */
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 */
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@sk2.org> --- drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-)