Re: [PATCH][v2] fork_init: fix division by zero
From: Andrew Morton <akpm@linux-foundation.org>
Date: 2008-12-11 20:46:03
Also in:
lkml
From: Andrew Morton <akpm@linux-foundation.org>
Date: 2008-12-11 20:46:03
Also in:
lkml
On Thu, 11 Dec 2008 20:28:00 +0000 Al Viro [off-list ref] wrote:
On Thu, Dec 11, 2008 at 12:16:35PM -0800, Andrew Morton wrote:quoted
quoted
+#if (8 * THREAD_SIZE) > PAGE_SIZE max_threads = mempages / (8 * THREAD_SIZE / PAGE_SIZE); +#else + max_threads = mempages * (PAGE_SIZE / (8 * THREAD_SIZE)); +#endifThe expression you've chosen here can be quite inacccurate, because ((PAGE_SIZE / (8 * THREAD_SIZE)) is a small number. The way to preserve accuracy is max_threads = (mempages * PAGE_SIZE) / (8 * THREAD_SIZE); so how about avoiding the nasty ifdefs and doingAre you sure?
No, not at all. It's all too hard. Which is why I'm looking for simplification.
Do they actually cross the page boundaries?
Some flavours of slab have at times done an order-1 allocation for objects which would fit into an order-0 page (etc) if it looks like that will be beneficial from a packing POV. I'm unsure whether that still happens - I tried to get it stamped out for reliability reasons.