|
@@ -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
|
|
@@ -142,6 +149,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 +179,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 +257,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
|