Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/linux...
[sfrench/cifs-2.6.git] / include / linux / plist.h
index aa0fb390bd298e7a5e65b9fc3c43ef1cc508a244..8b6c970cff6c45b8805a30bfe2d0ad0f3600a0d9 100644 (file)
@@ -97,6 +97,13 @@ struct plist_node {
        .node_list = LIST_HEAD_INIT((head).node_list)   \
 }
 
+/**
+ * PLIST_HEAD - declare and init plist_head
+ * @head:      name for struct plist_head variable
+ */
+#define PLIST_HEAD(head) \
+       struct plist_head head = PLIST_HEAD_INIT(head)
+
 /**
  * PLIST_NODE_INIT - static struct plist_node initializer
  * @node:      struct plist_node variable name
@@ -134,6 +141,8 @@ static inline void plist_node_init(struct plist_node *node, int prio)
 extern void plist_add(struct plist_node *node, struct plist_head *head);
 extern void plist_del(struct plist_node *node, struct plist_head *head);
 
+extern void plist_requeue(struct plist_node *node, struct plist_head *head);
+
 /**
  * plist_for_each - iterate over the plist
  * @pos:       the type * to use as a loop counter
@@ -142,6 +151,16 @@ extern void plist_del(struct plist_node *node, struct plist_head *head);
 #define plist_for_each(pos, head)      \
         list_for_each_entry(pos, &(head)->node_list, node_list)
 
+/**
+ * plist_for_each_continue - continue iteration over the plist
+ * @pos:       the type * to use as a loop cursor
+ * @head:      the head for your list
+ *
+ * Continue to iterate over plist, continuing after the current position.
+ */
+#define plist_for_each_continue(pos, head)     \
+        list_for_each_entry_continue(pos, &(head)->node_list, node_list)
+
 /**
  * plist_for_each_safe - iterate safely over a plist of given type
  * @pos:       the type * to use as a loop counter
@@ -162,6 +181,18 @@ extern void plist_del(struct plist_node *node, struct plist_head *head);
 #define plist_for_each_entry(pos, head, mem)   \
         list_for_each_entry(pos, &(head)->node_list, mem.node_list)
 
+/**
+ * plist_for_each_entry_continue - continue iteration over list of given type
+ * @pos:       the type * to use as a loop cursor
+ * @head:      the head for your list
+ * @m:         the name of the list_struct within the struct
+ *
+ * Continue to iterate over list of given type, continuing after
+ * the current position.
+ */
+#define plist_for_each_entry_continue(pos, head, m)    \
+       list_for_each_entry_continue(pos, &(head)->node_list, m.node_list)
+
 /**
  * plist_for_each_entry_safe - iterate safely over list of given type
  * @pos:       the type * to use as a loop counter
@@ -228,6 +259,20 @@ static inline int plist_node_empty(const struct plist_node *node)
        container_of(plist_last(head), type, member)
 #endif
 
+/**
+ * plist_next - get the next entry in list
+ * @pos:       the type * to cursor
+ */
+#define plist_next(pos) \
+       list_next_entry(pos, node_list)
+
+/**
+ * plist_prev - get the prev entry in list
+ * @pos:       the type * to cursor
+ */
+#define plist_prev(pos) \
+       list_prev_entry(pos, node_list)
+
 /**
  * plist_first - return the first node (and thus, highest priority)
  * @head:      the &struct plist_head pointer