Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 11dc76f0 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge branch 'sched-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

Pull scheduler fix from Ingo Molnar:
 "Update the <linux/swait.h> documentation to discourage their use"

* 'sched-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  sched/swait: Document it clearly that the swait facilities are special and shouldn't be used
parents 02c7dfc0 88796e7e
Loading
Loading
Loading
Loading
+16 −11
Original line number Diff line number Diff line
@@ -9,13 +9,16 @@
/*
 * Simple wait queues
 *
 * While these are very similar to the other/complex wait queues (wait.h) the
 * most important difference is that the simple waitqueue allows for
 * deterministic behaviour -- IOW it has strictly bounded IRQ and lock hold
 * times.
 * While these are very similar to regular wait queues (wait.h) the most
 * important difference is that the simple waitqueue allows for deterministic
 * behaviour -- IOW it has strictly bounded IRQ and lock hold times.
 *
 * In order to make this so, we had to drop a fair number of features of the
 * other waitqueue code; notably:
 * Mainly, this is accomplished by two things. Firstly not allowing swake_up_all
 * from IRQ disabled, and dropping the lock upon every wakeup, giving a higher
 * priority task a chance to run.
 *
 * Secondly, we had to drop a fair number of features of the other waitqueue
 * code; notably:
 *
 *  - mixing INTERRUPTIBLE and UNINTERRUPTIBLE sleeps on the same waitqueue;
 *    all wakeups are TASK_NORMAL in order to avoid O(n) lookups for the right
@@ -24,12 +27,14 @@
 *  - the exclusive mode; because this requires preserving the list order
 *    and this is hard.
 *
 *  - custom wake functions; because you cannot give any guarantees about
 *    random code.
 *
 * As a side effect of this; the data structures are slimmer.
 *  - custom wake callback functions; because you cannot give any guarantees
 *    about random code. This also allows swait to be used in RT, such that
 *    raw spinlock can be used for the swait queue head.
 *
 * One would recommend using this wait queue where possible.
 * As a side effect of these; the data structures are slimmer albeit more ad-hoc.
 * For all the above, note that simple wait queues should _only_ be used under
 * very specific realtime constraints -- it is best to stick with the regular
 * wait queues in most cases.
 */

struct task_struct;