Skip to content

Commit 2b2fe60

Browse files
compudjshuahkh
authored andcommitted
selftests/rseq: Use rseq_unqual_scalar_typeof in macros
Use rseq_unqual_scalar_typeof() rather than typeof() in macros to remove the volatile qualifier (if there is one in the input argument), thus generating better assembly code in those scenarios. Also add extra brackets around the "p" parameter in RSEQ_READ_ONCE(), RSEQ_WRITE_ONCE(), and rseq_unqual_scalar_typeof() across architectures to preserve expectations of operator priority. Here is an example that shows how operator priority may be an issue with missing parentheses: #define m(p) \ do { \ __typeof__(*p) v = 0; \ } while (0) void fct(unsigned long long *p1) { m(p1 + 1); /* works */ m(1 + p1); /* broken */ } Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com> Cc: Peter Zijlstra <peterz@infradead.org> Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
1 parent 0fbbf07 commit 2b2fe60

File tree

6 files changed

+13
-13
lines changed

6 files changed

+13
-13
lines changed

tools/testing/selftests/rseq/rseq-arm.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@
6666

6767
#define rseq_smp_load_acquire(p) \
6868
__extension__ ({ \
69-
__typeof(*p) ____p1 = RSEQ_READ_ONCE(*p); \
69+
rseq_unqual_scalar_typeof(*(p)) ____p1 = RSEQ_READ_ONCE(*(p)); \
7070
rseq_smp_mb(); \
7171
____p1; \
7272
})
@@ -76,7 +76,7 @@ __extension__ ({ \
7676
#define rseq_smp_store_release(p, v) \
7777
do { \
7878
rseq_smp_mb(); \
79-
RSEQ_WRITE_ONCE(*p, v); \
79+
RSEQ_WRITE_ONCE(*(p), v); \
8080
} while (0)
8181

8282
#define __RSEQ_ASM_DEFINE_TABLE(label, version, flags, start_ip, \

tools/testing/selftests/rseq/rseq-mips.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@
4545

4646
#define rseq_smp_load_acquire(p) \
4747
__extension__ ({ \
48-
__typeof(*p) ____p1 = RSEQ_READ_ONCE(*p); \
48+
rseq_unqual_scalar_typeof(*(p)) ____p1 = RSEQ_READ_ONCE(*(p)); \
4949
rseq_smp_mb(); \
5050
____p1; \
5151
})
@@ -55,7 +55,7 @@ __extension__ ({ \
5555
#define rseq_smp_store_release(p, v) \
5656
do { \
5757
rseq_smp_mb(); \
58-
RSEQ_WRITE_ONCE(*p, v); \
58+
RSEQ_WRITE_ONCE(*(p), v); \
5959
} while (0)
6060

6161
#if _MIPS_SZLONG == 64

tools/testing/selftests/rseq/rseq-ppc.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323

2424
#define rseq_smp_load_acquire(p) \
2525
__extension__ ({ \
26-
__typeof(*p) ____p1 = RSEQ_READ_ONCE(*p); \
26+
rseq_unqual_scalar_typeof(*(p)) ____p1 = RSEQ_READ_ONCE(*(p)); \
2727
rseq_smp_lwsync(); \
2828
____p1; \
2929
})
@@ -33,7 +33,7 @@ __extension__ ({ \
3333
#define rseq_smp_store_release(p, v) \
3434
do { \
3535
rseq_smp_lwsync(); \
36-
RSEQ_WRITE_ONCE(*p, v); \
36+
RSEQ_WRITE_ONCE(*(p), v); \
3737
} while (0)
3838

3939
/*

tools/testing/selftests/rseq/rseq-riscv.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,8 @@
3636

3737
#define rseq_smp_load_acquire(p) \
3838
__extension__ ({ \
39-
__typeof(*(p)) ____p1 = RSEQ_READ_ONCE(*(p)); \
40-
RISCV_FENCE(r, rw) \
39+
rseq_unqual_scalar_typeof(*(p)) ____p1 = RSEQ_READ_ONCE(*(p)); \
40+
RISCV_FENCE(r, rw); \
4141
____p1; \
4242
})
4343

@@ -46,7 +46,7 @@ __extension__ ({ \
4646
#define rseq_smp_store_release(p, v) \
4747
do { \
4848
RISCV_FENCE(rw, w); \
49-
RSEQ_WRITE_ONCE(*(p), v); \
49+
RSEQ_WRITE_ONCE(*(p), v); \
5050
} while (0)
5151

5252
#define __RSEQ_ASM_DEFINE_TABLE(label, version, flags, start_ip, \

tools/testing/selftests/rseq/rseq-s390.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515

1616
#define rseq_smp_load_acquire(p) \
1717
__extension__ ({ \
18-
__typeof(*p) ____p1 = RSEQ_READ_ONCE(*p); \
18+
rseq_unqual_scalar_typeof(*(p)) ____p1 = RSEQ_READ_ONCE(*(p)); \
1919
rseq_barrier(); \
2020
____p1; \
2121
})
@@ -25,7 +25,7 @@ __extension__ ({ \
2525
#define rseq_smp_store_release(p, v) \
2626
do { \
2727
rseq_barrier(); \
28-
RSEQ_WRITE_ONCE(*p, v); \
28+
RSEQ_WRITE_ONCE(*(p), v); \
2929
} while (0)
3030

3131
#ifdef __s390x__

tools/testing/selftests/rseq/rseq-x86.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@
4242

4343
#define rseq_smp_load_acquire(p) \
4444
__extension__ ({ \
45-
__typeof(*p) ____p1 = RSEQ_READ_ONCE(*p); \
45+
rseq_unqual_scalar_typeof(*(p)) ____p1 = RSEQ_READ_ONCE(*(p)); \
4646
rseq_barrier(); \
4747
____p1; \
4848
})
@@ -52,7 +52,7 @@ __extension__ ({ \
5252
#define rseq_smp_store_release(p, v) \
5353
do { \
5454
rseq_barrier(); \
55-
RSEQ_WRITE_ONCE(*p, v); \
55+
RSEQ_WRITE_ONCE(*(p), v); \
5656
} while (0)
5757

5858
#define __RSEQ_ASM_DEFINE_TABLE(label, version, flags, \

0 commit comments

Comments
 (0)