Commit 6ff4dc25 authored by Benjamin Gray's avatar Benjamin Gray Committed by Michael Ellerman

selftests/powerpc: Allow bind_to_cpu() to automatically pick CPU

All current users of bind_to_cpu() don't care _which_ CPU they get, just
that they are bound to a single free one. So alter the interface to

	1. Accept a BIND_CPU_ANY value that tells it to automatically
	   pick a CPU
	2. Return the picked CPU

And convert all these users to bind_to_cpu(BIND_CPU_ANY).
Signed-off-by: default avatarBenjamin Gray <bgray@linux.ibm.com>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
Link: https://msgid.link/20230406043320.125138-4-bgray@linux.ibm.com
parent c97b2fc6
...@@ -31,6 +31,8 @@ int read_auxv(char *buf, ssize_t buf_size); ...@@ -31,6 +31,8 @@ int read_auxv(char *buf, ssize_t buf_size);
void *find_auxv_entry(int type, char *auxv); void *find_auxv_entry(int type, char *auxv);
void *get_auxv_entry(int type); void *get_auxv_entry(int type);
#define BIND_CPU_ANY (-1)
int pick_online_cpu(void); int pick_online_cpu(void);
int bind_to_cpu(int cpu); int bind_to_cpu(int cpu);
......
...@@ -45,9 +45,8 @@ int cpu_event_pinned_vs_ebb(void) ...@@ -45,9 +45,8 @@ int cpu_event_pinned_vs_ebb(void)
SKIP_IF(!ebb_is_supported()); SKIP_IF(!ebb_is_supported());
cpu = pick_online_cpu(); cpu = bind_to_cpu(BIND_CPU_ANY);
FAIL_IF(cpu < 0); FAIL_IF(cpu < 0);
FAIL_IF(bind_to_cpu(cpu));
FAIL_IF(pipe(read_pipe.fds) == -1); FAIL_IF(pipe(read_pipe.fds) == -1);
FAIL_IF(pipe(write_pipe.fds) == -1); FAIL_IF(pipe(write_pipe.fds) == -1);
......
...@@ -43,9 +43,8 @@ int cpu_event_vs_ebb(void) ...@@ -43,9 +43,8 @@ int cpu_event_vs_ebb(void)
SKIP_IF(!ebb_is_supported()); SKIP_IF(!ebb_is_supported());
cpu = pick_online_cpu(); cpu = bind_to_cpu(BIND_CPU_ANY);
FAIL_IF(cpu < 0); FAIL_IF(cpu < 0);
FAIL_IF(bind_to_cpu(cpu));
FAIL_IF(pipe(read_pipe.fds) == -1); FAIL_IF(pipe(read_pipe.fds) == -1);
FAIL_IF(pipe(write_pipe.fds) == -1); FAIL_IF(pipe(write_pipe.fds) == -1);
......
...@@ -43,9 +43,8 @@ int ebb_vs_cpu_event(void) ...@@ -43,9 +43,8 @@ int ebb_vs_cpu_event(void)
SKIP_IF(!ebb_is_supported()); SKIP_IF(!ebb_is_supported());
cpu = pick_online_cpu(); cpu = bind_to_cpu(BIND_CPU_ANY);
FAIL_IF(cpu < 0); FAIL_IF(cpu < 0);
FAIL_IF(bind_to_cpu(cpu));
FAIL_IF(pipe(read_pipe.fds) == -1); FAIL_IF(pipe(read_pipe.fds) == -1);
FAIL_IF(pipe(write_pipe.fds) == -1); FAIL_IF(pipe(write_pipe.fds) == -1);
......
...@@ -75,13 +75,11 @@ static int cycles_child(void) ...@@ -75,13 +75,11 @@ static int cycles_child(void)
int multi_ebb_procs(void) int multi_ebb_procs(void)
{ {
pid_t pids[NR_CHILDREN]; pid_t pids[NR_CHILDREN];
int cpu, rc, i; int rc, i;
SKIP_IF(!ebb_is_supported()); SKIP_IF(!ebb_is_supported());
cpu = pick_online_cpu(); FAIL_IF(bind_to_cpu(BIND_CPU_ANY) < 0);
FAIL_IF(cpu < 0);
FAIL_IF(bind_to_cpu(cpu));
for (i = 0; i < NR_CHILDREN; i++) { for (i = 0; i < NR_CHILDREN; i++) {
pids[i] = fork(); pids[i] = fork();
......
...@@ -103,12 +103,10 @@ static int eat_cpu_child(union pipe read_pipe, union pipe write_pipe) ...@@ -103,12 +103,10 @@ static int eat_cpu_child(union pipe read_pipe, union pipe write_pipe)
pid_t eat_cpu(int (test_function)(void)) pid_t eat_cpu(int (test_function)(void))
{ {
union pipe read_pipe, write_pipe; union pipe read_pipe, write_pipe;
int cpu, rc; int rc;
pid_t pid; pid_t pid;
cpu = pick_online_cpu(); FAIL_IF(bind_to_cpu(BIND_CPU_ANY) < 0);
FAIL_IF(cpu < 0);
FAIL_IF(bind_to_cpu(cpu));
if (pipe(read_pipe.fds) == -1) if (pipe(read_pipe.fds) == -1)
return -1; return -1;
......
...@@ -455,13 +455,24 @@ int pick_online_cpu(void) ...@@ -455,13 +455,24 @@ int pick_online_cpu(void)
int bind_to_cpu(int cpu) int bind_to_cpu(int cpu)
{ {
cpu_set_t mask; cpu_set_t mask;
int err;
if (cpu == BIND_CPU_ANY) {
cpu = pick_online_cpu();
if (cpu < 0)
return cpu;
}
printf("Binding to cpu %d\n", cpu); printf("Binding to cpu %d\n", cpu);
CPU_ZERO(&mask); CPU_ZERO(&mask);
CPU_SET(cpu, &mask); CPU_SET(cpu, &mask);
return sched_setaffinity(0, sizeof(mask), &mask); err = sched_setaffinity(0, sizeof(mask), &mask);
if (err)
return err;
return cpu;
} }
bool is_ppc64le(void) bool is_ppc64le(void)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment