Skip to content

Commit 95d29fa

Browse files
melverPeter Zijlstra
authored andcommitted
selftests/perf_events: Test modification of perf_event_attr::sig_data
Test that PERF_EVENT_IOC_MODIFY_ATTRIBUTES correctly modifies perf_event_attr::sig_data as well. Signed-off-by: Marco Elver <[email protected]> Signed-off-by: Peter Zijlstra (Intel) <[email protected]> Reviewed-by: Dmitry Vyukov <[email protected]> Link: https://lore.kernel.org/r/[email protected]
1 parent 3c25fc9 commit 95d29fa

File tree

1 file changed

+9
-8
lines changed

1 file changed

+9
-8
lines changed

tools/testing/selftests/perf_events/sigtrap_threads.c

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,10 @@ static struct {
4444
} ctx;
4545

4646
/* Unique value to check si_perf_data is correctly set from perf_event_attr::sig_data. */
47-
#define TEST_SIG_DATA(addr) (~(unsigned long)(addr))
47+
#define TEST_SIG_DATA(addr, id) (~(unsigned long)(addr) + id)
4848

49-
static struct perf_event_attr make_event_attr(bool enabled, volatile void *addr)
49+
static struct perf_event_attr make_event_attr(bool enabled, volatile void *addr,
50+
unsigned long id)
5051
{
5152
struct perf_event_attr attr = {
5253
.type = PERF_TYPE_BREAKPOINT,
@@ -60,7 +61,7 @@ static struct perf_event_attr make_event_attr(bool enabled, volatile void *addr)
6061
.inherit_thread = 1, /* ... but only cloned with CLONE_THREAD. */
6162
.remove_on_exec = 1, /* Required by sigtrap. */
6263
.sigtrap = 1, /* Request synchronous SIGTRAP on event. */
63-
.sig_data = TEST_SIG_DATA(addr),
64+
.sig_data = TEST_SIG_DATA(addr, id),
6465
};
6566
return attr;
6667
}
@@ -110,7 +111,7 @@ FIXTURE(sigtrap_threads)
110111

111112
FIXTURE_SETUP(sigtrap_threads)
112113
{
113-
struct perf_event_attr attr = make_event_attr(false, &ctx.iterate_on);
114+
struct perf_event_attr attr = make_event_attr(false, &ctx.iterate_on, 0);
114115
struct sigaction action = {};
115116
int i;
116117

@@ -165,7 +166,7 @@ TEST_F(sigtrap_threads, enable_event)
165166
EXPECT_EQ(ctx.tids_want_signal, 0);
166167
EXPECT_EQ(ctx.first_siginfo.si_addr, &ctx.iterate_on);
167168
EXPECT_EQ(ctx.first_siginfo.si_perf_type, PERF_TYPE_BREAKPOINT);
168-
EXPECT_EQ(ctx.first_siginfo.si_perf_data, TEST_SIG_DATA(&ctx.iterate_on));
169+
EXPECT_EQ(ctx.first_siginfo.si_perf_data, TEST_SIG_DATA(&ctx.iterate_on, 0));
169170

170171
/* Check enabled for parent. */
171172
ctx.iterate_on = 0;
@@ -175,7 +176,7 @@ TEST_F(sigtrap_threads, enable_event)
175176
/* Test that modification propagates to all inherited events. */
176177
TEST_F(sigtrap_threads, modify_and_enable_event)
177178
{
178-
struct perf_event_attr new_attr = make_event_attr(true, &ctx.iterate_on);
179+
struct perf_event_attr new_attr = make_event_attr(true, &ctx.iterate_on, 42);
179180

180181
EXPECT_EQ(ioctl(self->fd, PERF_EVENT_IOC_MODIFY_ATTRIBUTES, &new_attr), 0);
181182
run_test_threads(_metadata, self);
@@ -184,7 +185,7 @@ TEST_F(sigtrap_threads, modify_and_enable_event)
184185
EXPECT_EQ(ctx.tids_want_signal, 0);
185186
EXPECT_EQ(ctx.first_siginfo.si_addr, &ctx.iterate_on);
186187
EXPECT_EQ(ctx.first_siginfo.si_perf_type, PERF_TYPE_BREAKPOINT);
187-
EXPECT_EQ(ctx.first_siginfo.si_perf_data, TEST_SIG_DATA(&ctx.iterate_on));
188+
EXPECT_EQ(ctx.first_siginfo.si_perf_data, TEST_SIG_DATA(&ctx.iterate_on, 42));
188189

189190
/* Check enabled for parent. */
190191
ctx.iterate_on = 0;
@@ -204,7 +205,7 @@ TEST_F(sigtrap_threads, signal_stress)
204205
EXPECT_EQ(ctx.tids_want_signal, 0);
205206
EXPECT_EQ(ctx.first_siginfo.si_addr, &ctx.iterate_on);
206207
EXPECT_EQ(ctx.first_siginfo.si_perf_type, PERF_TYPE_BREAKPOINT);
207-
EXPECT_EQ(ctx.first_siginfo.si_perf_data, TEST_SIG_DATA(&ctx.iterate_on));
208+
EXPECT_EQ(ctx.first_siginfo.si_perf_data, TEST_SIG_DATA(&ctx.iterate_on, 0));
208209
}
209210

210211
TEST_HARNESS_MAIN

0 commit comments

Comments
 (0)