[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v2 1/5] rcu: Add automatically released rcu_read_loc
From: |
Dr. David Alan Gilbert (git) |
Subject: |
[Qemu-devel] [PATCH v2 1/5] rcu: Add automatically released rcu_read_lock variant |
Date: |
Wed, 11 Sep 2019 20:06:18 +0100 |
From: "Dr. David Alan Gilbert" <address@hidden>
RCU_READ_LOCK_AUTO takes the rcu_read_lock and then uses glib's
g_auto infrastructure (and thus whatever the compiler's hooks are) to
release it on all exits of the block.
Signed-off-by: Dr. David Alan Gilbert <address@hidden>
---
include/qemu/rcu.h | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
diff --git a/include/qemu/rcu.h b/include/qemu/rcu.h
index 22876d1428..8768a7b60a 100644
--- a/include/qemu/rcu.h
+++ b/include/qemu/rcu.h
@@ -154,6 +154,24 @@ extern void call_rcu1(struct rcu_head *head, RCUCBFunc
*func);
}), \
(RCUCBFunc *)g_free);
+typedef void RCUReadAuto;
+static inline RCUReadAuto *rcu_read_auto_lock(void)
+{
+ rcu_read_lock();
+ /* Anything non-NULL causes the cleanup function to be called */
+ return (void *)0x1;
+}
+
+static inline void rcu_read_auto_unlock(RCUReadAuto *r)
+{
+ rcu_read_unlock();
+}
+
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(RCUReadAuto, rcu_read_auto_unlock)
+
+#define RCU_READ_LOCK_AUTO \
+ g_autoptr(RCUReadAuto) _rcu_read_auto = rcu_read_auto_lock()
+
#ifdef __cplusplus
}
#endif
--
2.21.0
[Qemu-devel] [PATCH v2 2/5] migration: Use automatic rcu_read unlock in ram.c, Dr. David Alan Gilbert (git), 2019/09/11
[Qemu-devel] [PATCH v2 3/5] migration: Use automatic rcu_read unlock in rdma.c, Dr. David Alan Gilbert (git), 2019/09/11