]> git.proxmox.com Git - mirror_qemu.git/commitdiff
include/exec: Add WITH_MMAP_LOCK_GUARD
authorRichard Henderson <richard.henderson@linaro.org>
Mon, 17 Jul 2023 18:58:58 +0000 (19:58 +0100)
committerRichard Henderson <richard.henderson@linaro.org>
Sun, 23 Jul 2023 16:57:10 +0000 (17:57 +0100)
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
bsd-user/mmap.c
include/exec/exec-all.h
linux-user/mmap.c

index aca87643561913dde70ff5f9f304a4666366b50b..74ed00b9fe336f3bfbeb6104e055c78229452af0 100644 (file)
@@ -32,6 +32,7 @@ void mmap_lock(void)
 
 void mmap_unlock(void)
 {
+    assert(mmap_lock_count > 0);
     if (--mmap_lock_count == 0) {
         pthread_mutex_unlock(&mmap_mutex);
     }
index 5fa0687cd24063eb7a67f9f57f52f0e4f6137f41..d02517e95fb907defdc5ccb1a76745979bc1b20e 100644 (file)
@@ -629,6 +629,15 @@ void TSA_NO_TSA mmap_lock(void);
 void TSA_NO_TSA mmap_unlock(void);
 bool have_mmap_lock(void);
 
+static inline void mmap_unlock_guard(void *unused)
+{
+    mmap_unlock();
+}
+
+#define WITH_MMAP_LOCK_GUARD()                                            \
+    for (int _mmap_lock_iter __attribute__((cleanup(mmap_unlock_guard)))  \
+         = (mmap_lock(), 0); _mmap_lock_iter == 0; _mmap_lock_iter = 1)
+
 /**
  * adjust_signal_pc:
  * @pc: raw pc from the host signal ucontext_t.
@@ -683,6 +692,7 @@ G_NORETURN void cpu_loop_exit_sigbus(CPUState *cpu, target_ulong addr,
 #else
 static inline void mmap_lock(void) {}
 static inline void mmap_unlock(void) {}
+#define WITH_MMAP_LOCK_GUARD()
 
 void tlb_reset_dirty(CPUState *cpu, ram_addr_t start1, ram_addr_t length);
 void tlb_set_dirty(CPUState *cpu, vaddr addr);
index 44b53bd4461623aff7fa3dbb6f66f0b423e6f01d..a5dfb56545f3a525278f07a9c5b77a9889286b12 100644 (file)
@@ -36,6 +36,7 @@ void mmap_lock(void)
 
 void mmap_unlock(void)
 {
+    assert(mmap_lock_count > 0);
     if (--mmap_lock_count == 0) {
         pthread_mutex_unlock(&mmap_mutex);
     }