On Mon, May 20, 2019 at 07:23:55PM +0200, Andrea Parri wrote: > These barriers only apply to the read-modify-write operations; in > particular, they do not apply to the atomic_set() primitive. > > Replace the barriers with smp_mb()s. > > Fixes: b1fc2839d2f92 ("drm/msm: Implement preemption for A5XX targets") > Cc: stable@xxxxxxxxxxxxxxx > Reported-by: "Paul E. McKenney" <paulmck@xxxxxxxxxxxxx> > Reported-by: Peter Zijlstra <peterz@xxxxxxxxxxxxx> > Signed-off-by: Andrea Parri <andrea.parri@xxxxxxxxxxxxxxxxxxxx> > Cc: Rob Clark <robdclark@xxxxxxxxx> > Cc: Sean Paul <sean@xxxxxxxxxx> > Cc: David Airlie <airlied@xxxxxxxx> > Cc: Daniel Vetter <daniel@xxxxxxxx> > Cc: Jordan Crouse <jcrouse@xxxxxxxxxxxxxx> > Cc: linux-arm-msm@xxxxxxxxxxxxxxx > Cc: dri-devel@xxxxxxxxxxxxxxxxxxxxx > Cc: freedreno@xxxxxxxxxxxxxxxxxxxxx > Cc: "Paul E. McKenney" <paulmck@xxxxxxxxxxxxx> > Cc: Peter Zijlstra <peterz@xxxxxxxxxxxxx> I'll go ahead and ack this - I'm not super clued in on atomic barriers, but this seems to be in the spirit of what we are trying to do to protect the atomic value. Rob can disagree, of course. Acked-by: Jordan Crouse <jcrouse@xxxxxxxxxxxxxx> > --- > drivers/gpu/drm/msm/adreno/a5xx_preempt.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/drivers/gpu/drm/msm/adreno/a5xx_preempt.c b/drivers/gpu/drm/msm/adreno/a5xx_preempt.c > index 3d62310a535fb..ee0820ee0c664 100644 > --- a/drivers/gpu/drm/msm/adreno/a5xx_preempt.c > +++ b/drivers/gpu/drm/msm/adreno/a5xx_preempt.c > @@ -39,10 +39,10 @@ static inline void set_preempt_state(struct a5xx_gpu *gpu, > * preemption or in the interrupt handler so barriers are needed > * before... > */ > - smp_mb__before_atomic(); > + smp_mb(); > atomic_set(&gpu->preempt_state, new); > /* ... and after*/ > - smp_mb__after_atomic(); > + smp_mb(); > } > > /* Write the most recent wptr for the given ring into the hardware */ > -- > 2.7.4 > -- The Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project