void interruptible_lock_acquire_readlock(VMM_READ_WRITE_LOCK* lock) { (void)lock; interruptible_lock_acquire(&lock->lock); hw_interlocked_increment((INT32*)(&lock->readers)); lock_release(&lock->lock); }
void interruptible_lock_acquire_writelock(VMM_READ_WRITE_LOCK * lock) { (void)lock; BOOLEAN ipc_processed = FALSE; interruptible_lock_acquire(&lock->lock); // wait until readers == 0 while(lock->readers) { ipc_processed = ipc_process_one_ipc(); if(FALSE == ipc_processed) { hw_pause(); } } }
API void ikgt_lock_acquire(ikgt_lock_t *lock) { interruptible_lock_acquire((mon_lock_t *)lock); }