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().

00031 {
00032         const char    *buff = "/sys/devices/system/cpu";
00033         DIR     *dirp;
00034         int ret = -2;
00035         struct  dirent  *dptr;
00036 
00037         DEBUG_PRINTF ("spe_count_physical_cpus()\n");
00038         
00039         // make sure, cpu_node is in the correct range
00040         if (cpu_node != -1) {
00041                 errno = EINVAL;
00042                 return -1;
00043         }
00044 
00045         // Count number of CPUs in /sys/devices/system/cpu
00046         if((dirp=opendir(buff))==NULL) {
00047                 fprintf(stderr,"Error opening %s ",buff);
00048                 perror("dirlist");
00049                 errno = EINVAL;
00050                 return -1;
00051         }
00052     while((dptr=readdir(dirp))) {
00053                 ret++;
00054         }
00055         closedir(dirp);
00056         return ret/THREADS_PER_BE; 
00057 }

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().

00072 {
00073         const char      *buff = "/sys/devices/system/spu";
00074         DIR     *dirp;
00075         int ret = -2;
00076         struct  dirent  *dptr;
00077         int no_of_bes;
00078 
00079         DEBUG_PRINTF ("spe_count_physical_spes()\n");
00080 
00081         // make sure, cpu_node is in the correct range
00082         no_of_bes = _base_spe_count_physical_cpus(-1);
00083         if (cpu_node < -1 || cpu_node >= no_of_bes ) {
00084                 errno = EINVAL;
00085                 return -1;
00086         }
00087 
00088         // Count number of SPUs in /sys/devices/system/spu
00089         if((dirp=opendir(buff))==NULL) {
00090                 fprintf(stderr,"Error opening %s ",buff);
00091                 perror("dirlist");
00092                 errno = EINVAL;
00093                 return -1;
00094         }
00095     while((dptr=readdir(dirp))) {
00096                 ret++;
00097         }
00098         closedir(dirp);
00099 
00100         if(cpu_node != -1) ret /= no_of_bes; // FIXME
00101         return ret;
00102 }

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().

00063 {
00064         return _base_spe_count_physical_spes(cpu_node); // FIXME
00065 }

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.

00105                                                              {
00106         int ret = 0;
00107         errno = 0;
00108         
00109         switch (info_requested) {
00110         case  SPE_COUNT_PHYSICAL_CPU_NODES:
00111                 ret = _base_spe_count_physical_cpus(cpu_node);
00112                 break;
00113         case SPE_COUNT_PHYSICAL_SPES:
00114                 ret = _base_spe_count_physical_spes(cpu_node);
00115                 break;
00116         case SPE_COUNT_USABLE_SPES:
00117                 ret = _base_spe_count_usable_spes(cpu_node);
00118                 break;
00119         default:
00120                 errno = EINVAL;
00121                 ret = -1;
00122         }
00123         return ret;
00124 }

Here is the call graph for this function:


Generated on Tue Dec 16 10:15:24 2008 for libspe2 by  doxygen 1.5.7.1