* [PATCH] Improve mutex documentation
[not found] ` <20180314135631.3e21b31b154e9f3036fa6c52@linux-foundation.org>
@ 2018-03-15 11:58 ` Matthew Wilcox
2018-03-15 12:12 ` Kirill Tkhai
2018-03-16 13:57 ` Peter Zijlstra
0 siblings, 2 replies; 5+ messages in thread
From: Matthew Wilcox @ 2018-03-15 11:58 UTC (permalink / raw)
To: Andrew Morton
Cc: Kirill Tkhai, tj, cl, linux-mm, linux-kernel, linux-doc,
Jonathan Corbet, Mauro Carvalho Chehab, Peter Zijlstra,
Ingo Molnar
On Wed, Mar 14, 2018 at 01:56:31PM -0700, Andrew Morton wrote:
> My memory is weak and our documentation is awful. What does
> mutex_lock_killable() actually do and how does it differ from
> mutex_lock_interruptible()?
From: Matthew Wilcox <mawilcox@microsoft.com>
Add kernel-doc for mutex_lock_killable() and mutex_lock_io(). Reword the
kernel-doc for mutex_lock_interruptible().
Signed-off-by: Matthew Wilcox <mawilcox@microsoft.com>
diff --git a/kernel/locking/mutex.c b/kernel/locking/mutex.c
index 858a07590e39..2048359f33d2 100644
--- a/kernel/locking/mutex.c
+++ b/kernel/locking/mutex.c
@@ -1082,15 +1082,16 @@ static noinline int __sched
__mutex_lock_interruptible_slowpath(struct mutex *lock);
/**
- * mutex_lock_interruptible - acquire the mutex, interruptible
- * @lock: the mutex to be acquired
+ * mutex_lock_interruptible() - Acquire the mutex, interruptible by signals.
+ * @lock: The mutex to be acquired.
*
- * Lock the mutex like mutex_lock(), and return 0 if the mutex has
- * been acquired or sleep until the mutex becomes available. If a
- * signal arrives while waiting for the lock then this function
- * returns -EINTR.
+ * Lock the mutex like mutex_lock(). If a signal is delivered while the
+ * process is sleeping, this function will return without acquiring the
+ * mutex.
*
- * This function is similar to (but not equivalent to) down_interruptible().
+ * Context: Process context.
+ * Return: 0 if the lock was successfully acquired or %-EINTR if a
+ * signal arrived.
*/
int __sched mutex_lock_interruptible(struct mutex *lock)
{
@@ -1104,6 +1105,18 @@ int __sched mutex_lock_interruptible(struct mutex *lock)
EXPORT_SYMBOL(mutex_lock_interruptible);
+/**
+ * mutex_lock_killable() - Acquire the mutex, interruptible by fatal signals.
+ * @lock: The mutex to be acquired.
+ *
+ * Lock the mutex like mutex_lock(). If a signal which will be fatal to
+ * the current process is delivered while the process is sleeping, this
+ * function will return without acquiring the mutex.
+ *
+ * Context: Process context.
+ * Return: 0 if the lock was successfully acquired or %-EINTR if a
+ * fatal signal arrived.
+ */
int __sched mutex_lock_killable(struct mutex *lock)
{
might_sleep();
@@ -1115,6 +1128,16 @@ int __sched mutex_lock_killable(struct mutex *lock)
}
EXPORT_SYMBOL(mutex_lock_killable);
+/**
+ * mutex_lock_io() - Acquire the mutex and mark the process as waiting for I/O
+ * @lock: The mutex to be acquired.
+ *
+ * Lock the mutex like mutex_lock(). While the task is waiting for this
+ * mutex, it will be accounted as being in the IO wait state by the
+ * scheduler.
+ *
+ * Context: Process context.
+ */
void __sched mutex_lock_io(struct mutex *lock)
{
int token;
--
To unsubscribe from this list: send the line "unsubscribe linux-doc" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH] Improve mutex documentation
2018-03-15 11:58 ` [PATCH] Improve mutex documentation Matthew Wilcox
@ 2018-03-15 12:12 ` Kirill Tkhai
2018-03-15 13:18 ` Matthew Wilcox
2018-03-16 13:57 ` Peter Zijlstra
1 sibling, 1 reply; 5+ messages in thread
From: Kirill Tkhai @ 2018-03-15 12:12 UTC (permalink / raw)
To: Matthew Wilcox, Andrew Morton
Cc: tj, cl, linux-mm, linux-kernel, linux-doc, Jonathan Corbet,
Mauro Carvalho Chehab, Peter Zijlstra, Ingo Molnar
Hi, Matthew,
On 15.03.2018 14:58, Matthew Wilcox wrote:
> On Wed, Mar 14, 2018 at 01:56:31PM -0700, Andrew Morton wrote:
>> My memory is weak and our documentation is awful. What does
>> mutex_lock_killable() actually do and how does it differ from
>> mutex_lock_interruptible()?
>
> From: Matthew Wilcox <mawilcox@microsoft.com>
>
> Add kernel-doc for mutex_lock_killable() and mutex_lock_io(). Reword the
> kernel-doc for mutex_lock_interruptible().
>
> Signed-off-by: Matthew Wilcox <mawilcox@microsoft.com>
>
> diff --git a/kernel/locking/mutex.c b/kernel/locking/mutex.c
> index 858a07590e39..2048359f33d2 100644
> --- a/kernel/locking/mutex.c
> +++ b/kernel/locking/mutex.c
> @@ -1082,15 +1082,16 @@ static noinline int __sched
> __mutex_lock_interruptible_slowpath(struct mutex *lock);
>
> /**
> - * mutex_lock_interruptible - acquire the mutex, interruptible
> - * @lock: the mutex to be acquired
> + * mutex_lock_interruptible() - Acquire the mutex, interruptible by signals.
> + * @lock: The mutex to be acquired.
> *
> - * Lock the mutex like mutex_lock(), and return 0 if the mutex has
> - * been acquired or sleep until the mutex becomes available. If a
> - * signal arrives while waiting for the lock then this function
> - * returns -EINTR.
> + * Lock the mutex like mutex_lock(). If a signal is delivered while the
> + * process is sleeping, this function will return without acquiring the
> + * mutex.
> *
> - * This function is similar to (but not equivalent to) down_interruptible().
> + * Context: Process context.
> + * Return: 0 if the lock was successfully acquired or %-EINTR if a
> + * signal arrived.
> */
> int __sched mutex_lock_interruptible(struct mutex *lock)
> {
> @@ -1104,6 +1105,18 @@ int __sched mutex_lock_interruptible(struct mutex *lock)
>
> EXPORT_SYMBOL(mutex_lock_interruptible);
>
> +/**
> + * mutex_lock_killable() - Acquire the mutex, interruptible by fatal signals.
Shouldn't we clarify that fatal signals are SIGKILL only?
> + * @lock: The mutex to be acquired.
> + *
> + * Lock the mutex like mutex_lock(). If a signal which will be fatal to
> + * the current process is delivered while the process is sleeping, this
> + * function will return without acquiring the mutex.
> + *
> + * Context: Process context.
> + * Return: 0 if the lock was successfully acquired or %-EINTR if a
> + * fatal signal arrived.
> + */
> int __sched mutex_lock_killable(struct mutex *lock)
> {
> might_sleep();
> @@ -1115,6 +1128,16 @@ int __sched mutex_lock_killable(struct mutex *lock)
> }
> EXPORT_SYMBOL(mutex_lock_killable);
>
> +/**
> + * mutex_lock_io() - Acquire the mutex and mark the process as waiting for I/O
> + * @lock: The mutex to be acquired.
> + *
> + * Lock the mutex like mutex_lock(). While the task is waiting for this
> + * mutex, it will be accounted as being in the IO wait state by the
> + * scheduler.
> + *
> + * Context: Process context.
> + */
> void __sched mutex_lock_io(struct mutex *lock)
> {
> int token;
>
--
To unsubscribe from this list: send the line "unsubscribe linux-doc" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] Improve mutex documentation
2018-03-15 12:12 ` Kirill Tkhai
@ 2018-03-15 13:18 ` Matthew Wilcox
2018-03-15 13:23 ` Kirill Tkhai
0 siblings, 1 reply; 5+ messages in thread
From: Matthew Wilcox @ 2018-03-15 13:18 UTC (permalink / raw)
To: Kirill Tkhai
Cc: Andrew Morton, tj, cl, linux-mm, linux-kernel, linux-doc,
Jonathan Corbet, Mauro Carvalho Chehab, Peter Zijlstra,
Ingo Molnar
On Thu, Mar 15, 2018 at 03:12:30PM +0300, Kirill Tkhai wrote:
> > +/**
> > + * mutex_lock_killable() - Acquire the mutex, interruptible by fatal signals.
>
> Shouldn't we clarify that fatal signals are SIGKILL only?
It's more complicated than it might seem (... welcome to signal handling!)
If you send SIGINT to a task that's waiting on a mutex_killable(), it will
still die. I *think* that's due to the code in complete_signal():
if (sig_fatal(p, sig) &&
!(signal->flags & SIGNAL_GROUP_EXIT) &&
!sigismember(&t->real_blocked, sig) &&
(sig == SIGKILL || !p->ptrace)) {
...
sigaddset(&t->pending.signal, SIGKILL);
You're correct that this code only checks for SIGKILL, but any fatal
signal will result in the signal group receiving SIGKILL.
Unless I've misunderstood, and it wouldn't be the first time I've
misunderstood signal handling.
--
To unsubscribe from this list: send the line "unsubscribe linux-doc" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] Improve mutex documentation
2018-03-15 13:18 ` Matthew Wilcox
@ 2018-03-15 13:23 ` Kirill Tkhai
0 siblings, 0 replies; 5+ messages in thread
From: Kirill Tkhai @ 2018-03-15 13:23 UTC (permalink / raw)
To: Matthew Wilcox
Cc: Andrew Morton, tj, cl, linux-mm, linux-kernel, linux-doc,
Jonathan Corbet, Mauro Carvalho Chehab, Peter Zijlstra,
Ingo Molnar
On 15.03.2018 16:18, Matthew Wilcox wrote:
> On Thu, Mar 15, 2018 at 03:12:30PM +0300, Kirill Tkhai wrote:
>>> +/**
>>> + * mutex_lock_killable() - Acquire the mutex, interruptible by fatal signals.
>>
>> Shouldn't we clarify that fatal signals are SIGKILL only?
>
> It's more complicated than it might seem (... welcome to signal handling!)
> If you send SIGINT to a task that's waiting on a mutex_killable(), it will
> still die. I *think* that's due to the code in complete_signal():
>
> if (sig_fatal(p, sig) &&
> !(signal->flags & SIGNAL_GROUP_EXIT) &&
> !sigismember(&t->real_blocked, sig) &&
> (sig == SIGKILL || !p->ptrace)) {
> ...
> sigaddset(&t->pending.signal, SIGKILL);
>
> You're correct that this code only checks for SIGKILL, but any fatal
> signal will result in the signal group receiving SIGKILL.
>
> Unless I've misunderstood, and it wouldn't be the first time I've
> misunderstood signal handling.
Sure, thanks for the explanation.
Kirill
--
To unsubscribe from this list: send the line "unsubscribe linux-doc" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] Improve mutex documentation
2018-03-15 11:58 ` [PATCH] Improve mutex documentation Matthew Wilcox
2018-03-15 12:12 ` Kirill Tkhai
@ 2018-03-16 13:57 ` Peter Zijlstra
1 sibling, 0 replies; 5+ messages in thread
From: Peter Zijlstra @ 2018-03-16 13:57 UTC (permalink / raw)
To: Matthew Wilcox
Cc: Andrew Morton, Kirill Tkhai, tj, cl, linux-mm, linux-kernel,
linux-doc, Jonathan Corbet, Mauro Carvalho Chehab, Ingo Molnar
On Thu, Mar 15, 2018 at 04:58:12AM -0700, Matthew Wilcox wrote:
> On Wed, Mar 14, 2018 at 01:56:31PM -0700, Andrew Morton wrote:
> > My memory is weak and our documentation is awful. What does
> > mutex_lock_killable() actually do and how does it differ from
> > mutex_lock_interruptible()?
>
> From: Matthew Wilcox <mawilcox@microsoft.com>
>
> Add kernel-doc for mutex_lock_killable() and mutex_lock_io(). Reword the
> kernel-doc for mutex_lock_interruptible().
>
> Signed-off-by: Matthew Wilcox <mawilcox@microsoft.com>
Thanks Matthew!
--
To unsubscribe from this list: send the line "unsubscribe linux-doc" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2018-03-16 13:57 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <152102825828.13166.9574628787314078889.stgit@localhost.localdomain>
[not found] ` <20180314135631.3e21b31b154e9f3036fa6c52@linux-foundation.org>
2018-03-15 11:58 ` [PATCH] Improve mutex documentation Matthew Wilcox
2018-03-15 12:12 ` Kirill Tkhai
2018-03-15 13:18 ` Matthew Wilcox
2018-03-15 13:23 ` Kirill Tkhai
2018-03-16 13:57 ` Peter Zijlstra
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox