mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-07 19:30:30 +09:00
selftests/powerpc: Fix CPU affinity for child process
[ Upstream commit854eb5022b] On systems with large number of cpus, test fails trying to set affinity by calling sched_setaffinity() with smaller size for affinity mask. This patch fixes it by making sure that the size of allocated affinity mask is dependent on the number of CPUs as reported by get_nprocs(). Fixes:00b7ec5c9c("selftests/powerpc: Import Anton's context_switch2 benchmark") Reported-by: Shirisha Ganta <shiganta@in.ibm.com> Signed-off-by: Sandipan Das <sandipan@linux.ibm.com> Signed-off-by: Harish <harish@linux.ibm.com> Reviewed-by: Kamalesh Babulal <kamalesh@linux.vnet.ibm.com> Reviewed-by: Satheesh Rajendran <sathnaga@linux.vnet.ibm.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://lore.kernel.org/r/20200609081423.529664-1-harish@linux.ibm.com Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
fb17074f89
commit
c2a8116308
@@ -23,6 +23,7 @@
|
||||
#include <limits.h>
|
||||
#include <sys/time.h>
|
||||
#include <sys/syscall.h>
|
||||
#include <sys/sysinfo.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/shm.h>
|
||||
#include <linux/futex.h>
|
||||
@@ -108,8 +109,9 @@ static void start_thread_on(void *(*fn)(void *), void *arg, unsigned long cpu)
|
||||
|
||||
static void start_process_on(void *(*fn)(void *), void *arg, unsigned long cpu)
|
||||
{
|
||||
int pid;
|
||||
cpu_set_t cpuset;
|
||||
int pid, ncpus;
|
||||
cpu_set_t *cpuset;
|
||||
size_t size;
|
||||
|
||||
pid = fork();
|
||||
if (pid == -1) {
|
||||
@@ -120,14 +122,23 @@ static void start_process_on(void *(*fn)(void *), void *arg, unsigned long cpu)
|
||||
if (pid)
|
||||
return;
|
||||
|
||||
CPU_ZERO(&cpuset);
|
||||
CPU_SET(cpu, &cpuset);
|
||||
ncpus = get_nprocs();
|
||||
size = CPU_ALLOC_SIZE(ncpus);
|
||||
cpuset = CPU_ALLOC(ncpus);
|
||||
if (!cpuset) {
|
||||
perror("malloc");
|
||||
exit(1);
|
||||
}
|
||||
CPU_ZERO_S(size, cpuset);
|
||||
CPU_SET_S(cpu, size, cpuset);
|
||||
|
||||
if (sched_setaffinity(0, sizeof(cpuset), &cpuset)) {
|
||||
if (sched_setaffinity(0, size, cpuset)) {
|
||||
perror("sched_setaffinity");
|
||||
CPU_FREE(cpuset);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
CPU_FREE(cpuset);
|
||||
fn(arg);
|
||||
|
||||
exit(0);
|
||||
|
||||
Reference in New Issue
Block a user