From: John Stultz <john.stultz@linaro.org>
To: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
Cc: linux-kernel@vger.kernel.org, joe@perches.com, mingo@elte.hu,
mina86@mina86.com, apw@canonical.com, jirislaby@gmail.com,
rientjes@google.com, dave@linux.vnet.ibm.com,
akpm@linux-foundation.org, linux-mm@kvack.org
Subject: Re: [PATCH 1/4] comm: Introduce comm_lock spinlock to protect task->comm access
Date: Tue, 17 May 2011 21:11:36 -0700 [thread overview]
Message-ID: <1305691896.2915.136.camel@work-vm> (raw)
In-Reply-To: <4DD3287A.2030808@jp.fujitsu.com>
On Wed, 2011-05-18 at 11:01 +0900, KOSAKI Motohiro wrote:
> > diff --git a/fs/exec.c b/fs/exec.c
> > index 5e62d26..34fa611 100644
> > --- a/fs/exec.c
> > +++ b/fs/exec.c
> > @@ -998,17 +998,28 @@ static void flush_old_files(struct files_struct * files)
> >
> > char *get_task_comm(char *buf, struct task_struct *tsk)
> > {
> > - /* buf must be at least sizeof(tsk->comm) in size */
> > - task_lock(tsk);
> > + unsigned long flags;
> > +
> > + spin_lock_irqsave(&tsk->comm_lock, flags);
> > strncpy(buf, tsk->comm, sizeof(tsk->comm));
> > - task_unlock(tsk);
> > + spin_unlock_irqrestore(&tsk->comm_lock, flags);
> > return buf;
> > }
> >
> > void set_task_comm(struct task_struct *tsk, char *buf)
> > {
> > + unsigned long flags;
> > +
> > + /*
> > + * XXX - Even though comm is protected by comm_lock,
> > + * we take the task_lock here to serialize against
> > + * current users that directly access comm.
> > + * Once those users are removed, we can drop the
> > + * task locking& memsetting.
> > + */
>
> If we provide __get_task_comm(), we can't remove memset() forever.
True enough. I'll fix that comment up then.
>
> > task_lock(tsk);
> > + spin_lock_irqsave(&tsk->comm_lock, flags);
>
> This is strange order. task_lock() doesn't disable interrupt.
Strange order? Can you explain why you think that is? Having comm_lock
as an inner-most lock seems quite reasonable, given the limited nature
of what it protects.
> And, can you please document why we need interrupt disabling?
Since we might access current->comm from irq context. Where would you
like this documented? Just there in the code?
thanks
-john
WARNING: multiple messages have this Message-ID (diff)
From: John Stultz <john.stultz@linaro.org>
To: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
Cc: linux-kernel@vger.kernel.org, joe@perches.com, mingo@elte.hu,
mina86@mina86.com, apw@canonical.com, jirislaby@gmail.com,
rientjes@google.com, dave@linux.vnet.ibm.com,
akpm@linux-foundation.org, linux-mm@kvack.org
Subject: Re: [PATCH 1/4] comm: Introduce comm_lock spinlock to protect task->comm access
Date: Tue, 17 May 2011 21:11:36 -0700 [thread overview]
Message-ID: <1305691896.2915.136.camel@work-vm> (raw)
In-Reply-To: <4DD3287A.2030808@jp.fujitsu.com>
On Wed, 2011-05-18 at 11:01 +0900, KOSAKI Motohiro wrote:
> > diff --git a/fs/exec.c b/fs/exec.c
> > index 5e62d26..34fa611 100644
> > --- a/fs/exec.c
> > +++ b/fs/exec.c
> > @@ -998,17 +998,28 @@ static void flush_old_files(struct files_struct * files)
> >
> > char *get_task_comm(char *buf, struct task_struct *tsk)
> > {
> > - /* buf must be at least sizeof(tsk->comm) in size */
> > - task_lock(tsk);
> > + unsigned long flags;
> > +
> > + spin_lock_irqsave(&tsk->comm_lock, flags);
> > strncpy(buf, tsk->comm, sizeof(tsk->comm));
> > - task_unlock(tsk);
> > + spin_unlock_irqrestore(&tsk->comm_lock, flags);
> > return buf;
> > }
> >
> > void set_task_comm(struct task_struct *tsk, char *buf)
> > {
> > + unsigned long flags;
> > +
> > + /*
> > + * XXX - Even though comm is protected by comm_lock,
> > + * we take the task_lock here to serialize against
> > + * current users that directly access comm.
> > + * Once those users are removed, we can drop the
> > + * task locking& memsetting.
> > + */
>
> If we provide __get_task_comm(), we can't remove memset() forever.
True enough. I'll fix that comment up then.
>
> > task_lock(tsk);
> > + spin_lock_irqsave(&tsk->comm_lock, flags);
>
> This is strange order. task_lock() doesn't disable interrupt.
Strange order? Can you explain why you think that is? Having comm_lock
as an inner-most lock seems quite reasonable, given the limited nature
of what it protects.
> And, can you please document why we need interrupt disabling?
Since we might access current->comm from irq context. Where would you
like this documented? Just there in the code?
thanks
-john
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next prev parent reply other threads:[~2011-05-18 4:11 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-05-18 1:41 [PATCH 0/4] v6 Improve task->comm locking situation John Stultz
2011-05-18 1:41 ` John Stultz
2011-05-18 1:41 ` [PATCH 1/4] comm: Introduce comm_lock spinlock to protect task->comm access John Stultz
2011-05-18 1:41 ` John Stultz
2011-05-18 2:01 ` KOSAKI Motohiro
2011-05-18 2:01 ` KOSAKI Motohiro
2011-05-18 4:11 ` John Stultz [this message]
2011-05-18 4:11 ` John Stultz
2011-05-18 5:06 ` KOSAKI Motohiro
2011-05-18 5:06 ` KOSAKI Motohiro
2011-05-18 1:41 ` [PATCH 2/4] comm: Add lock-free task->comm accessor John Stultz
2011-05-18 1:41 ` John Stultz
2011-05-18 1:41 ` [PATCH 3/4] printk: Add %ptc to safely print a task's comm John Stultz
2011-05-18 1:41 ` John Stultz
2011-05-18 1:41 ` [PATCH 4/4] checkpatch.pl: Add check for task comm references John Stultz
2011-05-18 1:41 ` John Stultz
2011-05-18 6:25 ` [PATCH 0/4] v6 Improve task->comm locking situation Ingo Molnar
2011-05-18 6:25 ` Ingo Molnar
2011-05-18 7:05 ` Andrew Morton
2011-05-18 7:05 ` Andrew Morton
2011-05-18 7:58 ` Ingo Molnar
2011-05-18 7:58 ` Ingo Molnar
2011-05-18 19:03 ` John Stultz
2011-05-18 19:03 ` John Stultz
2011-05-18 19:33 ` Andrew Morton
2011-05-18 19:33 ` Andrew Morton
2011-05-18 19:48 ` Ingo Molnar
2011-05-18 19:48 ` Ingo Molnar
2011-05-18 19:56 ` Andrew Morton
2011-05-18 19:56 ` Andrew Morton
2011-05-18 20:48 ` Ingo Molnar
2011-05-18 20:48 ` Ingo Molnar
2011-05-18 19:58 ` Linus Torvalds
2011-05-18 19:58 ` Linus Torvalds
2011-05-20 10:41 ` KOSAKI Motohiro
2011-05-20 10:41 ` KOSAKI Motohiro
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=1305691896.2915.136.camel@work-vm \
--to=john.stultz@linaro.org \
--cc=akpm@linux-foundation.org \
--cc=apw@canonical.com \
--cc=dave@linux.vnet.ibm.com \
--cc=jirislaby@gmail.com \
--cc=joe@perches.com \
--cc=kosaki.motohiro@jp.fujitsu.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mina86@mina86.com \
--cc=mingo@elte.hu \
--cc=rientjes@google.com \
/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.