From: ebiederm@xmission.com (Eric W. Biederman)
To: Oleg Nesterov <oleg@tv-sign.ru>
Cc: Andrew Morton <akpm@osdl.org>,
linux-kernel@vger.kernel.org, Ingo Molnar <mingo@elte.hu>,
"Paul E. McKenney" <paulmck@us.ibm.com>,
Linus Torvalds <torvalds@osdl.org>
Subject: Re: [PATCH rc5-mm] pids: kill PIDTYPE_TGID
Date: Wed, 08 Mar 2006 15:12:59 -0700 [thread overview]
Message-ID: <m1zmk0twk4.fsf@ebiederm.dsl.xmission.com> (raw)
In-Reply-To: <440F50A7.EBAD87D5@tv-sign.ru> (Oleg Nesterov's message of "Thu, 09 Mar 2006 00:46:15 +0300")
Oleg Nesterov <oleg@tv-sign.ru> writes:
> Eric W. Biederman wrote:
>>
>> > p->group_leader = current->group_leader;
>> > + list_add_tail_rcu(&p->thread_group, ¤t->thread_group);
>> Can this be:
>> list_add_tail_rcu(&p->thread_group, ¤t->group_leader->thread_group);
>
> Done.
>
>> That way at least the odds of missing a new task_struct when doing an
>> rcu traversal are reduced almost to 0.
>
> Am I understand correctly? This change has effect when we are doing the
> traversal starting from ->group_leader in a "best effort" manner lockless,
> yes?
Yes. The important point for reasoning about it is that we have a fixed
point that we append or prepend to.
I think I have finally figured out the invariants we will need to
send signals using just the rcu_read_lock(). In that case we want to
traverse the list in such a way that we are guaranteed to never see
new entries. That gives us an atomic snapshot of the tasks to send
signals to, and it gives us a progress guarantee.
Now I need to look and see if any one has documented any rules
regarding atomicity of sending signals to a group of processes.
> [PATCH rc5-mm] pids: kill PIDTYPE_TGID
>
> depends on pidhash-dont-count-idle-threads.patch
>
> This patch kills PIDTYPE_TGID pid_type thus saving one hash table
> in kernel/pid.c and speeding up subthreads create/destroy a bit.
> It is also a preparation for the further tref/pids rework.
>
> This patch adds 'struct list_head thread_group' to 'struct task_struct'
> instead.
>
> We don't detach group leader from PIDTYPE_PID namespace until another
> thread inherits it's ->pid == ->tgid, so we are safe wrt premature
> free_pidmap(->tgid) call.
>
> Currently there are no users of find_task_by_pid_type(PIDTYPE_TGID).
> Should the need arise, we can use find_task_by_pid()->group_leader.
>
> include/linux/pid.h | 1 -
> include/linux/sched.h | 11 ++++++++---
> kernel/exit.c | 10 +---------
> kernel/fork.c | 4 +++-
> 4 files changed, 12 insertions(+), 14 deletions(-)
>
> Signed-off-by: Oleg Nesterov <oleg@tv-sign.ru>
Acked-By: Eric Biederman <ebiederm@xmission.com>
prev parent reply other threads:[~2006-03-08 22:14 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-03-07 20:19 [PATCH rc5-mm] pids: kill PIDTYPE_TGID Oleg Nesterov
2006-03-07 22:42 ` Eric W. Biederman
2006-03-08 14:41 ` Oleg Nesterov
2006-03-08 16:19 ` Eric W. Biederman
2006-03-08 19:23 ` Oleg Nesterov
2006-03-08 20:00 ` Eric W. Biederman
2006-03-08 21:46 ` Oleg Nesterov
2006-03-08 22:12 ` Eric W. Biederman [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=m1zmk0twk4.fsf@ebiederm.dsl.xmission.com \
--to=ebiederm@xmission.com \
--cc=akpm@osdl.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=oleg@tv-sign.ru \
--cc=paulmck@us.ibm.com \
--cc=torvalds@osdl.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.