aboutsummaryrefslogtreecommitdiffstats
path: root/mm/page_alloc.c
diff options
context:
space:
mode:
authorNick Piggin <nickpiggin@yahoo.com.au>2005-12-03 21:55:25 -0500
committerLinus Torvalds <torvalds@g5.osdl.org>2005-12-03 23:46:40 -0500
commit0ceaacc9785fedc500e19b024d606a82a23f5372 (patch)
treead178c7daa6ec7eaaae4e57d5ac8e20a8e806282 /mm/page_alloc.c
parent9a40525788a1b692ee0fc780a8cdb2ac808de1b0 (diff)
[PATCH] Fix up per-cpu page batch sizes
The code to clamp batch sizes to 2^n - 1 went missing and an extra check got added, which must have been a hunk of the "higer order pcp batch refills" work sneaking in. Signed-off-by: Nick Piggin <npiggin@suse.de> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'mm/page_alloc.c')
-rw-r--r--mm/page_alloc.c16
1 files changed, 8 insertions, 8 deletions
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index b257720edfc8..3b21a13d841c 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -1772,16 +1772,16 @@ static int __devinit zone_batchsize(struct zone *zone)
1772 batch = 1; 1772 batch = 1;
1773 1773
1774 /* 1774 /*
1775 * We will be trying to allcoate bigger chunks of contiguous 1775 * Clamp the batch to a 2^n - 1 value. Having a power
1776 * memory of the order of fls(batch). This should result in 1776 * of 2 value was found to be more likely to have
1777 * better cache coloring. 1777 * suboptimal cache aliasing properties in some cases.
1778 * 1778 *
1779 * A sanity check also to ensure that batch is still in limits. 1779 * For example if 2 tasks are alternately allocating
1780 * batches of pages, one task can end up with a lot
1781 * of pages of one half of the possible page colors
1782 * and the other with pages of the other colors.
1780 */ 1783 */
1781 batch = (1 << fls(batch + batch/2)); 1784 batch = (1 << (fls(batch + batch/2)-1)) - 1;
1782
1783 if (fls(batch) >= (PAGE_SHIFT + MAX_ORDER - 2))
1784 batch = PAGE_SHIFT + ((MAX_ORDER - 1 - PAGE_SHIFT)/2);
1785 1785
1786 return batch; 1786 return batch;
1787} 1787}