From: Linus Torvalds <torvalds@linux-foundation.org>
To: Matthew Wilcox <matthew@wil.cx>
Cc: Andi Kleen <andi@firstfloor.org>,
Peter Zijlstra <peterz@infradead.org>,
Bart Van Assche <bart.vanassche@gmail.com>,
Roland Dreier <rdreier@cisco.com>, Ingo Molnar <mingo@elte.hu>,
Ingo Oeser <ioe-lkml@rameria.de>,
Daniel Walker <dwalker@mvista.com>,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH] Replace completions with semaphores
Date: Tue, 15 Apr 2008 11:14:06 -0700 (PDT) [thread overview]
Message-ID: <alpine.LFD.1.00.0804151101590.2879@woody.linux-foundation.org> (raw)
In-Reply-To: <20080415174109.GD9191@parisc-linux.org>
On Tue, 15 Apr 2008, Matthew Wilcox wrote:
>
> > In other words, what makes me not like this is hat we first turn
> > semaphores into the generic code (which is largely what completions were:
> > just a special case of the generic semaphores!) and then turns completions
> > into these things. That just doesn't make any sense to me!
>
> Blame me for not realising that completions were semaphores under a
> different name.
The origin of completions is literally the semaphore code - just
simplified to use spinlocks and be usable as just a mutex. We used to use
semaphores, and because of the subtle race with lockless semaphores I
wrote that stupid completion code as a "generic semaphore with a very
specific usage schenario" and called them "completions".
The completions _could_ have been extended/used as mutex semaphores, but
the difference was really the mental model for them. That then limited the
implementation of them: the functions working on completions are defined
on purpose to be limited - it doesn't really have "up()" and "down()"
functions: "complete()" is really a up(), but "wait_for_completion()" is
more like a "wait_until_I_could_do_a_trydown()" function.
Would it make sense to use completions for countable events too? Yeah. In
fact, we have some things that really would like to do counting, both in
the sense of "wait for <n> events to all complete" _and_ in the sense of
"allow up to <n> events to be outstanding". Both of which could be done as
a counting function (just make "complete" increment the counter, and then
make "wait for <n> events" initialize it to negative, while "allow <n>
outstanding events" would be a positive counter, and make
"wait_for_completion()" basically be a "decrement and wait until it
is zero".
IOW, completions() really follow the same patterns as semaphores, and it
*does* make sense to just have one single code-base. But if we want to
make semaphores go away, I think that it would be better to implement
semaphores in terms of "extended completions" rather than the other way
around. That way, we could one day really get rid of semaphores entirely.
Linus
next prev parent reply other threads:[~2008-04-15 18:20 UTC|newest]
Thread overview: 64+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-04-11 21:00 Matthew Wilcox
2008-04-12 6:43 ` Daniel Walker
2008-04-12 10:31 ` Ingo Oeser
2008-04-12 12:24 ` Peter Zijlstra
2008-04-12 17:26 ` Matthew Wilcox
2008-04-12 18:01 ` Daniel Walker
2008-04-12 18:05 ` Peter Zijlstra
2008-04-12 19:04 ` Matthew Wilcox
2008-04-12 19:16 ` Peter Zijlstra
2008-04-12 19:53 ` Roland Dreier
2008-04-12 20:47 ` Matthew Wilcox
2008-04-13 7:08 ` Ingo Molnar
2008-04-13 12:57 ` Matthew Wilcox
2008-04-14 15:39 ` Ingo Molnar
2008-04-14 15:58 ` Roland Dreier
2008-04-14 16:32 ` Peter Zijlstra
2008-04-14 16:56 ` Arjan van de Ven
2008-04-14 17:50 ` Matthew Wilcox
2008-04-14 17:46 ` Andi Kleen
2008-04-14 17:54 ` Peter Zijlstra
2008-04-14 18:09 ` Daniel Walker
2008-04-14 19:16 ` Andi Kleen
2008-04-15 6:18 ` Bart Van Assche
2008-04-15 6:46 ` Peter Zijlstra
2008-04-15 7:17 ` Bart Van Assche
2008-04-15 8:44 ` Peter Zijlstra
2008-04-15 13:15 ` Bart Van Assche
2008-04-15 16:09 ` Linus Torvalds
2008-04-15 16:27 ` Andi Kleen
2008-04-15 16:57 ` Linus Torvalds
2008-04-15 17:05 ` Ingo Molnar
2008-04-15 18:50 ` Matthew Wilcox
2008-04-16 12:37 ` Ingo Molnar
2008-04-16 12:50 ` Andi Kleen
2008-04-16 12:59 ` Killable stat/readdir Matthew Wilcox
2008-04-15 17:15 ` [PATCH] Replace completions with semaphores Andi Kleen
2008-04-15 17:26 ` Linus Torvalds
2008-04-15 17:41 ` Matthew Wilcox
2008-04-15 18:14 ` Linus Torvalds [this message]
2008-04-16 16:07 ` Ingo Oeser
2008-04-16 16:16 ` Matthew Wilcox
2008-04-16 16:31 ` Oliver Neukum
2008-04-16 16:34 ` Matthew Wilcox
2008-04-16 16:42 ` Oliver Neukum
2008-04-16 16:44 ` Matthew Wilcox
2008-04-16 16:47 ` Roland Dreier
2008-04-16 16:50 ` Arjan van de Ven
2008-04-16 16:58 ` Matthew Wilcox
2008-04-16 17:08 ` Arjan van de Ven
2008-04-16 17:12 ` Matthew Wilcox
2008-04-16 18:10 ` Matthew Wilcox
2008-04-14 19:16 ` Alan Cox
2008-04-13 14:55 ` Bart Van Assche
2008-04-14 17:12 ` API documentation (was [PATCH] Replace completions with semaphores) Jonathan Corbet
2008-04-14 17:33 ` Peter Zijlstra
2008-04-14 18:38 ` Bart Van Assche
2008-04-13 13:55 ` [PATCH] Replace completions with semaphores Bart Van Assche
2008-04-13 14:22 ` Matthew Wilcox
2008-04-13 7:05 ` Ingo Molnar
2008-04-13 12:52 ` Matthew Wilcox
2008-04-14 15:41 ` Ingo Molnar
2008-04-14 17:46 ` Matthew Wilcox
2008-04-14 16:54 ` Jens Axboe
[not found] <ahyFC-2bu-25@gated-at.bofh.it>
[not found] ` <ahUPJ-8rN-1@gated-at.bofh.it>
[not found] ` <ai4vO-2Rp-19@gated-at.bofh.it>
[not found] ` <ai9Yw-5uh-7@gated-at.bofh.it>
[not found] ` <aiz6z-OZ-31@gated-at.bofh.it>
[not found] ` <aizgp-151-25@gated-at.bofh.it>
[not found] ` <aizSW-2Ar-17@gated-at.bofh.it>
[not found] ` <aiAYF-5e7-19@gated-at.bofh.it>
[not found] ` <aiB8o-5A7-17@gated-at.bofh.it>
[not found] ` <aiCnR-7k-39@gated-at.bofh.it>
[not found] ` <aiMGu-7f0-7@gated-at.bofh.it>
2008-04-16 10:22 ` Bodo Eggert
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.LFD.1.00.0804151101590.2879@woody.linux-foundation.org \
--to=torvalds@linux-foundation.org \
--cc=andi@firstfloor.org \
--cc=bart.vanassche@gmail.com \
--cc=dwalker@mvista.com \
--cc=ioe-lkml@rameria.de \
--cc=linux-kernel@vger.kernel.org \
--cc=matthew@wil.cx \
--cc=mingo@elte.hu \
--cc=peterz@infradead.org \
--cc=rdreier@cisco.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®