summaryrefslogtreecommitdiff
path: root/platforms/synchronization_util.h
diff options
context:
space:
mode:
authorNick Brassel <nick@tzarc.org>2023-02-28 11:22:29 +1100
committerNick Brassel <nick@tzarc.org>2023-02-28 11:22:29 +1100
commitbacec14073b2e897d5a52caf12de5a6a1f7b4078 (patch)
treed4e3e57aac1a829a191831efd2e62c8a43217885 /platforms/synchronization_util.h
parentd70e9b8659a7fbbd7069fd542bd07e67e04327a1 (diff)
parentb865b9e1706ad28ae4882bd2e0331e98808295fa (diff)
Merge remote-tracking branch 'upstream/develop'
Diffstat (limited to 'platforms/synchronization_util.h')
-rw-r--r--platforms/synchronization_util.h6
1 files changed, 6 insertions, 0 deletions
diff --git a/platforms/synchronization_util.h b/platforms/synchronization_util.h
index 59933945c3..4969eff478 100644
--- a/platforms/synchronization_util.h
+++ b/platforms/synchronization_util.h
@@ -29,6 +29,12 @@ inline void split_shared_memory_unlock(void){};
prefix##_unlock(); \
}
+/* Generate an out-of-line implementation in case the inline functions defined
+ * by the above macro don't actually get inlined. */
+#define QMK_IMPLEMENT_AUTOUNLOCK_HELPERS(prefix) \
+ extern inline unsigned prefix##_autounlock_lock_helper(void); \
+ extern inline void prefix##_autounlock_unlock_helper(unsigned* unused_guard);
+
/* Convinience macro the automatically generate the correct RAII-style
* lock_autounlock function macro */
#define QMK_DECLARE_AUTOUNLOCK_CALL(prefix) unsigned prefix##_guard __attribute__((unused, cleanup(prefix##_autounlock_unlock_helper))) = prefix##_autounlock_lock_helper