From: Thomas Gleixner <tglx@linutronix.de>
To: Zhu Jefferry <Jefferry.Zhu@freescale.com>
Cc: "linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"bigeasy@linutronix.de" <bigeasy@linutronix.de>
Subject: RE: [PATCH v2] futex: lower the lock contention on the HB lock during wake up
Date: Wed, 16 Sep 2015 10:06:29 +0200 (CEST) [thread overview]
Message-ID: <alpine.DEB.2.11.1509160951370.3951@nanos> (raw)
In-Reply-To: <BN3PR0301MB121902CFD361CA745A79930E835B0@BN3PR0301MB1219.namprd03.prod.outlook.com>
On Wed, 16 Sep 2015, Zhu Jefferry wrote:
> Thanks for your detail guideline and explanations. Please see my questions in-line.
Please trim the reply to the relevant sections. It's annoying if I
have to search your replies inside of useless quoted text.
> > -----Original Message-----
> > From: Thomas Gleixner [mailto:tglx@linutronix.de]
> > The flow is:
> >
> > sys_futex(LOCK_PI, futex, ...)
> >
> > retry:
> > lock(hb(futex));
> > ret = set_waiter_bit(futex);
> > if (ret == -EFAULT) {
> > unlock(hb(futex));
> > handle_fault();
> > goto retry;
> > }
> >
> > list_add();
> > unlock(hb(futex));
> > schedule();
> >
> > So when set_waiter_bit() succeeds, then the hash bucket lock is held and
> > blocks the waker. So it's guaranteed that the waker will see the waiter
> > on the list.
> >
> > If set_waiter_bit() faults, then the waiter bit is not set and therefor
> > there is nothing to wake. So the waker will not enter the kernel because
> > the futex is uncontended.
> >
> I assume your pseudo code set_waiter_bit is mapped to the real code
> "futex_lock_pi_atomic", It's possible for futex_lock_pi_atomic to
> successfully set FUTEX_WAITERS bit, but return with Page fault, for
> example, like fail in lookup_pi_state().
No. It's not. lookup_pi_state() cannot return EFAULT. The only
function which can fault inside of lock_pi_update_atomic() is the
actual cmpxchg. Though lock_pi_update_atomic() can successfully set
the waiter bit and then return with some other failure code (ESRCH,
EAGAIN, ...). But that does not matter at all.
Any failure return will end up in a retry. And if the waker managed to
release the futex before the retry takes place then the waiter will
see that and take the futex.
As I said before:
> > Random speculation is not helping here.
You still fail to provide the relevant information I asked for. If you
cannot provide that information, we can't help.
Thanks,
tglx
next prev parent reply other threads:[~2015-09-16 8:07 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-09-15 1:26 Zhu Jefferry
2015-09-16 0:01 ` Thomas Gleixner
2015-09-16 0:17 ` Zhu Jefferry
2015-09-16 8:06 ` Thomas Gleixner [this message]
2015-09-16 9:52 ` Zhu Jefferry
2015-09-16 10:22 ` Thomas Gleixner
2015-09-16 11:13 ` Zhu Jefferry
2015-09-16 13:39 ` Thomas Gleixner
2015-09-16 23:57 ` Zhu Jefferry
2015-09-17 7:08 ` Thomas Gleixner
-- strict thread matches above, loose matches on Subject: below --
2015-05-19 17:24 [PATCH -tip 0/4] rtmutex: Spin on owner Davidlohr Bueso
2015-05-19 17:24 ` [PATCH 1/4] locking/rtmutex: Implement lockless top-waiter wakeup Davidlohr Bueso
2015-06-16 19:29 ` [PATCH] futex: lower the lock contention on the HB lock during wake up Sebastian Andrzej Siewior
2015-06-16 19:50 ` Davidlohr Bueso
2015-06-17 8:33 ` [PATCH v2] " Sebastian Andrzej Siewior
2015-06-17 14:17 ` Mike Galbraith
2015-06-17 14:28 ` Sebastian Andrzej Siewior
2015-06-17 14:31 ` Mike Galbraith
2015-06-21 4:35 ` Mike Galbraith
2015-06-19 17:51 ` Kevin Hilman
2015-06-19 18:54 ` Thomas Gleixner
2015-06-19 19:32 ` Kevin Hilman
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=alpine.DEB.2.11.1509160951370.3951@nanos \
--to=tglx@linutronix.de \
--cc=Jefferry.Zhu@freescale.com \
--cc=bigeasy@linutronix.de \
--cc=linux-kernel@vger.kernel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®