Skip to contentSkip to conversation

fix bootmem allocator on machines with holes in memory

PATCH New Anton Blanchard 1 participant 1 message Jul 16, 2003 Memory management

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 fix bootmem allocator on machines with holes in memory

Hi,

If the memory we are trying to allocate is too large to fit in the current region, we should skip to the end. We currently search the available bitmap, find the area is too small, increment the start by incr and try again. This resulted in an apparent lockup on a 64GB machine that had a 3GB IO hole starting at 1GB (and the mem_map array would not fit in the first region).

Also use ALIGN macro instead of an open coded version.

Anton

===== mm/bootmem.c 1.18 vs edited =====

mm/bootmem.c +2 -2
@@ -183,7 +183,7 @@
 	for (i = preferred; i < eidx; i += incr) {
 		unsigned long j;
 		i = find_next_zero_bit(bdata->node_bootmem_map, eidx, i);
-		i = (i + incr - 1) & -incr;
+		i = ALIGN(i, incr);
 		if (test_bit(i, bdata->node_bootmem_map))
 			continue;
 		for (j = i + 1; j < i + areasize; ++j) {
@@ -195,7 +195,7 @@
 		start = i;
 		goto found;
 	fail_block:
-		;
+		i = ALIGN(j, incr);
 	}
 
 	if (preferred > offset) {