From a8589849ae101ada752982b34ab4a6d8f81bfcb3 Mon Sep 17 00:00:00 2001 From: William Lee Irwin III Date: Mon, 18 Oct 2004 18:00:51 -0700 Subject: [PATCH] [PATCH] document wake_up_bit()'s requirement for preceding memory barriers Document the requirement to use a memory barrier prior to wake_up_bit(). Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- kernel/wait.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/kernel/wait.c b/kernel/wait.c index 1ca53daecd916..791681cfea981 100644 --- a/kernel/wait.c +++ b/kernel/wait.c @@ -221,6 +221,13 @@ EXPORT_SYMBOL(__wake_up_bit); * is the part of the hashtable's accessor API that wakes up waiters * on a bit. For instance, if one were to have waiters on a bitflag, * one would call wake_up_bit() after clearing the bit. + * + * In order for this to function properly, as it uses waitqueue_active() + * internally, some kind of memory barrier must be done prior to calling + * this. Typically, this will be smp_mb__after_clear_bit(), but in some + * cases where bitflags are manipulated non-atomically under a lock, one + * may need to use a less regular barrier, such fs/inode.c's smp_mb(), + * because spin_unlock() does not guarantee a memory barrier. */ void fastcall wake_up_bit(void *word, int bit) { -- 2.53.0