All of lore.kernel.org
 help / color / mirror / Atom feed
From: Darren Hart <dvhart-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org>
To: "Michael Kerrisk (man-pages)"
	<mtk.manpages-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Cc: Thomas Gleixner <tglx-hfZtesqFncYOwBW4kG4KsQ@public.gmane.org>,
	Torvald Riegel <triegel-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>,
	Carlos O'Donell <carlos-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>,
	Ingo Molnar <mingo-X9Un+BFzKDI@public.gmane.org>,
	Jakub Jelinek <jakub-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>,
	linux-man <linux-man-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
	lkml <linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
	Davidlohr Bueso <dave-h16yJtLeMjHk1uMJSBkQmQ@public.gmane.org>,
	Arnd Bergmann <arnd-r2nGTMty4D4@public.gmane.org>,
	Steven Rostedt <rostedt-nx8X9YLhiw1AfugRpC6u6w@public.gmane.org>,
	Peter Zijlstra <peterz-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org>,
	Linux API <linux-api-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
	Roland McGrath <roland-/Z5OmTQCD9xF6kxbq+BtvQ@public.gmane.org>,
	Anton Blanchard <anton-eUNUBHrolfbYtjvyW6yDsg@public.gmane.org>,
	Eric Dumazet <edumazet-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>,
	bill o gallmeister
	<bgallmeister-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
	Jan Kiszka <jan.kiszka-kv7WeFo6aLtBDgjK7y7TUQ@public.gmane.org>,
	Daniel Wagner <wagi-kQCPcA+X3s7YtjvyW6yDsg@public.gmane.org>,
	Rich Felker <dalias-8zAoT0mYgF4@public.gmane.org>,
	Andy Lutomirski <luto-kltTT9wpgjJwATOyAt5JVQ@public.gmane.org>,
	bert hubert <bert.hubert-dxZxOz86jR8sYtaaK7K+xw@public.gmane.org>,
	Rusty Russell <rusty-8n+1lVoiYb80n/F98K4Iww@public.gmane.org>,
	Heinrich Schuchardt <xypron.glpk-Mmb7MZpHnFY@public.gmane.org>
Subject: Re: Next round: revised futex(2) man page for review
Date: Thu, 8 Oct 2015 15:46:34 +0100	[thread overview]
Message-ID: <20151008144634.GC101005@vmdeb7> (raw)
In-Reply-To: <5614E71B.3040500-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>

On Wed, Oct 07, 2015 at 10:34:19AM +0100, Michael Kerrisk (man-pages) wrote:
> On 08/19/2015 03:40 PM, Thomas Gleixner wrote:
> > On Wed, 5 Aug 2015, Darren Hart wrote:
> >> On Mon, Jul 27, 2015 at 02:07:15PM +0200, Michael Kerrisk (man-pages) wrote:
> >>> .\" FIXME XXX ===== Start of adapted Hart/Guniguntala text =====
> >>> .\"       The following text is drawn from the Hart/Guniguntala paper
> >>> .\"       (listed in SEE ALSO), but I have reworded some pieces
> >>> .\"       significantly. Please check it.
> >>>
> >>>        The PI futex operations described below  differ  from  the  other
> >>>        futex  operations  in  that  they impose policy on the use of the
> >>>        value of the futex word:
> >>>
> >>>        *  If the lock is not acquired, the futex word's value  shall  be
> >>>           0.
> >>>
> >>>        *  If  the  lock is acquired, the futex word's value shall be the
> >>>           thread ID (TID; see gettid(2)) of the owning thread.
> >>>
> >>>        *  If the lock is owned and there are threads contending for  the
> >>>           lock,  then  the  FUTEX_WAITERS  bit shall be set in the futex
> >>>           word's value; in other words, this value is:
> >>>
> >>>               FUTEX_WAITERS | TID
> >>>
> >>>
> >>>        Note that a PI futex word never just has the value FUTEX_WAITERS,
> >>>        which is a permissible state for non-PI futexes.
> >>
> >> The second clause is inappropriate. I don't know if that was yours or
> >> mine, but non-PI futexes do not have a kernel defined value policy, so
> >> ==FUTEX_WAITERS cannot be a "permissible state" as any value is
> >> permissible for non-PI futexes, and none have a kernel defined state.
> > 
> > Depends. If the regular futex is configured as robust, then we have a
> > kernel defined value policy as well.
> 

Right.

> Okay -- so do we need a change to the text here?

Hrm. We probably need a way to indicate that kernel-defined futex word
value policy only applies to PI and or ROBUST futexes.


> 
> >>> .\" FIXME I'm not quite clear on the meaning of the following sentence.
> >>> .\"       Is this trying to say that while blocked in a
> >>> .\"       FUTEX_WAIT_REQUEUE_PI, it could happen that another
> >>> .\"       task does a FUTEX_WAKE on uaddr that simply causes
> >>> .\"       a normal wake, with the result that the FUTEX_WAIT_REQUEUE_PI
> >>> .\"       does not complete? What happens then to the FUTEX_WAIT_REQUEUE_PI
> >>> .\"       opertion? Does it remain blocked, or does it unblock
> >>> .\"       In which case, what does user space see?
> >>>
> >>>               The
> >>>               waiter   can  be  removed  from  the  wait  on  uaddr  via
> >>>               FUTEX_WAKE without requeueing on uaddr2.
> >>
> >> Userspace should see the task wake and continue executing. This would
> >> effectively be a cancelation operation - which I didn't think was
> >> supported. Thomas?
> > 
> > We probably never intended to support it, but looking at the code it
> > works (did not try it though). It returns to user space with
> > -EWOULDBLOCK. So it basically behaves like any other spurious wakeup.
> 
> Again, I assume no changes are required to the man page(?).

I'd rather not document this as supported or intended behavior.
FUTEX_WAIT_REQUEUE_PI is documented as being paired with and only with
FUTEX_CMP_REQUEUE_PI. Anything else is undefined behavior.

If we want to support a cancelation, it should be deliberate - and we should
probably test it ;-)


-- 
Darren Hart
Intel Open Source Technology Center

WARNING: multiple messages have this Message-ID (diff)
From: Darren Hart <dvhart@infradead.org>
To: "Michael Kerrisk (man-pages)" <mtk.manpages@gmail.com>
Cc: Thomas Gleixner <tglx@linutronix.de>,
	Torvald Riegel <triegel@redhat.com>,
	"Carlos O'Donell" <carlos@redhat.com>,
	Ingo Molnar <mingo@elte.hu>, Jakub Jelinek <jakub@redhat.com>,
	linux-man <linux-man@vger.kernel.org>,
	lkml <linux-kernel@vger.kernel.org>,
	Davidlohr Bueso <dave@stgolabs.net>,
	Arnd Bergmann <arnd@arndb.de>,
	Steven Rostedt <rostedt@goodmis.org>,
	Peter Zijlstra <peterz@infradead.org>,
	Linux API <linux-api@vger.kernel.org>,
	Roland McGrath <roland@hack.frob.com>,
	Anton Blanchard <anton@samba.org>,
	Eric Dumazet <edumazet@google.com>,
	bill o gallmeister <bgallmeister@gmail.com>,
	Jan Kiszka <jan.kiszka@siemens.com>,
	Daniel Wagner <wagi@monom.org>, Rich Felker <dalias@libc.org>,
	Andy Lutomirski <luto@amacapital.net>,
	bert hubert <bert.hubert@netherlabs.nl>,
	Rusty Russell <rusty@rustcorp.com.au>,
	Heinrich Schuchardt <xypron.glpk@gmx.de>
Subject: Re: Next round: revised futex(2) man page for review
Date: Thu, 8 Oct 2015 15:46:34 +0100	[thread overview]
Message-ID: <20151008144634.GC101005@vmdeb7> (raw)
In-Reply-To: <5614E71B.3040500@gmail.com>

On Wed, Oct 07, 2015 at 10:34:19AM +0100, Michael Kerrisk (man-pages) wrote:
> On 08/19/2015 03:40 PM, Thomas Gleixner wrote:
> > On Wed, 5 Aug 2015, Darren Hart wrote:
> >> On Mon, Jul 27, 2015 at 02:07:15PM +0200, Michael Kerrisk (man-pages) wrote:
> >>> .\" FIXME XXX ===== Start of adapted Hart/Guniguntala text =====
> >>> .\"       The following text is drawn from the Hart/Guniguntala paper
> >>> .\"       (listed in SEE ALSO), but I have reworded some pieces
> >>> .\"       significantly. Please check it.
> >>>
> >>>        The PI futex operations described below  differ  from  the  other
> >>>        futex  operations  in  that  they impose policy on the use of the
> >>>        value of the futex word:
> >>>
> >>>        *  If the lock is not acquired, the futex word's value  shall  be
> >>>           0.
> >>>
> >>>        *  If  the  lock is acquired, the futex word's value shall be the
> >>>           thread ID (TID; see gettid(2)) of the owning thread.
> >>>
> >>>        *  If the lock is owned and there are threads contending for  the
> >>>           lock,  then  the  FUTEX_WAITERS  bit shall be set in the futex
> >>>           word's value; in other words, this value is:
> >>>
> >>>               FUTEX_WAITERS | TID
> >>>
> >>>
> >>>        Note that a PI futex word never just has the value FUTEX_WAITERS,
> >>>        which is a permissible state for non-PI futexes.
> >>
> >> The second clause is inappropriate. I don't know if that was yours or
> >> mine, but non-PI futexes do not have a kernel defined value policy, so
> >> ==FUTEX_WAITERS cannot be a "permissible state" as any value is
> >> permissible for non-PI futexes, and none have a kernel defined state.
> > 
> > Depends. If the regular futex is configured as robust, then we have a
> > kernel defined value policy as well.
> 

Right.

> Okay -- so do we need a change to the text here?

Hrm. We probably need a way to indicate that kernel-defined futex word
value policy only applies to PI and or ROBUST futexes.


> 
> >>> .\" FIXME I'm not quite clear on the meaning of the following sentence.
> >>> .\"       Is this trying to say that while blocked in a
> >>> .\"       FUTEX_WAIT_REQUEUE_PI, it could happen that another
> >>> .\"       task does a FUTEX_WAKE on uaddr that simply causes
> >>> .\"       a normal wake, with the result that the FUTEX_WAIT_REQUEUE_PI
> >>> .\"       does not complete? What happens then to the FUTEX_WAIT_REQUEUE_PI
> >>> .\"       opertion? Does it remain blocked, or does it unblock
> >>> .\"       In which case, what does user space see?
> >>>
> >>>               The
> >>>               waiter   can  be  removed  from  the  wait  on  uaddr  via
> >>>               FUTEX_WAKE without requeueing on uaddr2.
> >>
> >> Userspace should see the task wake and continue executing. This would
> >> effectively be a cancelation operation - which I didn't think was
> >> supported. Thomas?
> > 
> > We probably never intended to support it, but looking at the code it
> > works (did not try it though). It returns to user space with
> > -EWOULDBLOCK. So it basically behaves like any other spurious wakeup.
> 
> Again, I assume no changes are required to the man page(?).

I'd rather not document this as supported or intended behavior.
FUTEX_WAIT_REQUEUE_PI is documented as being paired with and only with
FUTEX_CMP_REQUEUE_PI. Anything else is undefined behavior.

If we want to support a cancelation, it should be deliberate - and we should
probably test it ;-)


-- 
Darren Hart
Intel Open Source Technology Center

  parent reply	other threads:[~2015-10-08 14:46 UTC|newest]

Thread overview: 45+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-07-27 12:07 Next round: revised futex(2) man page for review Michael Kerrisk (man-pages)
2015-07-27 12:07 ` Michael Kerrisk (man-pages)
     [not found] ` <55B61EF3.7080302-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2015-07-28 20:23   ` Thomas Gleixner
2015-07-28 20:23     ` Thomas Gleixner
2015-07-28 20:45     ` Peter Zijlstra
2015-07-28 20:45       ` Peter Zijlstra
     [not found]       ` <20150728204508.GG19282-ndre7Fmf5hadTX5a5knrm8zTDFooKrT+cvkQGrU6aU0@public.gmane.org>
2015-07-28 21:03         ` Thomas Gleixner
2015-07-28 21:03           ` Thomas Gleixner
2015-08-08  6:56           ` Michael Kerrisk (man-pages)
2015-08-08  6:56             ` Michael Kerrisk (man-pages)
2015-07-29  2:09         ` Davidlohr Bueso
2015-07-29  2:09           ` Davidlohr Bueso
2015-07-29  4:11     ` Darren Hart
2015-07-29  4:11       ` Darren Hart
2015-07-29  4:21       ` Darren Hart
2015-07-29  4:21         ` Darren Hart
2015-07-29 12:00         ` Thomas Gleixner
2015-07-29 12:00           ` Thomas Gleixner
2015-07-30  8:19         ` Michael Kerrisk (man-pages)
2015-07-30  8:19           ` Michael Kerrisk (man-pages)
2015-08-08  6:53     ` Michael Kerrisk (man-pages)
2015-08-08  6:53       ` Michael Kerrisk (man-pages)
     [not found]       ` <55C5A787.9010806-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2015-08-19 23:17         ` Thomas Gleixner
2015-08-19 23:17           ` Thomas Gleixner
2015-08-26  6:29           ` Darren Hart
2015-08-26  6:29             ` Darren Hart
2015-10-07  8:30           ` Michael Kerrisk (man-pages)
2015-10-07  8:30             ` Michael Kerrisk (man-pages)
     [not found]             ` <5614D836.7070506-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2015-10-08 14:36               ` Darren Hart
2015-10-08 14:36                 ` Darren Hart
2015-08-05 22:21 ` Darren Hart
2015-08-08  6:57   ` Michael Kerrisk (man-pages)
2015-08-08  6:57     ` Michael Kerrisk (man-pages)
     [not found]     ` <55C5A85F.3020202-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2015-08-24 21:47       ` Darren Hart
2015-08-24 21:47         ` Darren Hart
2015-08-19 22:40   ` Thomas Gleixner
2015-08-19 22:40     ` Thomas Gleixner
2015-08-18 12:45     ` Darren Hart
2015-08-18 12:45       ` Darren Hart
2015-10-07  9:34     ` Michael Kerrisk (man-pages)
2015-10-07  9:34       ` Michael Kerrisk (man-pages)
     [not found]       ` <5614E71B.3040500-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2015-10-08 14:46         ` Darren Hart [this message]
2015-10-08 14:46           ` Darren Hart
     [not found] <trinity-f9a7a25f-09e9-4409-b656-0e035dfca0b5-1438006633780@msvc-mesg-gmx010>
2015-07-27 14:44 ` Michael Kerrisk (man-pages)
2015-07-27 14:44   ` Michael Kerrisk (man-pages)

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=20151008144634.GC101005@vmdeb7 \
    --to=dvhart-wegcikhe2lqwvfeawa7xhq@public.gmane.org \
    --cc=anton-eUNUBHrolfbYtjvyW6yDsg@public.gmane.org \
    --cc=arnd-r2nGTMty4D4@public.gmane.org \
    --cc=bert.hubert-dxZxOz86jR8sYtaaK7K+xw@public.gmane.org \
    --cc=bgallmeister-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
    --cc=carlos-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
    --cc=dalias-8zAoT0mYgF4@public.gmane.org \
    --cc=dave-h16yJtLeMjHk1uMJSBkQmQ@public.gmane.org \
    --cc=edumazet-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org \
    --cc=jakub-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
    --cc=jan.kiszka-kv7WeFo6aLtBDgjK7y7TUQ@public.gmane.org \
    --cc=linux-api-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=linux-man-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=luto-kltTT9wpgjJwATOyAt5JVQ@public.gmane.org \
    --cc=mingo-X9Un+BFzKDI@public.gmane.org \
    --cc=mtk.manpages-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
    --cc=peterz-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org \
    --cc=roland-/Z5OmTQCD9xF6kxbq+BtvQ@public.gmane.org \
    --cc=rostedt-nx8X9YLhiw1AfugRpC6u6w@public.gmane.org \
    --cc=rusty-8n+1lVoiYb80n/F98K4Iww@public.gmane.org \
    --cc=tglx-hfZtesqFncYOwBW4kG4KsQ@public.gmane.org \
    --cc=triegel-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
    --cc=wagi-kQCPcA+X3s7YtjvyW6yDsg@public.gmane.org \
    --cc=xypron.glpk-Mmb7MZpHnFY@public.gmane.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.