[PATCH 1/2] dma-buf: Expand reservation_list to fill allocation
Michel Dänzer
michel at daenzer.net
Fri Jul 12 08:33:20 UTC 2019
On 2019-07-12 10:03 a.m., Chris Wilson wrote:
> Since kmalloc() will round up the allocation to the next slab size or
> page, it will normally return a pointer to a memory block bigger than we
> asked for. We can query for the actual size of the allocated block using
> ksize() and expand our variable size reservation_list to take advantage
> of that extra space.
>
> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> Cc: Christian König <christian.koenig at amd.com>
> Cc: Michel Dänzer <michel.daenzer at amd.com>
> ---
> drivers/dma-buf/reservation.c | 6 ++++--
> 1 file changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/dma-buf/reservation.c b/drivers/dma-buf/reservation.c
> index a6ac2b3a0185..80ecc1283d15 100644
> --- a/drivers/dma-buf/reservation.c
> +++ b/drivers/dma-buf/reservation.c
> @@ -153,7 +153,9 @@ int reservation_object_reserve_shared(struct reservation_object *obj,
> RCU_INIT_POINTER(new->shared[j++], fence);
> }
> new->shared_count = j;
> - new->shared_max = max;
> + new->shared_max =
> + (ksize(new) - offsetof(typeof(*new), shared)) /
> + sizeof(*new->shared);
>
> preempt_disable();
> write_seqcount_begin(&obj->seq);
> @@ -169,7 +171,7 @@ int reservation_object_reserve_shared(struct reservation_object *obj,
> return 0;
>
> /* Drop the references to the signaled fences */
> - for (i = k; i < new->shared_max; ++i) {
> + for (i = k; i < max; ++i) {
> struct dma_fence *fence;
>
> fence = rcu_dereference_protected(new->shared[i],
>
Nice, TIL about ksize(), wonder where else that could be used.
Reviewed-by: Michel Dänzer <michel.daenzer at amd.com>
P.S. According to scripts/get_maintainer.pl , this series should be sent
to more recipients for review.
--
Earthling Michel Dänzer | https://www.amd.com
Libre software enthusiast | Mesa and X developer
More information about the dri-devel
mailing list