diff options
author | Oleg Nesterov <oleg@tv-sign.ru> | 2006-03-28 19:11:07 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-03-28 21:36:41 -0500 |
commit | 73b9ebfe126a4a886ee46cbab637374d7024668a (patch) | |
tree | d7ba00d4ce76b49c1569334956cd196b35977a04 /kernel/pid.c | |
parent | c97d98931ac52ef110b62d9b75c6a6f2bfbc1898 (diff) |
[PATCH] pidhash: don't count idle threads
fork_idle() does unhash_process() just after copy_process(). Contrary,
boot_cpu's idle thread explicitely registers itself for each pid_type with nr
= 0.
copy_process() already checks p->pid != 0 before process_counts++, I think we
can just skip attach_pid() calls and job control inits for idle threads and
kill unhash_process(). We don't need to cleanup ->proc_dentry in fork_idle()
because with this patch idle threads are never hashed in
kernel/pid.c:pid_hash[].
We don't need to hash pid == 0 in pidmap_init(). free_pidmap() is never
called with pid == 0 arg, so it will never be reused. So it is still possible
to use pid == 0 in any PIDTYPE_xxx namespace from kernel/pid.c's POV.
However with this patch we don't hash pid == 0 for PIDTYPE_PID case. We still
have have PIDTYPE_PGID/PIDTYPE_SID entries with pid == 0: /sbin/init and
kernel threads which don't call daemonize().
Signed-off-by: Oleg Nesterov <oleg@tv-sign.ru>
Cc: "Eric W. Biederman" <ebiederm@xmission.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'kernel/pid.c')
-rw-r--r-- | kernel/pid.c | 10 |
1 files changed, 1 insertions, 9 deletions
diff --git a/kernel/pid.c b/kernel/pid.c index 7781d9999058..a9f2dfd006d2 100644 --- a/kernel/pid.c +++ b/kernel/pid.c | |||
@@ -247,16 +247,8 @@ void __init pidhash_init(void) | |||
247 | 247 | ||
248 | void __init pidmap_init(void) | 248 | void __init pidmap_init(void) |
249 | { | 249 | { |
250 | int i; | ||
251 | |||
252 | pidmap_array->page = (void *)get_zeroed_page(GFP_KERNEL); | 250 | pidmap_array->page = (void *)get_zeroed_page(GFP_KERNEL); |
251 | /* Reserve PID 0. We never call free_pidmap(0) */ | ||
253 | set_bit(0, pidmap_array->page); | 252 | set_bit(0, pidmap_array->page); |
254 | atomic_dec(&pidmap_array->nr_free); | 253 | atomic_dec(&pidmap_array->nr_free); |
255 | |||
256 | /* | ||
257 | * Allocate PID 0, and hash it via all PID types: | ||
258 | */ | ||
259 | |||
260 | for (i = 0; i < PIDTYPE_MAX; i++) | ||
261 | attach_pid(current, i, 0); | ||
262 | } | 254 | } |