]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
s390/perf_cpum_cf: Convert to use local64_try_cmpxchg()
authorHeiko Carstens <hca@linux.ibm.com>
Wed, 6 Nov 2024 10:03:18 +0000 (11:03 +0100)
committerHeiko Carstens <hca@linux.ibm.com>
Tue, 12 Nov 2024 13:01:29 +0000 (14:01 +0100)
Convert local64_cmpxchg() usages to local64_try_cmpxchg() in
order to generate slightly better code.

Reviewed-by: Juergen Christ <jchrist@linux.ibm.com>
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
arch/s390/kernel/perf_cpum_cf.c

index e0e178073cb58a09559c1254e1beb79f532b422c..b0bc68da6a116fd3e1379fbec8f818d57e5c52a7 100644 (file)
@@ -879,8 +879,8 @@ static int hw_perf_event_reset(struct perf_event *event)
        u64 prev, new;
        int err;
 
+       prev = local64_read(&event->hw.prev_count);
        do {
-               prev = local64_read(&event->hw.prev_count);
                err = ecctr(event->hw.config, &new);
                if (err) {
                        if (err != 3)
@@ -892,7 +892,7 @@ static int hw_perf_event_reset(struct perf_event *event)
                         */
                        new = 0;
                }
-       } while (local64_cmpxchg(&event->hw.prev_count, prev, new) != prev);
+       } while (!local64_try_cmpxchg(&event->hw.prev_count, &prev, new));
 
        return err;
 }
@@ -902,12 +902,12 @@ static void hw_perf_event_update(struct perf_event *event)
        u64 prev, new, delta;
        int err;
 
+       prev = local64_read(&event->hw.prev_count);
        do {
-               prev = local64_read(&event->hw.prev_count);
                err = ecctr(event->hw.config, &new);
                if (err)
                        return;
-       } while (local64_cmpxchg(&event->hw.prev_count, prev, new) != prev);
+       } while (!local64_try_cmpxchg(&event->hw.prev_count, &prev, new));
 
        delta = (prev <= new) ? new - prev
                              : (-1ULL - prev) + new + 1;        /* overflow */