aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteven Rostedt (Google) <rostedt@goodmis.org>2022-11-09 18:52:10 -0500
committerSteven Rostedt (Google) <rostedt@goodmis.org>2022-11-09 20:16:03 -0500
commit15ad9f746ec511bee6854dc635b016773f33435d (patch)
tree0bd0802ad28437b9fd7c5b6f1144fb2d8b1171f3
parent050d968377647125cfe93679e5bb8ba752827269 (diff)
downloadlibtracefs-15ad9f746ec511bee6854dc635b016773f33435d.tar.gz
libtracefs utest: Make helper functions for affinity
Add helper functions for setting and restoring affinity so that other tests do not need to reimplement them. Link: https://lore.kernel.org/linux-trace-devel/20221109235214.2191393-5-rostedt@goodmis.org Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
-rw-r--r--utest/tracefs-utest.c49
1 files changed, 35 insertions, 14 deletions
diff --git a/utest/tracefs-utest.c b/utest/tracefs-utest.c
index f3c06eb..ef59e10 100644
--- a/utest/tracefs-utest.c
+++ b/utest/tracefs-utest.c
@@ -87,20 +87,45 @@ static int test_callback(struct tep_event *event, struct tep_record *record,
return 0;
}
+static cpu_set_t *cpuset_save;
+static cpu_set_t *cpuset;
+static int cpu_size;
+
+static void save_affinity(void)
+{
+ int cpus;
+
+ cpus = sysconf(_SC_NPROCESSORS_CONF);
+ cpuset_save = CPU_ALLOC(cpus);
+ cpuset = CPU_ALLOC(cpus);
+ CU_TEST(cpuset_save != NULL && cpuset != NULL);
+ CU_TEST(sched_getaffinity(0, cpu_size, cpuset_save) == 0);
+}
+
+static void reset_affinity(void)
+{
+ sched_setaffinity(0, cpu_size, cpuset_save);
+ CPU_FREE(cpuset_save);
+ CPU_FREE(cpuset);
+}
+
+static void set_affinity(int cpu)
+{
+ CPU_ZERO_S(cpu_size, cpuset);
+ CPU_SET_S(cpu, cpu_size, cpuset);
+ CU_TEST(sched_setaffinity(0, cpu_size, cpuset) == 0);
+ sched_yield(); /* Force schedule */
+}
+
static void test_iter_write(struct tracefs_instance *instance)
{
- int cpus = sysconf(_SC_NPROCESSORS_CONF);
- cpu_set_t *cpuset, *cpusave;
- int cpu_size;
char *path;
int i, fd;
+ int cpus;
int ret;
- cpuset = CPU_ALLOC(cpus);
- cpusave = CPU_ALLOC(cpus);
- cpu_size = CPU_ALLOC_SIZE(cpus);
- CPU_ZERO_S(cpu_size, cpuset);
- sched_getaffinity(0, cpu_size, cpusave);
+ cpus = sysconf(_SC_NPROCESSORS_CONF);
+ save_affinity();
path = tracefs_instance_get_file(instance, "trace_marker");
CU_TEST(path != NULL);
@@ -114,17 +139,13 @@ static void test_iter_write(struct tracefs_instance *instance)
if (!test_array[i].value)
test_array[i].value++;
CU_TEST(test_array[i].cpu < cpus);
- CPU_ZERO_S(cpu_size, cpuset);
- CPU_SET(test_array[i].cpu, cpuset);
- sched_setaffinity(0, cpu_size, cpuset);
+ set_affinity(test_array[i].cpu);
ret = write(fd, test_array + i, sizeof(struct test_sample));
CU_TEST(ret == sizeof(struct test_sample));
}
- sched_setaffinity(0, cpu_size, cpusave);
+ reset_affinity();
close(fd);
- CPU_FREE(cpuset);
- CPU_FREE(cpusave);
}