svn commit: r216773 - head/sys/mips/cavium

Juli Mallett jmallett at FreeBSD.org
Tue Dec 28 20:11:55 UTC 2010


Author: jmallett
Date: Tue Dec 28 20:11:54 2010
New Revision: 216773
URL: http://svn.freebsd.org/changeset/base/216773

Log:
  When allocating memory from bootmem for the kernel to use, try to leave about
  2MB of memory in the bootmem allocator for the SDK to use internally at a later
  point.  It'd be nice if there were some functions we could call before
  allocating memory to let various facilities reserve some memory, but for now
  this seems sufficient.  Previously some unfortunate systems could give up all
  (or at least most) of their memory to the kernel from bootmem, and then
  allocating command queues for packet output and the like would fail later in
  the boot process (which in turn would lead to crashes even later.)
  
  Reported by:	kan

Modified:
  head/sys/mips/cavium/octeon_machdep.c

Modified: head/sys/mips/cavium/octeon_machdep.c
==============================================================================
--- head/sys/mips/cavium/octeon_machdep.c	Tue Dec 28 20:02:30 2010	(r216772)
+++ head/sys/mips/cavium/octeon_machdep.c	Tue Dec 28 20:11:54 2010	(r216773)
@@ -287,6 +287,14 @@ octeon_memory_init(void)
 	 */
 	i = 0;
 	while (i < PHYS_AVAIL_ENTRIES) {
+		/*
+		 * If there is less than 2MB of memory available in 128-byte
+		 * blocks, do not steal any more memory.  We need to leave some
+		 * memory for the command queues to be allocated out of.
+		 */
+		if (cvmx_bootmem_available_mem(128) < 2 << 20)
+			break;
+
 		addr = cvmx_bootmem_phy_alloc(1 << 20, phys_end,
 					      ~(vm_paddr_t)0, PAGE_SIZE, 0);
 		if (addr == -1)


More information about the svn-src-all mailing list