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@xxxxxxx> 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@xxxxxxxx> > --- > 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 > -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch