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