1 /* System dependent pieces of sysconf; Mach version
2    Copyright (C) 1996-2021 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
__get_nprocs_conf(void)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)
weak_alias(__get_nprocs_conf,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)
weak_alias(__get_nprocs,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
__get_phys_pages(void)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)
weak_alias(__get_phys_pages,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)
116