(root)/
glibc-2.38/
sysdeps/
mach/
getsysstats.c
       1  /* System dependent pieces of sysconf; Mach version
       2     Copyright (C) 1996-2023 Free Software Foundation, Inc.
       3     This file is part of the GNU C Library.
       4  
       5     The GNU C Library is free software; you can redistribute it and/or
       6     modify it under the terms of the GNU Lesser General Public
       7     License as published by the Free Software Foundation; either
       8     version 2.1 of the License, or (at your option) any later version.
       9  
      10     The GNU C Library is distributed in the hope that it will be useful,
      11     but WITHOUT ANY WARRANTY; without even the implied warranty of
      12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      13     Lesser General Public License for more details.
      14  
      15     You should have received a copy of the GNU Lesser General Public
      16     License along with the GNU C Library; if not, see
      17     <https://www.gnu.org/licenses/>.  */
      18  
      19  #include <errno.h>
      20  #include <mach.h>
      21  #include <hurd.h>
      22  #include <sys/sysinfo.h>
      23  
      24  
      25  /* Return the number of processors configured on the system. */
      26  int
      27  __get_nprocs_conf (void)
      28  {
      29    struct host_basic_info hbi;
      30    kern_return_t err;
      31    mach_msg_type_number_t cnt = HOST_BASIC_INFO_COUNT;
      32  
      33    err = __host_info (__mach_host_self (), HOST_BASIC_INFO,
      34  		     (host_info_t) &hbi, &cnt);
      35    if (err)
      36      return __hurd_fail (err);
      37    else if (cnt != HOST_BASIC_INFO_COUNT)
      38      return __hurd_fail (EIEIO);
      39  
      40    return hbi.max_cpus;
      41  }
      42  libc_hidden_def (__get_nprocs_conf)
      43  weak_alias (__get_nprocs_conf, get_nprocs_conf)
      44  
      45  /* Return the number of processors currently available on the system. */
      46  int
      47  __get_nprocs (void)
      48  {
      49    struct host_basic_info hbi;
      50    kern_return_t err;
      51    mach_msg_type_number_t cnt = HOST_BASIC_INFO_COUNT;
      52  
      53    err = __host_info (__mach_host_self (), HOST_BASIC_INFO,
      54  		     (host_info_t) &hbi, &cnt);
      55    if (err)
      56      return __hurd_fail (err);
      57    else if (cnt != HOST_BASIC_INFO_COUNT)
      58      return __hurd_fail (EIEIO);
      59  
      60    return hbi.avail_cpus;
      61  }
      62  libc_hidden_def (__get_nprocs)
      63  weak_alias (__get_nprocs, get_nprocs)
      64  
      65  int
      66  __get_nprocs_sched (void)
      67  {
      68    return __get_nprocs ();
      69  }
      70  
      71  /* Return the number of physical pages on the system. */
      72  long int
      73  __get_phys_pages (void)
      74  {
      75    struct host_basic_info hbi;
      76    kern_return_t err;
      77    mach_msg_type_number_t cnt = HOST_BASIC_INFO_COUNT;
      78  
      79    err = __host_info (__mach_host_self (), HOST_BASIC_INFO,
      80  		     (host_info_t) &hbi, &cnt);
      81    if (err)
      82      return __hurd_fail (err);
      83    else if (cnt != HOST_BASIC_INFO_COUNT)
      84      return __hurd_fail (EIEIO);
      85  
      86    return hbi.memory_size / __vm_page_size;
      87  }
      88  libc_hidden_def (__get_phys_pages)
      89  weak_alias (__get_phys_pages, get_phys_pages)
      90  
      91  /* Return the number of available physical pages */
      92  long int
      93  __get_avphys_pages (void)
      94  {
      95    vm_statistics_data_t vs;
      96    kern_return_t err;
      97  
      98  #ifdef HOST_VM_INFO
      99    {
     100      mach_msg_type_number_t count = HOST_VM_INFO_COUNT;
     101      err = __host_info (__mach_host_self (), HOST_VM_INFO,
     102  		       (host_info_t) &vs, &count);
     103      if (!err && count < HOST_VM_INFO_COUNT)
     104        err = EGRATUITOUS;
     105    }
     106  #else
     107    err = __vm_statistics (__mach_task_self (), &vs);
     108  #endif
     109    if (err)
     110      return __hurd_fail (err);
     111  
     112    return vs.free_count;
     113  }
     114  libc_hidden_def (__get_avphys_pages)
     115  weak_alias (__get_avphys_pages, get_avphys_pages)