s390/cpum_sf: use READ_ONCE_ALIGNED_128() instead of 128-bit cmpxchg
authorHeiko Carstens <hca@linux.ibm.com>
Fri, 24 Feb 2023 10:02:37 +0000 (11:02 +0100)
committerHeiko Carstens <hca@linux.ibm.com>
Tue, 28 Feb 2023 12:19:05 +0000 (13:19 +0100)
Use READ_ONCE_ALIGNED_128() to read the previous value in front of a
128-bit cmpxchg loop, instead of (mis-)using a 128-bit cmpxchg operation to
do the same.

This makes the code more readable and is faster.

Link: https://lore.kernel.org/r/20230224100237.3247871-3-hca@linux.ibm.com
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
arch/s390/kernel/perf_cpum_sf.c

index 79904a8..e7b867e 100644 (file)
@@ -1355,8 +1355,7 @@ static void hw_perf_event_update(struct perf_event *event, int flush_all)
                num_sdb++;
 
                /* Reset trailer (using compare-double-and-swap) */
-               /* READ_ONCE() 16 byte header */
-               prev.val = __cdsg(&te->header.val, 0, 0);
+               prev.val = READ_ONCE_ALIGNED_128(te->header.val);
                do {
                        old.val = prev.val;
                        new.val = prev.val;
@@ -1558,8 +1557,7 @@ static bool aux_set_alert(struct aux_buffer *aux, unsigned long alert_index,
        struct hws_trailer_entry *te;
 
        te = aux_sdb_trailer(aux, alert_index);
-       /* READ_ONCE() 16 byte header */
-       prev.val = __cdsg(&te->header.val, 0, 0);
+       prev.val = READ_ONCE_ALIGNED_128(te->header.val);
        do {
                old.val = prev.val;
                new.val = prev.val;
@@ -1637,8 +1635,7 @@ static bool aux_reset_buffer(struct aux_buffer *aux, unsigned long range,
        idx_old = idx = aux->empty_mark + 1;
        for (i = 0; i < range_scan; i++, idx++) {
                te = aux_sdb_trailer(aux, idx);
-               /* READ_ONCE() 16 byte header */
-               prev.val = __cdsg(&te->header.val, 0, 0);
+               prev.val = READ_ONCE_ALIGNED_128(te->header.val);
                do {
                        old.val = prev.val;
                        new.val = prev.val;