From: "Michael Kerrisk (man-pages)" <mtk.manpages@gmail.com>
To: Torvald Riegel <triegel@redhat.com>
Cc: mtk.manpages@gmail.com, Thomas Gleixner <tglx@linutronix.de>,
Darren Hart <dvhart@infradead.org>,
lkml <linux-kernel@vger.kernel.org>,
libc-alpha <libc-alpha@sourceware.org>,
linux-man <linux-man@vger.kernel.org>,
"Carlos O'Donell" <carlos@redhat.com>,
Roland McGrath <roland@hack.frob.com>,
Davidlohr Bueso <dave@stgolabs.net>,
Jakub Jelinek <jakub@redhat.com>, Ingo Molnar <mingo@elte.hu>,
bill o gallmeister <bgallmeister@gmail.com>,
bert hubert <bert.hubert@netherlabs.nl>,
Jan Kiszka <jan.kiszka@siemens.com>,
Eric Dumazet <edumazet@google.com>, Arnd Bergmann <arnd@arndb.de>,
Rusty Russell <rusty@rustcorp.com.au>,
Heinrich Schuchardt <xypron.glpk@gmx.de>,
Andy Lutomirski <luto@amacapital.net>,
Daniel Wagner <wagi@monom.org>, Anton Blanchard <anton@samba.org>,
Steven Rostedt <rostedt@goodmis.org>,
Rich Felker <dalias@libc.org>,
Jonathan Wakely <jwakely@redhat.com>,
Mike Frysinger <vapier@gentoo.org>
Subject: Re: futex(3) man page, final draft for pre-release review
Date: Tue, 15 Dec 2015 17:02:45 +0100 [thread overview]
Message-ID: <567039A5.9050109@gmail.com> (raw)
In-Reply-To: <1450193693.27311.115.camel@localhost.localdomain>
Hello Torvald,
On 12/15/2015 04:34 PM, Torvald Riegel wrote:
> On Tue, 2015-12-15 at 14:43 +0100, Michael Kerrisk (man-pages) wrote:
>> Hello all,
>>
>> After much too long a time, the revised futex man page *will*
>> go out in the next man pages release (it has been merged
>> into master).
>>
>> There are various places where the page could still be improved,
>> but it is much better (and more than 5 times longer) than the
>> existing page.
>
> This looks good to me; I just saw minor things (see below). Thank you
> for all the work you put into this (and to everybody who contributed)!
Hey Torvald, you were one of the biggest contributors, so, thanks!
>> When executing a futex operation that requests to block a thread,
>> the kernel will block only if the futex word has the value that
>> the calling thread supplied (as one of the arguments of the
>> futex() call) as the expected value of the futex word. The load‐
>> ing of the futex word's value, the comparison of that value with
>> the expected value, and the actual blocking will happen atomi‐
>>
>> FIXME: for next line, it would be good to have an explanation of
>> "totally ordered" somewhere around here.
>>
>> cally and totally ordered with respect to concurrently executing
>> futex operations on the same futex word. Thus, the futex word is
>> used to connect the synchronization in user space with the imple‐
>> mentation of blocking by the kernel. Analogously to an atomic
>> compare-and-exchange operation that potentially changes shared
>> memory, blocking via a futex is an atomic compare-and-block oper‐
>> ation.
>
> Maybe -- should we just say that it refers to the mathematical notion of
> a total order (or, technically, a strict total order in this case)?
I added a sentence along those lines.
> Though I would hope that everyone using futexes is roughly aware of the
> differences between partial and total orders.
>> FUTEX_TRYLOCK_PI (since Linux 2.6.18)
>> This operation tries to acquire the futex at uaddr. It is
>
> s/futex/lock/ to make it consistent with FUTEX_LOCK.
Done.
>> invoked when a user-space atomic acquire did not succeed
>> because the futex word was not 0.
>>
>>
>> FIXME(Next sentence) The wording "The trylock in kernel" below
>> needs clarification. Suggestions?
>>
>> The trylock in kernel might succeed because the futex word
>> contains stale state (FUTEX_WAITERS and/or
>> FUTEX_OWNER_DIED). This can happen when the owner of the
>> futex died. User space cannot handle this condition in a
>> race-free manner, but the kernel can fix this up and
>> acquire the futex.
>>
>> The uaddr2, val, timeout, and val3 arguments are ignored.
>
> What about "The acquisition of the lock might suceed if performed by the
> kernel in cases when the futex word contains stale state...".
Sounds good to me. Changed.
>> FUTEX_WAIT_REQUEUE_PI (since Linux 2.6.31)
>> Wait on a non-PI futex at uaddr and potentially be
>> requeued (via a FUTEX_CMP_REQUEUE_PI operation in another
>> task) onto a PI futex at uaddr2. The wait operation on
>> uaddr is the same as for FUTEX_WAIT.
>>
>> The waiter can be removed from the wait on uaddr without
>> requeueing on uaddr2 via a FUTEX_WAKE operation in another
>> task. In this case, the FUTEX_WAIT_REQUEUE_PI operation
>> returns with the error EWOULDBLOCK.
>
> This should be EAGAIN, I suppose, or the enumeration of errors should
> include EWOULDBLOCK.
Changed. BTW, under ERRORS there is already this text:
Note: on Linux, the symbolic names EAGAIN and EWOULDBLOCK
(both of which appear in different parts of the kernel
futex code) have the same value.
Thanks for the comments, Torvald!
Cheers,
Michael
--
Michael Kerrisk
Linux man-pages maintainer; http://www.kernel.org/doc/man-pages/
Linux/UNIX System Programming Training: http://man7.org/training/
next prev parent reply other threads:[~2015-12-15 16:02 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-12-15 13:43 futex(3) man page, final draft for pre-release review Michael Kerrisk (man-pages)
2015-12-15 15:34 ` Torvald Riegel
2015-12-15 16:02 ` Michael Kerrisk (man-pages) [this message]
2015-12-15 21:18 ` Darren Hart
2015-12-16 15:54 ` Michael Kerrisk (man-pages)
2015-12-18 11:11 ` Torvald Riegel
2015-12-18 15:34 ` Jonathan Wakely
2015-12-19 6:54 ` Michael Kerrisk (man-pages)
2015-12-18 11:21 ` Torvald Riegel
2015-12-19 6:56 ` Michael Kerrisk (man-pages)
2015-12-15 22:41 ` Davidlohr Bueso
2015-12-16 15:40 ` Michael Kerrisk (man-pages)
2015-12-18 12:26 ` Torvald Riegel
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=567039A5.9050109@gmail.com \
--to=mtk.manpages@gmail.com \
--cc=anton@samba.org \
--cc=arnd@arndb.de \
--cc=bert.hubert@netherlabs.nl \
--cc=bgallmeister@gmail.com \
--cc=carlos@redhat.com \
--cc=dalias@libc.org \
--cc=dave@stgolabs.net \
--cc=dvhart@infradead.org \
--cc=edumazet@google.com \
--cc=jakub@redhat.com \
--cc=jan.kiszka@siemens.com \
--cc=jwakely@redhat.com \
--cc=libc-alpha@sourceware.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-man@vger.kernel.org \
--cc=luto@amacapital.net \
--cc=mingo@elte.hu \
--cc=roland@hack.frob.com \
--cc=rostedt@goodmis.org \
--cc=rusty@rustcorp.com.au \
--cc=tglx@linutronix.de \
--cc=triegel@redhat.com \
--cc=vapier@gentoo.org \
--cc=wagi@monom.org \
--cc=xypron.glpk@gmx.de \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox