Re: [PATCH 1/2] list: introduce a new cutting helper

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Jun 13, 2024 at 09:01:47AM -0700, Paul E. McKenney wrote:
> 
> Is there a way to avoid this issue by making this be a statement parameter
> to a macro?

Something like this? It appears to work for the intended use, at least.

---
diff --git a/include/linux/rculist.h b/include/linux/rculist.h
index 3dc1e58865f77..cdd2e5c0d5cdb 100644
--- a/include/linux/rculist.h
+++ b/include/linux/rculist.h
@@ -204,6 +204,30 @@ static inline void list_replace_rcu(struct list_head *old,
 	old->prev = LIST_POISON2;
 }
 
+
+static inline void __list_cut_start(struct list_head *list,
+				    struct list_head *head,
+				    struct list_head *entry)
+{
+	list->next = entry;
+	list->prev = head->prev;
+	__list_del(entry->prev, head);
+}
+
+static inline void __list_cut_end(struct list_head *list,
+				  struct list_head *entry)
+{
+	entry->prev = list;
+	list->prev->next = list;
+}
+
+#define list_cut_rcu(list, head, entry, sync)		\
+	do {						\
+		__list_cut_start(list, head, entry);	\
+		sync;					\
+		__list_cut_end(list, entry); 		\
+	} while (0)
+
 /**
  * __list_splice_init_rcu - join an RCU-protected list into an existing list.
  * @list:	the RCU-protected list to splice
--




[Index of Archives]     [Linux Wireless]     [Linux Kernel]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Share Photos]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]

  Powered by Linux