コード例 #1
0
ファイル: unix_startup.c プロジェクト: Prajna/xnu
/*
 * this has been broken out into a separate routine that
 * can be called from the x86 early vm initialization to
 * determine how much lo memory to reserve on systems with
 * DMA hardware that can't fully address all of the physical
 * memory that is present.
 */
unsigned int
bsd_mbuf_cluster_reserve(boolean_t *overridden)
{
	int mbuf_pool = 0;
	static boolean_t was_overridden = FALSE;

	/* If called more than once, return the previously calculated size */
	if (mbuf_poolsz != 0)
		goto done;

	/*
	 * Some of these are parsed in parse_bsd_args(), but for x86 we get
	 * here early from i386_vm_init() and so we parse them now, in order
	 * to correctly compute the size of the low-memory VM pool.  It is
	 * redundant but rather harmless.
	 */
	(void) PE_parse_boot_argn("ncl", &ncl, sizeof (ncl));
	(void) PE_parse_boot_argn("mbuf_pool", &mbuf_pool, sizeof (mbuf_pool));

	/*
	 * Convert "mbuf_pool" from MB to # of 2KB clusters; it is
	 * equivalent to "ncl", except that it uses different unit.
	 */
	if (mbuf_pool != 0)
		ncl = (mbuf_pool << MBSHIFT) >> MCLSHIFT;

        if (sane_size > (64 * 1024 * 1024) || ncl != 0) {

		if (ncl || serverperfmode)
			was_overridden = TRUE;

	        if ((nmbclusters = ncl) == 0) {
			/* Auto-configure the mbuf pool size */
			nmbclusters = mbuf_default_ncl(serverperfmode, sane_size);
		} else {
			/* Make sure it's not odd in case ncl is manually set */
			if (nmbclusters & 0x1)
				--nmbclusters;

			/* And obey the upper limit */
			if (nmbclusters > MAX_NCL)
				nmbclusters = MAX_NCL;
		}

		/* Round it down to nearest multiple of 4KB clusters */
		nmbclusters = P2ROUNDDOWN(nmbclusters, NCLPBG);
	}
	mbuf_poolsz = nmbclusters << MCLSHIFT;
done:
	if (overridden)
		*overridden = was_overridden;

	return (mbuf_poolsz);
}
コード例 #2
0
ファイル: unix_startup.c プロジェクト: 0xffea/xnu
/*
 * this has been broken out into a separate routine that
 * can be called from the x86 early vm initialization to
 * determine how much lo memory to reserve on systems with
 * DMA hardware that can't fully address all of the physical
 * memory that is present.
 */
unsigned int
bsd_mbuf_cluster_reserve(void)
{
	int mbuf_pool = 0;

	/* If called more than once, return the previously calculated size */
	if (mbuf_poolsz != 0)
		goto done;

	/*
	 * Some of these are parsed in parse_bsd_args(), but for x86 we get
	 * here early from i386_vm_init() and so we parse them now, in order
	 * to correctly compute the size of the low-memory VM pool.  It is
	 * redundant but rather harmless.
	 */
	//(void) PE_parse_boot_argn("srv", &srv, sizeof (srv));
	(void) PE_parse_boot_argn("ncl", &ncl, sizeof (ncl));
	(void) PE_parse_boot_argn("mbuf_pool", &mbuf_pool, sizeof (mbuf_pool));

	/*
	 * Convert "mbuf_pool" from MB to # of 2KB clusters; it is
	 * equivalent to "ncl", except that it uses different unit.
	 */
	if (mbuf_pool != 0)
		ncl = (mbuf_pool << MBSHIFT) >> MCLSHIFT;

        if (sane_size > (64 * 1024 * 1024) || ncl != 0) {
	        if ((nmbclusters = ncl) == 0) {
			/* Auto-configure the mbuf pool size */
			nmbclusters = mbuf_default_ncl(srv, sane_size);
		} else {
			/* Make sure it's not odd in case ncl is manually set */
			if (nmbclusters & 0x1)
				--nmbclusters;

			/* And obey the upper limit */
			if (nmbclusters > MAX_NCL)
				nmbclusters = MAX_NCL;
		}
	}
	mbuf_poolsz = nmbclusters << MCLSHIFT;
done:
	return (mbuf_poolsz);
}