Commit e45f4903 authored by Oleg Nesterov's avatar Oleg Nesterov Committed by Linus Torvalds

[PATCH] detach_pid(): restore optimization

Kirill's kernel/pid.c rework broke optimization logic in detach_pid().  Non
zero return from __detach_pid() was used to indicate, that this pid can
probably be freed.  Current version always (modulo idle threads) return non
zero value, thus resulting in unneccesary pid_hash scanning.

Also, uninlining __detach_pid() reduces pid.o text size from 2492 to 1600
bytes.
Acked-By: default avatarKirill Korotaev <dev@sw.ru>
Signed-off-by: default avatarOleg Nesterov <oleg@tv-sign.ru>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 6d338e92
......@@ -163,15 +163,18 @@ int fastcall attach_pid(task_t *task, enum pid_type type, int nr)
return 0;
}
static inline int __detach_pid(task_t *task, enum pid_type type)
static fastcall int __detach_pid(task_t *task, enum pid_type type)
{
struct pid *pid, *pid_next;
int nr;
int nr = 0;
pid = &task->pids[type];
if (!hlist_unhashed(&pid->pid_chain)) {
hlist_del(&pid->pid_chain);
if (!list_empty(&pid->pid_list)) {
if (list_empty(&pid->pid_list))
nr = pid->nr;
else {
pid_next = list_entry(pid->pid_list.next,
struct pid, pid_list);
/* insert next pid from pid_list to hash */
......@@ -179,8 +182,8 @@ static inline int __detach_pid(task_t *task, enum pid_type type)
&pid_hash[type][pid_hashfn(pid_next->nr)]);
}
}
list_del(&pid->pid_list);
nr = pid->nr;
pid->nr = 0;
return nr;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment