1 #include "pthread_impl.h" 2 #include "fork_impl.h" 3 4 static volatile int vmlock[2]; 5 volatile int *const __vmlock_lockptr = vmlock; 6 7 #ifdef ENABLE_HWASAN 8 __attribute__((no_sanitize("hwaddress"))) 9 #endif __vm_wait()10void __vm_wait() 11 { 12 int tmp; 13 while ((tmp=vmlock[0])) 14 __wait(vmlock, vmlock+1, tmp, 1); 15 } 16 __vm_lock()17void __vm_lock() 18 { 19 a_inc(vmlock); 20 } 21 22 #ifdef ENABLE_HWASAN 23 __attribute__((no_sanitize("hwaddress"))) 24 #endif __vm_unlock()25void __vm_unlock() 26 { 27 if (a_fetch_add(vmlock, -1)==1 && vmlock[1]) 28 __wake(vmlock, -1, 1); 29 } 30