Back to index

glibc  2.9
Defines | Functions
tst-getcpu.c File Reference
#include <errno.h>
#include <stdio.h>
#include <sched.h>
#include <unistd.h>
#include <test-skeleton.c>

Go to the source code of this file.

Defines

#define TEST_FUNCTION   do_test ()

Functions

static int do_test (void)

Define Documentation

#define TEST_FUNCTION   do_test ()

Definition at line 53 of file tst-getcpu.c.


Function Documentation

static int do_test ( void  ) [static]

Definition at line 8 of file tst-getcpu.c.

{
  cpu_set_t cs;
  if (sched_getaffinity (getpid (), sizeof (cs), &cs) != 0)
    {
      printf ("getaffinity failed: %m\n");
      return 1;
    }

  int result = 0;
  int cpu = 0;
  while (CPU_COUNT (&cs) != 0)
    {
      if (CPU_ISSET (cpu, &cs))
       {
         cpu_set_t cs2;
         CPU_ZERO (&cs2);
         CPU_SET (cpu, &cs2);
         if (sched_setaffinity (getpid (), sizeof (cs2), &cs2) != 0)
           {
             printf ("setaffinity(%d) failed: %m\n", cpu);
             result = 1;
           }
         else
           {
             int cpu2 = sched_getcpu ();
             if (cpu2 == -1 && errno == ENOSYS)
              {
                puts ("getcpu syscall not implemented");
                return 0;
              }
             if (cpu2 != cpu)
              {
                printf ("getcpu results %d not possible\n", cpu2);
                result = 1;
              }
           }
         CPU_CLR (cpu, &cs);
       }
      ++cpu;
    }

  return result;
}

Here is the call graph for this function: