コード例 #1
0
ファイル: alpine_machdep_mp.c プロジェクト: kandycs/freebsd
static int
platform_mp_get_core_cnt(void)
{
	static int ncores = 0;
	int nchilds;
	uint32_t reg;

	/* Calculate ncores value only once */
	if (ncores)
		return (ncores);

	reg = cp15_l2ctlr_get();
	ncores = CPUV7_L2CTLR_NPROC(reg);

	nchilds = ofw_cpu_early_foreach(alpine_validate_cpu, false);

	/* Limit CPUs if DTS has configured less than available */
	if ((nchilds > 0) && (nchilds < ncores)) {
		printf("SMP: limiting number of active CPUs to %d out of %d\n",
		    nchilds, ncores);
		ncores = nchilds;
	}

	return (ncores);
}
コード例 #2
0
ファイル: virt_mp.c プロジェクト: hbsciw/freebsd
void
platform_mp_setmaxid(void)
{

	mp_maxid = PCPU_GET(cpuid);
	mp_ncpus = ofw_cpu_early_foreach(virt_maxid, true);
	if (mp_ncpus < 1)
		mp_ncpus = 1;
	mp_ncpus = MIN(mp_ncpus, MAXCPU);
}
コード例 #3
0
ファイル: virt_mp.c プロジェクト: hbsciw/freebsd
void
platform_mp_start_ap(void)
{

	ofw_cpu_early_foreach(virt_start_ap, true);
}