Re: [PATCH][v2] fork_init: fix division by zero
From: Paul Mackerras <hidden>
Date: 2008-12-12 00:49:40
Also in:
lkml
From: Paul Mackerras <hidden>
Date: 2008-12-12 00:49:40
Also in:
lkml
Andrew Morton writes:
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
The assumption is that THREAD_SIZE is a power of 2, as is PAGE_SIZE. I think Yuri should be increasing THREAD_SIZE for the larger page sizes he's implementing, because we have on-stack arrays whose size depends on the page size. I suspect that having THREAD_SIZE less than 1/8 of PAGE_SIZE risks stack overflows, and the better fix is for Yuri to make sure THREAD_SIZE is at least 1/8 of PAGE_SIZE. (In fact, more may be needed - someone should work out what fraction is actually needed.) Paul.