llist: Add nonatomic __llist_add() and __llist_dell_all()
authorPeter Zijlstra <peterz@infradead.org>
Sat, 29 Aug 2020 13:03:13 +0000 (22:03 +0900)
committerIngo Molnar <mingo@kernel.org>
Mon, 12 Oct 2020 16:27:27 +0000 (18:27 +0200)
We'll use these in the new, lockless kretprobes code.

Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Link: https://lore.kernel.org/r/159870619318.1229682.13027387548510028721.stgit@devnote2
drivers/gpu/drm/i915/i915_request.c
include/linux/llist.h

index 0b2fe55e6194573409582e56b263d40c028cea6c..0e851b925c8c307311dad37a98be4004473c1cc0 100644 (file)
@@ -357,12 +357,6 @@ void i915_request_retire_upto(struct i915_request *rq)
        } while (i915_request_retire(tmp) && tmp != rq);
 }
 
-static void __llist_add(struct llist_node *node, struct llist_head *head)
-{
-       node->next = head->first;
-       head->first = node;
-}
-
 static struct i915_request * const *
 __engine_active(struct intel_engine_cs *engine)
 {
index 2e9c7215882b7abb6242a1402a95b08f1ca4247c..24f207b0190b5494023f6bd25c9600b3f07e3b24 100644 (file)
@@ -197,6 +197,16 @@ static inline struct llist_node *llist_next(struct llist_node *node)
 extern bool llist_add_batch(struct llist_node *new_first,
                            struct llist_node *new_last,
                            struct llist_head *head);
+
+static inline bool __llist_add_batch(struct llist_node *new_first,
+                                    struct llist_node *new_last,
+                                    struct llist_head *head)
+{
+       new_last->next = head->first;
+       head->first = new_first;
+       return new_last->next == NULL;
+}
+
 /**
  * llist_add - add a new entry
  * @new:       new entry to be added
@@ -209,6 +219,11 @@ static inline bool llist_add(struct llist_node *new, struct llist_head *head)
        return llist_add_batch(new, new, head);
 }
 
+static inline bool __llist_add(struct llist_node *new, struct llist_head *head)
+{
+       return __llist_add_batch(new, new, head);
+}
+
 /**
  * llist_del_all - delete all entries from lock-less list
  * @head:      the head of lock-less list to delete all entries
@@ -222,6 +237,14 @@ static inline struct llist_node *llist_del_all(struct llist_head *head)
        return xchg(&head->first, NULL);
 }
 
+static inline struct llist_node *__llist_del_all(struct llist_head *head)
+{
+       struct llist_node *first = head->first;
+
+       head->first = NULL;
+       return first;
+}
+
 extern struct llist_node *llist_del_first(struct llist_head *head);
 
 struct llist_node *llist_reverse_order(struct llist_node *head);