s390/cpum_sf: Convert to cmpxchg128()
authorPeter Zijlstra <peterz@infradead.org>
Wed, 31 May 2023 13:08:45 +0000 (15:08 +0200)
committerPeter Zijlstra <peterz@infradead.org>
Mon, 5 Jun 2023 07:36:40 +0000 (09:36 +0200)
Now that there is a cross arch u128 and cmpxchg128(), use those
instead of the custom CDSG helper.

Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Reviewed-by: Arnd Bergmann <arnd@arndb.de>
Reviewed-by: Mark Rutland <mark.rutland@arm.com>
Acked-by: Heiko Carstens <hca@linux.ibm.com>
Tested-by: Mark Rutland <mark.rutland@arm.com>
Link: https://lore.kernel.org/r/20230531132324.058821078@infradead.org
arch/s390/include/asm/cpu_mf.h
arch/s390/kernel/perf_cpum_sf.c

index 7e417d7..a0de5b9 100644 (file)
@@ -140,7 +140,7 @@ union hws_trailer_header {
                unsigned int dsdes:16;  /* 48-63: size of diagnostic SDE */
                unsigned long long overflow; /* 64 - Overflow Count   */
        };
-       __uint128_t val;
+       u128 val;
 };
 
 struct hws_trailer_entry {
index 7ef72f5..8ecfbce 100644 (file)
@@ -1271,16 +1271,6 @@ static void hw_collect_samples(struct perf_event *event, unsigned long *sdbt,
        }
 }
 
-static inline __uint128_t __cdsg(__uint128_t *ptr, __uint128_t old, __uint128_t new)
-{
-       asm volatile(
-               "       cdsg    %[old],%[new],%[ptr]\n"
-               : [old] "+d" (old), [ptr] "+QS" (*ptr)
-               : [new] "d" (new)
-               : "memory", "cc");
-       return old;
-}
-
 /* hw_perf_event_update() - Process sampling buffer
  * @event:     The perf event
  * @flush_all: Flag to also flush partially filled sample-data-blocks
@@ -1352,7 +1342,7 @@ static void hw_perf_event_update(struct perf_event *event, int flush_all)
                        new.f = 0;
                        new.a = 1;
                        new.overflow = 0;
-                       prev.val = __cdsg(&te->header.val, old.val, new.val);
+                       prev.val = cmpxchg128(&te->header.val, old.val, new.val);
                } while (prev.val != old.val);
 
                /* Advance to next sample-data-block */
@@ -1562,7 +1552,7 @@ static bool aux_set_alert(struct aux_buffer *aux, unsigned long alert_index,
                }
                new.a = 1;
                new.overflow = 0;
-               prev.val = __cdsg(&te->header.val, old.val, new.val);
+               prev.val = cmpxchg128(&te->header.val, old.val, new.val);
        } while (prev.val != old.val);
        return true;
 }
@@ -1636,7 +1626,7 @@ static bool aux_reset_buffer(struct aux_buffer *aux, unsigned long range,
                                new.a = 1;
                        else
                                new.a = 0;
-                       prev.val = __cdsg(&te->header.val, old.val, new.val);
+                       prev.val = cmpxchg128(&te->header.val, old.val, new.val);
                } while (prev.val != old.val);
                *overflow += orig_overflow;
        }