dma-buf: cleanup dma_fence_chain_walk
Commit Message
Use unrcu_pointer() instead of the manual cast.
Signed-off-by: Christian König <christian.koenig@amd.com>
---
drivers/dma-buf/dma-fence-chain.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
Comments
On Wed, May 18, 2022 at 10:54:46AM +0200, Christian König wrote:
> Use unrcu_pointer() instead of the manual cast.
>
> Signed-off-by: Christian König <christian.koenig@amd.com>
TIL about unrcu_pointer, and also that entire code here freaks me out. But
at least this seems more with what other users of similar xchg and cmpxchg
tricks are doing, so that's nice.
Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
> ---
> drivers/dma-buf/dma-fence-chain.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/dma-buf/dma-fence-chain.c b/drivers/dma-buf/dma-fence-chain.c
> index 06f8ef97c6e8..a0d920576ba6 100644
> --- a/drivers/dma-buf/dma-fence-chain.c
> +++ b/drivers/dma-buf/dma-fence-chain.c
> @@ -62,8 +62,8 @@ struct dma_fence *dma_fence_chain_walk(struct dma_fence *fence)
> replacement = NULL;
> }
>
> - tmp = cmpxchg((struct dma_fence __force **)&chain->prev,
> - prev, replacement);
> + tmp = unrcu_pointer(cmpxchg(&chain->prev, RCU_INITIALIZER(prev),
> + RCU_INITIALIZER(replacement)));
> if (tmp == prev)
> dma_fence_put(tmp);
> else
> --
> 2.25.1
>
@@ -62,8 +62,8 @@ struct dma_fence *dma_fence_chain_walk(struct dma_fence *fence)
replacement = NULL;
}
- tmp = cmpxchg((struct dma_fence __force **)&chain->prev,
- prev, replacement);
+ tmp = unrcu_pointer(cmpxchg(&chain->prev, RCU_INITIALIZER(prev),
+ RCU_INITIALIZER(replacement)));
if (tmp == prev)
dma_fence_put(tmp);
else