diff options
Diffstat (limited to 'tools/perf/bench/futex-requeue.c')
| -rw-r--r-- | tools/perf/bench/futex-requeue.c | 21 | 
1 files changed, 16 insertions, 5 deletions
| diff --git a/tools/perf/bench/futex-requeue.c b/tools/perf/bench/futex-requeue.c index 2f59d5d1c509..b6faabfafb8e 100644 --- a/tools/perf/bench/futex-requeue.c +++ b/tools/perf/bench/futex-requeue.c @@ -123,22 +123,33 @@ static void *workerfn(void *arg __maybe_unused)  static void block_threads(pthread_t *w,  			  pthread_attr_t thread_attr, struct perf_cpu_map *cpu)  { -	cpu_set_t cpuset; +	cpu_set_t *cpuset;  	unsigned int i; +	int nrcpus = perf_cpu_map__nr(cpu); +	size_t size;  	threads_starting = params.nthreads; +	cpuset = CPU_ALLOC(nrcpus); +	BUG_ON(!cpuset); +	size = CPU_ALLOC_SIZE(nrcpus); +  	/* create and block all threads */  	for (i = 0; i < params.nthreads; i++) { -		CPU_ZERO(&cpuset); -		CPU_SET(perf_cpu_map__cpu(cpu, i % perf_cpu_map__nr(cpu)).cpu, &cpuset); +		CPU_ZERO_S(size, cpuset); +		CPU_SET_S(perf_cpu_map__cpu(cpu, i % perf_cpu_map__nr(cpu)).cpu, size, cpuset); -		if (pthread_attr_setaffinity_np(&thread_attr, sizeof(cpu_set_t), &cpuset)) +		if (pthread_attr_setaffinity_np(&thread_attr, size, cpuset)) { +			CPU_FREE(cpuset);  			err(EXIT_FAILURE, "pthread_attr_setaffinity_np"); +		} -		if (pthread_create(&w[i], &thread_attr, workerfn, NULL)) +		if (pthread_create(&w[i], &thread_attr, workerfn, NULL)) { +			CPU_FREE(cpuset);  			err(EXIT_FAILURE, "pthread_create"); +		}  	} +	CPU_FREE(cpuset);  }  static void toggle_done(int sig __maybe_unused, |