selftests/rseq: Use rseq_unqual_scalar_typeof in macros
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Tue, 27 Jun 2023 15:29:23 +0000 (11:29 -0400)
committerShuah Khan <skhan@linuxfoundation.org>
Tue, 8 Aug 2023 20:42:12 +0000 (14:42 -0600)
commit2b2fe6052dd01fdb4e9a31031c2c9d8f03cf7753
tree309adc858a2cd3f8c78312330e3ea9d671466b6c
parent0fbbf07ce67d2edb869572bf41b507a5f6851c72
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>
tools/testing/selftests/rseq/rseq-arm.h
tools/testing/selftests/rseq/rseq-mips.h
tools/testing/selftests/rseq/rseq-ppc.h
tools/testing/selftests/rseq/rseq-riscv.h
tools/testing/selftests/rseq/rseq-s390.h
tools/testing/selftests/rseq/rseq-x86.h