source: trunk/sys/libphoenix/processor.c @ 88

Last change on this file since 88 was 1, checked in by alain, 8 years ago

First import

File size: 2.6 KB
Line 
1/* Copyright (c) 2007-2009, Stanford University
2* All rights reserved.
3*
4* Redistribution and use in source and binary forms, with or without
5* modification, are permitted provided that the following conditions are met:
6*     * Redistributions of source code must retain the above copyright
7*       notice, this list of conditions and the following disclaimer.
8*     * Redistributions in binary form must reproduce the above copyright
9*       notice, this list of conditions and the following disclaimer in the
10*       documentation and/or other materials provided with the distribution.
11*     * Neither the name of Stanford University nor the names of its
12*       contributors may be used to endorse or promote products derived from
13*       this software without specific prior written permission.
14*
15* THIS SOFTWARE IS PROVIDED BY STANFORD UNIVERSITY ``AS IS'' AND ANY
16* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
17* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
18* DISCLAIMED. IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE FOR ANY
19* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
20* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
21* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
22* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
24* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25*/
26
27/* OS specific headers and defines. */
28#include <sched.h>
29
30#include <stdlib.h>
31#include <unistd.h>
32#include <sys/types.h>
33#include <assert.h>
34
35#include "processor.h"
36#include "memory.h"
37#include <pthread.h>
38
39static int num_cpus = 0;
40
41/* Query the number of CPUs online. */
42int proc_get_num_cpus (void)
43{
44    char *num_proc_str;
45   
46    if(num_cpus == 0)
47    {
48      num_cpus = sysconf(_SC_NPROCESSORS_ONLN);
49
50      /* Check if the user specified a different number of processors. */
51      if ((num_proc_str = getenv("MAPRED_NPROCESSORS")))
52      {
53        int temp = atoi(num_proc_str);
54        if (temp < 1 || temp > num_cpus)
55          num_cpus = 0;
56        else
57          num_cpus = temp;
58      }
59    }
60
61    return num_cpus;
62}
63
64/* Bind the calling thread to run on CPU_ID.
65   Returns 0 if successful, -1 if failed. */
66int proc_bind_thread (int cpu_id)
67{
68    return 0;
69}
70
71int proc_unbind_thread ()
72{
73   return 0;
74}
75
76/* Test whether processor CPU_ID is available. */
77bool proc_is_available (int cpu_id)
78{
79  return true;
80}
81
82int proc_get_cpuid (void)
83{
84  int cpu_id = -1;
85  int ret;
86 
87  ret = pthread_attr_getcpuid_np(&cpu_id);
88 
89  return (ret == 0) ? cpu_id : -1;
90}
Note: See TracBrowser for help on using the repository browser.