libspe2  0.9a
Functions
info.c File Reference
#include <dirent.h>
#include <errno.h>
#include <stdio.h>
#include "info.h"
Include dependency graph for info.c:

Go to the source code of this file.

Functions

int _base_spe_count_physical_cpus (int cpu_node)
 
int _base_spe_count_usable_spes (int cpu_node)
 
int _base_spe_count_physical_spes (int cpu_node)
 
int _base_spe_cpu_info_get (int info_requested, int cpu_node)
 

Function Documentation

int _base_spe_count_physical_cpus ( int  cpu_node)

Definition at line 30 of file info.c.

References DEBUG_PRINTF, and THREADS_PER_BE.

Referenced by _base_spe_count_physical_spes(), and _base_spe_cpu_info_get().

31 {
32  const char *buff = "/sys/devices/system/cpu";
33  DIR *dirp;
34  int ret = -2;
35  struct dirent *dptr;
36 
37  DEBUG_PRINTF ("spe_count_physical_cpus()\n");
38 
39  // make sure, cpu_node is in the correct range
40  if (cpu_node != -1) {
41  errno = EINVAL;
42  return -1;
43  }
44 
45  // Count number of CPUs in /sys/devices/system/cpu
46  if((dirp=opendir(buff))==NULL) {
47  fprintf(stderr,"Error opening %s ",buff);
48  perror("dirlist");
49  errno = EINVAL;
50  return -1;
51  }
52  while((dptr=readdir(dirp))) {
53  ret++;
54  }
55  closedir(dirp);
56  return ret/THREADS_PER_BE;
57 }
#define THREADS_PER_BE
Definition: info.h:25
#define DEBUG_PRINTF(fmt, args...)
Definition: elf_loader.c:45
int _base_spe_count_physical_spes ( int  cpu_node)

Definition at line 71 of file info.c.

References _base_spe_count_physical_cpus(), and DEBUG_PRINTF.

Referenced by _base_spe_count_usable_spes(), and _base_spe_cpu_info_get().

72 {
73  const char *buff = "/sys/devices/system/spu";
74  DIR *dirp;
75  int ret = -2;
76  struct dirent *dptr;
77  int no_of_bes;
78 
79  DEBUG_PRINTF ("spe_count_physical_spes()\n");
80 
81  // make sure, cpu_node is in the correct range
82  no_of_bes = _base_spe_count_physical_cpus(-1);
83  if (cpu_node < -1 || cpu_node >= no_of_bes ) {
84  errno = EINVAL;
85  return -1;
86  }
87 
88  // Count number of SPUs in /sys/devices/system/spu
89  if((dirp=opendir(buff))==NULL) {
90  fprintf(stderr,"Error opening %s ",buff);
91  perror("dirlist");
92  errno = EINVAL;
93  return -1;
94  }
95  while((dptr=readdir(dirp))) {
96  ret++;
97  }
98  closedir(dirp);
99 
100  if(cpu_node != -1) ret /= no_of_bes; // FIXME
101  return ret;
102 }
#define DEBUG_PRINTF(fmt, args...)
Definition: elf_loader.c:45
int _base_spe_count_physical_cpus(int cpu_node)
Definition: info.c:30

Here is the call graph for this function:

int _base_spe_count_usable_spes ( int  cpu_node)

Definition at line 62 of file info.c.

References _base_spe_count_physical_spes().

Referenced by _base_spe_cpu_info_get().

63 {
64  return _base_spe_count_physical_spes(cpu_node); // FIXME
65 }
int _base_spe_count_physical_spes(int cpu_node)
Definition: info.c:71

Here is the call graph for this function:

int _base_spe_cpu_info_get ( int  info_requested,
int  cpu_node 
)

_base_spe_info_get

Definition at line 105 of file info.c.

References _base_spe_count_physical_cpus(), _base_spe_count_physical_spes(), _base_spe_count_usable_spes(), SPE_COUNT_PHYSICAL_CPU_NODES, SPE_COUNT_PHYSICAL_SPES, and SPE_COUNT_USABLE_SPES.

105  {
106  int ret = 0;
107  errno = 0;
108 
109  switch (info_requested) {
111  ret = _base_spe_count_physical_cpus(cpu_node);
112  break;
114  ret = _base_spe_count_physical_spes(cpu_node);
115  break;
117  ret = _base_spe_count_usable_spes(cpu_node);
118  break;
119  default:
120  errno = EINVAL;
121  ret = -1;
122  }
123  return ret;
124 }
#define SPE_COUNT_PHYSICAL_CPU_NODES
int _base_spe_count_physical_spes(int cpu_node)
Definition: info.c:71
int _base_spe_count_physical_cpus(int cpu_node)
Definition: info.c:30
#define SPE_COUNT_PHYSICAL_SPES
#define SPE_COUNT_USABLE_SPES
int _base_spe_count_usable_spes(int cpu_node)
Definition: info.c:62

Here is the call graph for this function: