kern_return_t host_processors( host_t host, processor_array_t *processor_list, mach_msg_type_number_t *countp) { register int i; register processor_t *tp; vm_offset_t addr; unsigned int count; boolean_t rt = FALSE; /* ### This boolean is FALSE, because there * currently exists no mechanism to determine * whether or not the reply port is an RT port */ if (host == HOST_NULL) return(KERN_INVALID_ARGUMENT); /* * Determine how many processors we have. * (This number shouldn't change.) */ count = 0; for (i = 0; i < NCPUS; i++) if (machine_slot[i].is_cpu) count++; if (count == 0) panic("host_processors"); addr = KALLOC((vm_size_t) (count * sizeof(mach_port_t)), rt); if (addr == 0) return KERN_RESOURCE_SHORTAGE; tp = (processor_t *) addr; for (i = 0; i < NCPUS; i++) if (machine_slot[i].is_cpu) *tp++ = cpu_to_processor(i); *countp = count; *processor_list = (mach_port_t *) addr; /* do the conversion that Mig should handle */ tp = (processor_t *) addr; for (i = 0; i < count; i++) ((mach_port_t *) tp)[i] = (mach_port_t)convert_processor_to_port(tp[i]); return KERN_SUCCESS; }
kern_return_t host_processors( host_t host, processor_array_t *processor_list, natural_t *countp) { register int i; register processor_t *tp; vm_offset_t addr; unsigned int count; if (host == HOST_NULL) return KERN_INVALID_ARGUMENT; /* * Determine how many processors we have. * (This number shouldn't change.) */ count = 0; for (i = 0; i < NCPUS; i++) if (machine_slot[i].is_cpu) count++; if (count == 0) panic("host_processors"); addr = kalloc((vm_size_t) (count * sizeof(mach_port_t))); if (addr == 0) return KERN_RESOURCE_SHORTAGE; tp = (processor_t *) addr; for (i = 0; i < NCPUS; i++) if (machine_slot[i].is_cpu) *tp++ = cpu_to_processor(i); *countp = count; *processor_list = (mach_port_t *) addr; /* do the conversion that Mig should handle */ tp = (processor_t *) addr; for (i = 0; i < count; i++) ((mach_port_t *) tp)[i] = (mach_port_t)convert_processor_to_port(tp[i]); return KERN_SUCCESS; }
kern_return_t host_processors( host_priv_t host_priv, processor_array_t *out_array, mach_msg_type_number_t *countp) { register processor_t processor, *tp; void *addr; unsigned int count, i; if (host_priv == HOST_PRIV_NULL) return (KERN_INVALID_ARGUMENT); assert(host_priv == &realhost); count = processor_count; assert(count != 0); addr = kalloc((vm_size_t) (count * sizeof(mach_port_t))); if (addr == 0) return (KERN_RESOURCE_SHORTAGE); tp = (processor_t *) addr; *tp++ = processor = processor_list; if (count > 1) { simple_lock(&processor_list_lock); for (i = 1; i < count; i++) *tp++ = processor = processor->processor_list; simple_unlock(&processor_list_lock); } *countp = count; *out_array = (processor_array_t)addr; /* do the conversion that Mig should handle */ tp = (processor_t *) addr; for (i = 0; i < count; i++) ((mach_port_t *) tp)[i] = (mach_port_t)convert_processor_to_port(tp[i]); return (KERN_SUCCESS); }