aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/swait.h
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2018-06-04 15:01:15 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2018-06-04 15:01:15 -0400
commitc5e7a7ea22d5677f7c70028908372cff6948ecdc (patch)
tree26c0d5f266619ecaf059606dc965c40433d02a02 /include/linux/swait.h
parenta31895ad7f9d3348133e7da19e46bc74a2833aef (diff)
swait: strengthen language to discourage use
We already earlier discouraged people from using this interface in commit 88796e7e5c45 ("sched/swait: Document it clearly that the swait facilities are special and shouldn't be used"), but I just got a pull request with a new broken user. So make the comment *really* clear. The swait interfaces are bad, and should not be used unless you have some *very* strong reasons that include tons of hard performance numbers on just why you want to use them, and you show that you actually understand that they aren't at all like the normal wait/wakeup interfaces. So far, every single user has been suspect. The main user is KVM, which is completely pointless (there is only ever one waiter, which avoids the interface subtleties, but also means that having a queue instead of a pointer is counter-productive and certainly not an "optimization"). So make the comments much stronger. Not that anybody likely reads them anyway, but there's always some slight hope that it will cause somebody to think twice. I'd like to remove this interface entirely, but there is the theoretical possibility that it's actually the right thing to use in some situation, most likely some deep RT use. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'include/linux/swait.h')
-rw-r--r--include/linux/swait.h14
1 files changed, 13 insertions, 1 deletions
diff --git a/include/linux/swait.h b/include/linux/swait.h
index c98aaf677466..13eac825819d 100644
--- a/include/linux/swait.h
+++ b/include/linux/swait.h
@@ -8,7 +8,19 @@
8#include <asm/current.h> 8#include <asm/current.h>
9 9
10/* 10/*
11 * Simple wait queues 11 * BROKEN wait-queues.
12 *
13 * These "simple" wait-queues are broken garbage, and should never be
14 * used. The comments below claim that they are "similar" to regular
15 * wait-queues, but the semantics are actually completely different, and
16 * every single user we have ever had has been buggy (or pointless).
17 *
18 * A "swake_up()" only wakes up _one_ waiter, which is not at all what
19 * "wake_up()" does, and has led to problems. In other cases, it has
20 * been fine, because there's only ever one waiter (kvm), but in that
21 * case gthe whole "simple" wait-queue is just pointless to begin with,
22 * since there is no "queue". Use "wake_up_process()" with a direct
23 * pointer instead.
12 * 24 *
13 * While these are very similar to regular wait queues (wait.h) the most 25 * While these are very similar to regular wait queues (wait.h) the most
14 * important difference is that the simple waitqueue allows for deterministic 26 * important difference is that the simple waitqueue allows for deterministic