xref: /qemu/include/exec/mmap-lock.h (revision 4d3ad3c3ba1f1e9c217d0581e4913a59ef2ac15f)
1*4d3ad3c3SRichard Henderson /*
2*4d3ad3c3SRichard Henderson  * QEMU user-only mmap lock, with stubs for system mode
3*4d3ad3c3SRichard Henderson  *
4*4d3ad3c3SRichard Henderson  *  Copyright (c) 2003 Fabrice Bellard
5*4d3ad3c3SRichard Henderson  *
6*4d3ad3c3SRichard Henderson  * SPDX-License-Identifier: LGPL-2.1-or-later
7*4d3ad3c3SRichard Henderson  */
8*4d3ad3c3SRichard Henderson #ifndef EXEC_MMAP_LOCK_H
9*4d3ad3c3SRichard Henderson #define EXEC_MMAP_LOCK_H
10*4d3ad3c3SRichard Henderson 
11*4d3ad3c3SRichard Henderson #ifdef CONFIG_USER_ONLY
12*4d3ad3c3SRichard Henderson 
13*4d3ad3c3SRichard Henderson void TSA_NO_TSA mmap_lock(void);
14*4d3ad3c3SRichard Henderson void TSA_NO_TSA mmap_unlock(void);
15*4d3ad3c3SRichard Henderson bool have_mmap_lock(void);
16*4d3ad3c3SRichard Henderson 
17*4d3ad3c3SRichard Henderson static inline void mmap_unlock_guard(void *unused)
18*4d3ad3c3SRichard Henderson {
19*4d3ad3c3SRichard Henderson     mmap_unlock();
20*4d3ad3c3SRichard Henderson }
21*4d3ad3c3SRichard Henderson 
22*4d3ad3c3SRichard Henderson #define WITH_MMAP_LOCK_GUARD() \
23*4d3ad3c3SRichard Henderson     for (int _mmap_lock_iter __attribute__((cleanup(mmap_unlock_guard))) \
24*4d3ad3c3SRichard Henderson          = (mmap_lock(), 0); _mmap_lock_iter == 0; _mmap_lock_iter = 1)
25*4d3ad3c3SRichard Henderson 
26*4d3ad3c3SRichard Henderson #else
27*4d3ad3c3SRichard Henderson 
28*4d3ad3c3SRichard Henderson static inline void mmap_lock(void) {}
29*4d3ad3c3SRichard Henderson static inline void mmap_unlock(void) {}
30*4d3ad3c3SRichard Henderson #define WITH_MMAP_LOCK_GUARD()
31*4d3ad3c3SRichard Henderson 
32*4d3ad3c3SRichard Henderson #endif /* CONFIG_USER_ONLY */
33*4d3ad3c3SRichard Henderson #endif /* EXEC_MMAP_LOCK_H */
34