Applied. Thanks! Alex On Mon, Jul 3, 2023 at 7:16 PM Uros Bizjak <ubizjak@xxxxxxxxx> wrote: > > Use local64_try_cmpxchg instead of local64_cmpxchg (*ptr, old, new) == old > in amdgpu_perf_read. x86 CMPXCHG instruction returns success in ZF flag, > so this change saves a compare after cmpxchg (and related move instruction > in front of cmpxchg). > > Also, try_cmpxchg implicitly assigns old *ptr value to "old" when cmpxchg > fails. There is no need to re-read the value in the loop. > > No functional change intended. > > Cc: Alex Deucher <alexander.deucher@xxxxxxx> > Cc: "Christian König" <christian.koenig@xxxxxxx> > Cc: "Pan, Xinhui" <Xinhui.Pan@xxxxxxx> > Cc: David Airlie <airlied@xxxxxxxxx> > Cc: Daniel Vetter <daniel@xxxxxxxx> > Signed-off-by: Uros Bizjak <ubizjak@xxxxxxxxx> > --- > drivers/gpu/drm/amd/amdgpu/amdgpu_pmu.c | 5 ++--- > 1 file changed, 2 insertions(+), 3 deletions(-) > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_pmu.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_pmu.c > index 71ee361d0972..6e91ea1de5aa 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_pmu.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_pmu.c > @@ -276,9 +276,8 @@ static void amdgpu_perf_read(struct perf_event *event) > (!pe->adev->df.funcs->pmc_get_count)) > return; > > + prev = local64_read(&hwc->prev_count); > do { > - prev = local64_read(&hwc->prev_count); > - > switch (hwc->config_base) { > case AMDGPU_PMU_EVENT_CONFIG_TYPE_DF: > case AMDGPU_PMU_EVENT_CONFIG_TYPE_XGMI: > @@ -289,7 +288,7 @@ static void amdgpu_perf_read(struct perf_event *event) > count = 0; > break; > } > - } while (local64_cmpxchg(&hwc->prev_count, prev, count) != prev); > + } while (!local64_try_cmpxchg(&hwc->prev_count, &prev, count)); > > local64_add(count - prev, &event->count); > } > -- > 2.41.0 >