Pure cleanup, no functional change.

Replace 'volatile int iterate_on' with plain int and explicit
READ_ONCE/WRITE_ONCE at each access site.  This is more idiomatic
for kernel code and documents the intent at the point of use rather
than at the declaration.

https://virtuozzo.atlassian.net/browse/VSTOR-127669
Feature: fix selftests

Signed-off-by: Eva Kurchatova <[email protected]>
Signed-off-by: Konstantin Khorenko <[email protected]>
---
 .../selftests/perf_events/sigtrap_threads.c   | 24 +++++++++++--------
 1 file changed, 14 insertions(+), 10 deletions(-)

diff --git a/tools/testing/selftests/perf_events/sigtrap_threads.c 
b/tools/testing/selftests/perf_events/sigtrap_threads.c
index 6b246e0ffde9..840d5f452d54 100644
--- a/tools/testing/selftests/perf_events/sigtrap_threads.c
+++ b/tools/testing/selftests/perf_events/sigtrap_threads.c
@@ -35,11 +35,15 @@
 
 #define NUM_THREADS 5
 
+/* Force watchpoint access to actually occur. */
+#define READ_ONCE(x)       (*(volatile typeof(x) *)&(x))
+#define WRITE_ONCE(x, val) (*(volatile typeof(x) *)&(x) = (val))
+
 /* Data shared between test body, threads, and signal handler. */
 static struct {
        int tids_want_signal;           /* Which threads still want a signal. */
        int signal_count;               /* Sanity check number of signals 
received. */
-       volatile int iterate_on;        /* Variable to set breakpoint on. */
+       int iterate_on;                 /* Variable to set breakpoint on. */
        siginfo_t first_siginfo;        /* First observed siginfo_t. */
 } ctx;
 
@@ -94,14 +98,14 @@ static void *test_thread(void *arg)
        pthread_barrier_wait(barrier);
 
        __atomic_fetch_add(&ctx.tids_want_signal, tid, __ATOMIC_RELAXED);
-       iter = ctx.iterate_on; /* read */
+       iter = READ_ONCE(ctx.iterate_on);
        if (iter >= 0) {
                for (i = 0; i < iter - 1; i++) {
                        __atomic_fetch_add(&ctx.tids_want_signal, tid, 
__ATOMIC_RELAXED);
-                       ctx.iterate_on = iter; /* idempotent write */
+                       WRITE_ONCE(ctx.iterate_on, iter); /* idempotent write */
                }
        } else {
-               while (ctx.iterate_on);
+               while (READ_ONCE(ctx.iterate_on));
        }
 
        return NULL;
@@ -175,7 +179,7 @@ TEST_F(sigtrap_threads, enable_event)
        EXPECT_EQ(ctx.first_siginfo.si_perf_data, 
TEST_SIG_DATA(&ctx.iterate_on, 0));
 
        /* Check enabled for parent. */
-       ctx.iterate_on = 0;
+       WRITE_ONCE(ctx.iterate_on, 0);
        EXPECT_EQ(__atomic_load_n(&ctx.signal_count, __ATOMIC_RELAXED), 
NUM_THREADS + 1);
 }
 
@@ -194,20 +198,20 @@ TEST_F(sigtrap_threads, modify_and_enable_event)
        EXPECT_EQ(ctx.first_siginfo.si_perf_data, 
TEST_SIG_DATA(&ctx.iterate_on, 42));
 
        /* Check enabled for parent. */
-       ctx.iterate_on = 0;
+       WRITE_ONCE(ctx.iterate_on, 0);
        EXPECT_EQ(__atomic_load_n(&ctx.signal_count, __ATOMIC_RELAXED), 
NUM_THREADS + 1);
 }
 
 /* Stress test event + signal handling. */
 TEST_F(sigtrap_threads, signal_stress)
 {
-       ctx.iterate_on = 3000;
+       WRITE_ONCE(ctx.iterate_on, 3000);
 
        EXPECT_EQ(ioctl(self->fd, PERF_EVENT_IOC_ENABLE, 0), 0);
        run_test_threads(_metadata, self);
        EXPECT_EQ(ioctl(self->fd, PERF_EVENT_IOC_DISABLE, 0), 0);
 
-       EXPECT_EQ(__atomic_load_n(&ctx.signal_count, __ATOMIC_RELAXED), 
NUM_THREADS * ctx.iterate_on);
+       EXPECT_EQ(__atomic_load_n(&ctx.signal_count, __ATOMIC_RELAXED), 
NUM_THREADS * READ_ONCE(ctx.iterate_on));
        EXPECT_EQ(__atomic_load_n(&ctx.tids_want_signal, __ATOMIC_RELAXED), 0);
        EXPECT_EQ(ctx.first_siginfo.si_addr, &ctx.iterate_on);
        EXPECT_EQ(ctx.first_siginfo.si_perf_type, PERF_TYPE_BREAKPOINT);
@@ -219,7 +223,7 @@ TEST_F(sigtrap_threads, signal_stress_with_disable)
        const int target_count = NUM_THREADS * 3000;
        int i;
 
-       ctx.iterate_on = -1;
+       WRITE_ONCE(ctx.iterate_on, -1);
 
        EXPECT_EQ(ioctl(self->fd, PERF_EVENT_IOC_ENABLE, 0), 0);
        pthread_barrier_wait(&self->barrier);
@@ -227,7 +231,7 @@ TEST_F(sigtrap_threads, signal_stress_with_disable)
                EXPECT_EQ(ioctl(self->fd, PERF_EVENT_IOC_DISABLE, 0), 0);
                EXPECT_EQ(ioctl(self->fd, PERF_EVENT_IOC_ENABLE, 0), 0);
        }
-       ctx.iterate_on = 0;
+       WRITE_ONCE(ctx.iterate_on, 0);
        for (i = 0; i < NUM_THREADS; i++)
                ASSERT_EQ(pthread_join(self->threads[i], NULL), 0);
        EXPECT_EQ(ioctl(self->fd, PERF_EVENT_IOC_DISABLE, 0), 0);
-- 
2.54.0


Reply via email to