Beispiel #1
0
int
mlock (const void *addr, size_t len)
{
  mach_port_t host;
  vm_address_t page;
  error_t err;

  err = __get_privileged_ports (&host, NULL);
  if (err)
    host = __mach_host_self();

  page = trunc_page ((vm_address_t) addr);
  len = round_page ((vm_address_t) addr + len) - page;

  err = __vm_wire (host, __mach_task_self (), page, len, VM_PROT_READ);
  if (host != __mach_host_self())
    __mach_port_deallocate (__mach_task_self (), host);

  return err ? __hurd_fail (err) : 0;
}
/* Return the number of physical pages on the system. */
long int
__get_phys_pages ()
{
  struct host_basic_info hbi;
  kern_return_t err;
  mach_msg_type_number_t cnt = HOST_BASIC_INFO_COUNT;

  err = __host_info (__mach_host_self (), HOST_BASIC_INFO,
		     (host_info_t) &hbi, &cnt);
  if (err)
    return __hurd_fail (err);
  else if (cnt != HOST_BASIC_INFO_COUNT)
    return __hurd_fail (EIEIO);

  return hbi.memory_size / __vm_page_size;
}
/* Return the number of processors currently available on the system. */
int
__get_nprocs ()
{
  struct host_basic_info hbi;
  kern_return_t err;
  mach_msg_type_number_t cnt = HOST_BASIC_INFO_COUNT;

  err = __host_info (__mach_host_self (), HOST_BASIC_INFO,
		     (host_info_t) &hbi, &cnt);
  if (err)
    return __hurd_fail (err);
  else if (cnt != HOST_BASIC_INFO_COUNT)
    return __hurd_fail (EIEIO);

  return hbi.avail_cpus;
}
Beispiel #4
0
void
__mach_init (void)
{
  kern_return_t err;

  __mach_task_self_ = (__mach_task_self) ();
  __mig_init (0);

#if HAVE_HOST_PAGE_SIZE
  if (err = __host_page_size (__mach_host_self (), &__vm_page_size))
    _exit (err);
#else
  {
    vm_statistics_data_t stats;
    if (err = __vm_statistics (__mach_task_self (), &stats))
      _exit (err);
    __vm_page_size = stats.pagesize;
  }
#endif
}
Beispiel #5
0
/* Return the number of available physical pages */
long int
__get_avphys_pages (void)
{
  vm_statistics_data_t vs;
  kern_return_t err;

#ifdef HOST_VM_INFO
  {
    mach_msg_type_number_t count = HOST_VM_INFO_COUNT;
    err = __host_info (__mach_host_self (), HOST_VM_INFO,
		       (host_info_t) &vs, &count);
    if (!err && count < HOST_VM_INFO_COUNT)
      err = EGRATUITOUS;
  }
#else
  err = __vm_statistics (__mach_task_self (), &vs);
#endif
  if (err)
    return __hurd_fail (err);

  return vs.free_count;
}
Beispiel #6
0
int
getloadavg (double loadavg[], int nelem)
{
  host_load_info_data_t info;
  mach_msg_type_number_t size = HOST_LOAD_INFO_COUNT;
  error_t err;
  int i;

  err = __host_info (__mach_host_self (), HOST_LOAD_INFO,
		     (host_info_t) &info, &size);
  if (err)
    return __hurd_fail (err);
  if (size < HOST_LOAD_INFO_COUNT)
    return __hurd_fail (EGRATUITOUS);

  if (nelem > 3)
    nelem = 3;
  for (i = 0; i < nelem; ++i)
    loadavg[i] = (double) info.avenrun[i] / (double) LOAD_SCALE;

  return i;
}