Changeset View
Changeset View
Standalone View
Standalone View
sys/vm/vm_page.h
Show First 20 Lines • Show All 749 Lines • ▼ Show 20 Lines | KASSERT((vm_page_busy_fetch(m) & ~VPB_BIT_WAITERS) == \ | ||||
("vm_page_assert_xbusied: page %p busy_lock %#x not owned" \ | ("vm_page_assert_xbusied: page %p busy_lock %#x not owned" \ | ||||
" by me @ %s:%d", \ | " by me @ %s:%d", \ | ||||
(m), (m)->busy_lock, __FILE__, __LINE__)); \ | (m), (m)->busy_lock, __FILE__, __LINE__)); \ | ||||
} while (0) | } while (0) | ||||
#define vm_page_busied(m) \ | #define vm_page_busied(m) \ | ||||
(vm_page_busy_fetch(m) != VPB_UNBUSIED) | (vm_page_busy_fetch(m) != VPB_UNBUSIED) | ||||
#define vm_page_sbusy(m) do { \ | |||||
if (!vm_page_trysbusy(m)) \ | |||||
panic("%s: page %p failed shared busying", __func__, \ | |||||
(m)); \ | |||||
} while (0) | |||||
#define vm_page_xbusied(m) \ | #define vm_page_xbusied(m) \ | ||||
((vm_page_busy_fetch(m) & VPB_SINGLE_EXCLUSIVE) != 0) | ((vm_page_busy_fetch(m) & VPB_SINGLE_EXCLUSIVE) != 0) | ||||
#define vm_page_busy_freed(m) \ | #define vm_page_busy_freed(m) \ | ||||
(vm_page_busy_fetch(m) == VPB_FREED) | (vm_page_busy_fetch(m) == VPB_FREED) | ||||
#define vm_page_xbusy(m) do { \ | |||||
if (!vm_page_tryxbusy(m)) \ | |||||
panic("%s: page %p failed exclusive busying", __func__, \ | |||||
(m)); \ | |||||
} while (0) | |||||
/* Note: page m's lock must not be owned by the caller. */ | /* Note: page m's lock must not be owned by the caller. */ | ||||
#define vm_page_xunbusy(m) do { \ | #define vm_page_xunbusy(m) do { \ | ||||
if (!atomic_cmpset_rel_int(&(m)->busy_lock, \ | if (!atomic_cmpset_rel_int(&(m)->busy_lock, \ | ||||
VPB_CURTHREAD_EXCLUSIVE, VPB_UNBUSIED)) \ | VPB_CURTHREAD_EXCLUSIVE, VPB_UNBUSIED)) \ | ||||
vm_page_xunbusy_hard(m); \ | vm_page_xunbusy_hard(m); \ | ||||
} while (0) | } while (0) | ||||
#define vm_page_xunbusy_unchecked(m) do { \ | #define vm_page_xunbusy_unchecked(m) do { \ | ||||
▲ Show 20 Lines • Show All 251 Lines • Show Last 20 Lines |