From: Tim Chen <tim.c.chen@linux.intel.com>
To: Ingo Molnar <mingo@kernel.org>
Cc: linux-tip-commits@vger.kernel.org, linux-kernel@vger.kernel.org,
torvalds@linux-foundation.org, peterz@infradead.org,
peter@hurleysoftware.com, jason.low2@hp.com, riel@redhat.com,
alex.shi@linaro.org, paulmck@linux.vnet.ibm.com,
akpm@linux-foundation.org, tglx@linutronix.de, walken@google.com,
davidlohr@hp.com, "H. Peter Anvin" <hpa@zytor.com>
Subject: Re: [tip:locking/core] rwsem: Add comments to explain the meaning of the rwsem's count field
Date: Mon, 05 May 2014 15:51:16 -0700 [thread overview]
Message-ID: <1399330276.2970.207.camel@schen9-DESK> (raw)
In-Reply-To: <20140505182750.GA14826@gmail.com>
On Mon, 2014-05-05 at 20:27 +0200, Ingo Molnar wrote:
> > Ingo,
> >
> > The delta patch is included below. Thinking a bit more,
> > the state diagram approach is not necessarily less verbose
> > because the state is a tuple (count, wait queue state).
> > After enumerating the states, we may wind up with very similar
> > to what I have.
>
> Could we at least try with one diagram and see how it goes?
>
I've tried (see below). But I don't like how it came out :(
Tim
---
Events:
(1) Attempt read lock (+ACTIVE_BIAS)
(2) Attempt write lock (+ACTIVE_WRITE_BIAS)
(3) Abort read lock or read unlock (-ACTIVE_BIAS)
(4) Abort write lock or write unlock (-ACTIVE_WRITE_BIAS)
(5) Put reader/writer on queue after read/write lock attempt has been aborted
(+WAITING_BIAS if queue empty)
(6) Pull reader/writer from head of queue
(-WAITING_BIAS if queue becomes empty)
State Event Next-State
----- ----- ----------
(A) count > 0 (0x0000000X), queue empty
1 => (A)
2 => (C.0)
3 => (A if count > 1, B if count =1)
4 not applicable
5 => (C.0)
6 not applicable
(B) count = 0 (0x00000000), queue empty
1 => (A)
2 => (C.0)
3, 4 not applicable
5 => (E.0)
6 not applicable
(C.0) 0 > count > WAITING_BIAS (0xffff000X), queue empty
1 => (C.0)
2 => (E.0)
3 => (count=0xffff0001 implies 1 writer, no readers to abort, C.0 if count > 0xffff0001)
4 => (B if count=0xffff0001, A if count > 0xffff0001)
5 => (E.1)
6 not applicable
(C.1) 0 > count > WAITING_BIAS (0xffff000X), queue non-empty
1 => (C.1)
2 => (E.1)
3 => (D if count=0xffff0001, C.1 if count > 0xffff0001)
4 => (B if count=0xffff0001, A if count > 0xffff0001)
5 => (E.1)
6 => (A or B if queue becomes empty, C.1 if queue remains non-empty)
(D) count = WAITING_BIAS (0xffff0000), queue non-empty
1 => (C.0)
2 => (E.0)
3,4 not applicable
5 => (D)
6 => (A if queue becomes empty, D otherwise)
(E.0) count < WAITING_BIAS, queue empty
1 => (E.0)
2 => (E.0)
3 => (E.0)
4 => (C.0 if count > 2*WAITING_BIAS E.0 otherwise)
5 => (E.1)
6 not applicable
(E.1) count < WAITING_BIAS, queue non-empty
1 => (E.1)
2 => (E.1)
3 => (E.1)
4 => (C.1 if count < 2*WAITING_BIAS, E.1 otherwise)
5 => (E.1)
6 => (D if count = 2*WAITING_BIAS, E.1 otherwise, queue remains non-empty) or
E.0 otherwise
next prev parent reply other threads:[~2014-05-05 22:51 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-05-02 19:53 [PATCH v2] rwsem: Comments " Tim Chen
2014-05-05 8:46 ` [tip:locking/core] rwsem: Add comments " tip-bot for Tim Chen
2014-05-05 16:03 ` Tim Chen
2014-05-05 16:31 ` Peter Zijlstra
2014-05-05 16:59 ` Tim Chen
2014-05-05 17:26 ` Ingo Molnar
2014-05-05 18:21 ` Tim Chen
2014-05-05 18:27 ` Ingo Molnar
2014-05-05 22:51 ` Tim Chen [this message]
2014-05-06 2:30 ` Davidlohr Bueso
2014-05-14 14:27 ` Davidlohr Bueso
2014-05-14 14:53 ` Peter Zijlstra
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=1399330276.2970.207.camel@schen9-DESK \
--to=tim.c.chen@linux.intel.com \
--cc=akpm@linux-foundation.org \
--cc=alex.shi@linaro.org \
--cc=davidlohr@hp.com \
--cc=hpa@zytor.com \
--cc=jason.low2@hp.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-tip-commits@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=paulmck@linux.vnet.ibm.com \
--cc=peter@hurleysoftware.com \
--cc=peterz@infradead.org \
--cc=riel@redhat.com \
--cc=tglx@linutronix.de \
--cc=torvalds@linux-foundation.org \
--cc=walken@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 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®