From: Byungchul Park <byungchul.park@lge.com>
To: Peter Zijlstra <peterz@infradead.org>
Cc: mingo@kernel.org, tglx@linutronix.de, walken@google.com,
boqun.feng@gmail.com, kirill@shutemov.name,
linux-kernel@vger.kernel.org, linux-mm@kvack.org,
iamjoonsoo.kim@lge.com, akpm@linux-foundation.org,
npiggin@gmail.com
Subject: Re: [PATCH v4 15/15] lockdep: Crossrelease feature documentation
Date: Wed, 11 Jan 2017 10:29:00 +0900 [thread overview]
Message-ID: <20170111012900.GU2279@X58A-UD3R> (raw)
In-Reply-To: <20170110200850.GE3092@twins.programming.kicks-ass.net>
On Tue, Jan 10, 2017 at 09:08:50PM +0100, Peter Zijlstra wrote:
> But I still feel this document is very hard to read and presents things
> backwards.
I admit it. I think I need to modify the document more.. I will try it.
>
> > +Let's take a look at more complicated example.
> > +
> > + TASK X TASK Y
> > + ------ ------
> > + acquire B
> > +
> > + release B
> > +
> > + acquire C
> > +
> > + release C
> > + (1)
> > + fork Y
> > + acquire AX
> > + acquire D
> > + /* A dependency 'AX -> D' exists */
> > + acquire F
> > + release D
> > + acquire G
> > + /* A dependency 'F -> G' exists */
> > + acquire E
> > + /* A dependency 'AX -> E' exists */
> > + acquire H
> > + /* A dependency 'G -> H' exists */
> > + release E
> > + release H
> > + release AX held by Y
> > + release G
> > +
> > + release F
> > +
> > + where AX, B, C,..., H are different lock classes, and a suffix 'X' is
> > + added on crosslocks.
> > +
> > +Does a dependency 'AX -> B' exist? Nope.
>
> I think the above without the "fork Y" line is a much more interesting
> example, because then the answer becomes: maybe.
Sure. The dependency 'AX -> B' might exist in that case. Then we can
add the dependency once we detect it, in other words, once we prove it's
a true dependency. But we cannot add it before we prove it, though it
might be a true one, because it might not be a true one.
> This all boils down to the asynchonous nature of the primitive. There is
> no well defined point other than what is observed (as I think you tried
> to point out in our earlier exchanges).
Exactly.
> The "acquire AX" point is entirely random wrt any action in other
> threads, _however_ the time between "acquire" and "release" of any
> 'lock' is the only time we can be certain of things.
>
> > +==============
> > +Implementation
> > +==============
> > +
> > +Data structures
> > +---------------
> > +
> > +Crossrelease feature introduces two main data structures.
> > +
> > +1. pend_lock
>
> I'm not sure 'pending' is the right name here, but I'll consider that
> more when I review the code patches.
Thank you.
> > +
> > + This is an array embedded in task_struct, for keeping locks queued so
> > + that real dependencies can be added using them at commit step. Since
> > + it's local data, it can be accessed locklessly in the owner context.
> > + The array is filled at acquire step and consumed at commit step. And
> > + it's managed in circular manner.
> > +
> > +2. cross_lock
> > +
> > + This is a global linked list, for keeping all crosslocks in progress.
> > + The list grows at acquire step and is shrunk at release step.
>
> FWIW, this is a perfect example of why I say the document is written
> backwards. At this point there is no demonstrated need or use for this
> list.
I will consider that more.
> OK, so commit adds multiple dependencies, that makes more sense.
> Previously I understood commit to only add a single dependency, which
> does not make sense (except in the special case where there is but one).
>
> I dislike how I have to reconstruct this from an example instead of
> first having had the rules stated though.
So do I.
>
> > + *
> > + * In pend_lock: D, E
> > + * In graph: 'B -> C', 'C -> D',
> > + * 'AX -> D', 'AX -> E'
> > + */
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next prev parent reply other threads:[~2017-01-11 1:33 UTC|newest]
Thread overview: 51+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-12-09 5:11 [PATCH v4 00/15] lockdep: Implement crossrelease feature Byungchul Park
2016-12-09 5:11 ` [PATCH v4 01/15] x86/dumpstack: Optimize save_stack_trace Byungchul Park
2016-12-09 5:11 ` [PATCH v4 02/15] x86/dumpstack: Add save_stack_trace()_fast() Byungchul Park
2016-12-09 5:11 ` [PATCH v4 03/15] lockdep: Refactor lookup_chain_cache() Byungchul Park
2016-12-09 5:12 ` [PATCH v4 04/15] lockdep: Add a function building a chain between two classes Byungchul Park
2017-01-10 21:00 ` Peter Zijlstra
2017-01-12 1:41 ` Byungchul Park
2016-12-09 5:12 ` [PATCH v4 05/15] lockdep: Make check_prev_add can use a separate stack_trace Byungchul Park
2017-01-12 16:16 ` Peter Zijlstra
2017-01-13 2:45 ` Byungchul Park
2017-01-13 10:11 ` Byungchul Park
2017-01-17 15:54 ` Peter Zijlstra
2017-01-18 2:04 ` Byungchul Park
2017-01-18 15:10 ` Peter Zijlstra
2017-01-19 2:47 ` Byungchul Park
2016-12-09 5:12 ` [PATCH v4 06/15] lockdep: Make save_trace can skip stack tracing of the current Byungchul Park
2017-01-12 16:37 ` Peter Zijlstra
2017-01-13 0:18 ` Byungchul Park
2016-12-09 5:12 ` [PATCH v4 07/15] lockdep: Implement crossrelease feature Byungchul Park
2017-01-13 4:39 ` Lai Jiangshan
2017-01-13 5:02 ` Byungchul Park
2017-01-16 15:10 ` Peter Zijlstra
2017-01-17 2:05 ` Byungchul Park
2017-01-17 7:12 ` Peter Zijlstra
2017-01-17 7:49 ` Byungchul Park
2017-01-17 7:14 ` Peter Zijlstra
2017-01-17 7:45 ` Byungchul Park
2017-01-16 15:13 ` Peter Zijlstra
2017-01-17 2:33 ` Byungchul Park
2017-01-17 6:24 ` Boqun Feng
2017-01-17 7:43 ` Byungchul Park
2016-12-09 5:12 ` [PATCH v4 08/15] lockdep: Make crossrelease use save_stack_trace_fast() Byungchul Park
2016-12-09 5:12 ` [PATCH v4 09/15] lockdep: Make print_circular_bug() crosslock-aware Byungchul Park
2016-12-09 5:12 ` [PATCH v4 10/15] lockdep: Apply crossrelease to completion operation Byungchul Park
2016-12-09 5:12 ` [PATCH v4 11/15] pagemap.h: Remove trailing white space Byungchul Park
2016-12-09 5:12 ` [PATCH v4 12/15] lockdep: Apply crossrelease to PG_locked lock Byungchul Park
2016-12-09 5:12 ` [PATCH v4 13/15] lockdep: Apply lock_acquire(release) on __Set(__Clear)PageLocked Byungchul Park
2016-12-09 5:12 ` [PATCH v4 14/15] lockdep: Move data used in CONFIG_LOCKDEP_PAGELOCK from page to page_ext Byungchul Park
2016-12-09 5:12 ` [PATCH v4 15/15] lockdep: Crossrelease feature documentation Byungchul Park
2017-01-10 20:08 ` Peter Zijlstra
2017-01-11 1:29 ` Byungchul Park [this message]
2017-01-18 6:42 ` Boqun Feng
2017-01-18 10:53 ` Byungchul Park
2017-01-18 11:03 ` Peter Zijlstra
2017-01-18 11:54 ` Byungchul Park
2017-01-18 12:07 ` Peter Zijlstra
2017-01-18 12:14 ` byungchul.park
2017-01-18 14:12 ` Peter Zijlstra
2017-01-19 1:54 ` Byungchul Park
2017-01-18 12:49 ` byungchul.park
2016-12-09 5:21 ` [FYI] Output of 'cat /proc/lockdep' after applying crossrelease Byungchul Park
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=20170111012900.GU2279@X58A-UD3R \
--to=byungchul.park@lge.com \
--cc=akpm@linux-foundation.org \
--cc=boqun.feng@gmail.com \
--cc=iamjoonsoo.kim@lge.com \
--cc=kirill@shutemov.name \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mingo@kernel.org \
--cc=npiggin@gmail.com \
--cc=peterz@infradead.org \
--cc=tglx@linutronix.de \
--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;
as well as URLs for NNTP newsgroup(s).