Exemplo n.º 1
0
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;
}
Exemplo n.º 2
0
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;
}
Exemplo n.º 3
0
Arquivo: host.c Projeto: DJHartley/xnu
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);
}