Commit 3182fe92 authored by Andrew Morton's avatar Andrew Morton Committed by Linus Torvalds

[PATCH] list_empty_careful() documentation.

From: Ingo Molnar <mingo@elte.hu>

I'd also suggest the following patch below, to clarify the use of
unsynchronized list_empty().  list_empty_careful() can only be safe in the
very specific case of "one-shot" list entries which might be removed by
another CPU.  (but nothing else can happen to them and this is their only
final state.) list_empty_careful() is otherwise completely unsynchronized
on both the compiler and CPU level and is not 'SMP safe' in any way.
parent c13bb409
...@@ -212,6 +212,12 @@ static inline int list_empty(const struct list_head *head) ...@@ -212,6 +212,12 @@ static inline int list_empty(const struct list_head *head)
* list_empty_careful - tests whether a list is * list_empty_careful - tests whether a list is
* empty _and_ checks that no other CPU might be * empty _and_ checks that no other CPU might be
* in the process of still modifying either member * in the process of still modifying either member
*
* NOTE: using list_empty_careful() without synchronization
* can only be safe if the only activity that can happen
* to the list entry is list_del_init(). Eg. it cannot be used
* if another CPU could re-list_add() it.
*
* @head: the list to test. * @head: the list to test.
*/ */
static inline int list_empty_careful(const struct list_head *head) static inline int list_empty_careful(const struct list_head *head)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment