selftests/powerpc: context_switch: Fix pthread errors
authorCyril Bur <cyrilbur@gmail.com>
Tue, 4 Jul 2017 01:21:15 +0000 (11:21 +1000)
committerMichael Ellerman <mpe@ellerman.id.au>
Fri, 13 Oct 2017 08:41:56 +0000 (19:41 +1100)
Turns out pthreads returns an errno and doesn't set errno. This doesn't
play well with perror().

Signed-off-by: Cyril Bur <cyrilbur@gmail.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
tools/testing/selftests/powerpc/benchmarks/context_switch.c

index f424133..87f1f02 100644 (file)
@@ -10,6 +10,7 @@
  */
 
 #define _GNU_SOURCE
+#include <errno.h>
 #include <sched.h>
 #include <string.h>
 #include <stdio.h>
@@ -75,6 +76,7 @@ static void touch(void)
 
 static void start_thread_on(void *(*fn)(void *), void *arg, unsigned long cpu)
 {
+       int rc;
        pthread_t tid;
        cpu_set_t cpuset;
        pthread_attr_t attr;
@@ -82,14 +84,23 @@ static void start_thread_on(void *(*fn)(void *), void *arg, unsigned long cpu)
        CPU_ZERO(&cpuset);
        CPU_SET(cpu, &cpuset);
 
-       pthread_attr_init(&attr);
+       rc = pthread_attr_init(&attr);
+       if (rc) {
+               errno = rc;
+               perror("pthread_attr_init");
+               exit(1);
+       }
 
-       if (pthread_attr_setaffinity_np(&attr, sizeof(cpu_set_t), &cpuset)) {
+       rc = pthread_attr_setaffinity_np(&attr, sizeof(cpu_set_t), &cpuset);
+       if (rc) {
+               errno = rc;
                perror("pthread_attr_setaffinity_np");
                exit(1);
        }
 
-       if (pthread_create(&tid, &attr, fn, arg)) {
+       rc = pthread_create(&tid, &attr, fn, arg);
+       if (rc) {
+               errno = rc;
                perror("pthread_create");
                exit(1);
        }