Changeset View
Changeset View
Standalone View
Standalone View
head/sys/vm/vm_page.h
Show First 20 Lines • Show All 508 Lines • ▼ Show 20 Lines | |||||
#if defined(INVARIANTS) || defined(INVARIANT_SUPPORT) | #if defined(INVARIANTS) || defined(INVARIANT_SUPPORT) | ||||
void vm_page_assert_locked_KBI(vm_page_t m, const char *file, int line); | void vm_page_assert_locked_KBI(vm_page_t m, const char *file, int line); | ||||
void vm_page_lock_assert_KBI(vm_page_t m, int a, const char *file, int line); | void vm_page_lock_assert_KBI(vm_page_t m, int a, const char *file, int line); | ||||
#endif | #endif | ||||
#define vm_page_assert_sbusied(m) \ | #define vm_page_assert_sbusied(m) \ | ||||
KASSERT(vm_page_sbusied(m), \ | KASSERT(vm_page_sbusied(m), \ | ||||
("vm_page_assert_sbusied: page %p not shared busy @ %s:%d", \ | ("vm_page_assert_sbusied: page %p not shared busy @ %s:%d", \ | ||||
(void *)m, __FILE__, __LINE__)); | (m), __FILE__, __LINE__)) | ||||
#define vm_page_assert_unbusied(m) \ | #define vm_page_assert_unbusied(m) \ | ||||
KASSERT(!vm_page_busied(m), \ | KASSERT(!vm_page_busied(m), \ | ||||
("vm_page_assert_unbusied: page %p busy @ %s:%d", \ | ("vm_page_assert_unbusied: page %p busy @ %s:%d", \ | ||||
(void *)m, __FILE__, __LINE__)); | (m), __FILE__, __LINE__)) | ||||
#define vm_page_assert_xbusied(m) \ | #define vm_page_assert_xbusied(m) \ | ||||
KASSERT(vm_page_xbusied(m), \ | KASSERT(vm_page_xbusied(m), \ | ||||
("vm_page_assert_xbusied: page %p not exclusive busy @ %s:%d", \ | ("vm_page_assert_xbusied: page %p not exclusive busy @ %s:%d", \ | ||||
(void *)m, __FILE__, __LINE__)); | (m), __FILE__, __LINE__)) | ||||
#define vm_page_busied(m) \ | #define vm_page_busied(m) \ | ||||
((m)->busy_lock != VPB_UNBUSIED) | ((m)->busy_lock != VPB_UNBUSIED) | ||||
#define vm_page_sbusy(m) do { \ | #define vm_page_sbusy(m) do { \ | ||||
if (!vm_page_trysbusy(m)) \ | if (!vm_page_trysbusy(m)) \ | ||||
panic("%s: page %p failed shared busing", __func__, m); \ | panic("%s: page %p failed shared busying", __func__, \ | ||||
(m)); \ | |||||
} while (0) | } while (0) | ||||
#define vm_page_tryxbusy(m) \ | #define vm_page_tryxbusy(m) \ | ||||
(atomic_cmpset_acq_int(&m->busy_lock, VPB_UNBUSIED, \ | (atomic_cmpset_acq_int(&(m)->busy_lock, VPB_UNBUSIED, \ | ||||
VPB_SINGLE_EXCLUSIVER)) | VPB_SINGLE_EXCLUSIVER)) | ||||
#define vm_page_xbusied(m) \ | #define vm_page_xbusied(m) \ | ||||
((m->busy_lock & VPB_SINGLE_EXCLUSIVER) != 0) | (((m)->busy_lock & VPB_SINGLE_EXCLUSIVER) != 0) | ||||
#define vm_page_xbusy(m) do { \ | #define vm_page_xbusy(m) do { \ | ||||
if (!vm_page_tryxbusy(m)) \ | if (!vm_page_tryxbusy(m)) \ | ||||
panic("%s: page %p failed exclusive busing", __func__, \ | panic("%s: page %p failed exclusive busying", __func__, \ | ||||
m); \ | (m)); \ | ||||
} while (0) | } while (0) | ||||
#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_SINGLE_EXCLUSIVER, VPB_UNBUSIED)) \ | VPB_SINGLE_EXCLUSIVER, VPB_UNBUSIED)) \ | ||||
vm_page_xunbusy_hard(m); \ | vm_page_xunbusy_hard(m); \ | ||||
} while (0) | } while (0) | ||||
▲ Show 20 Lines • Show All 126 Lines • Show Last 20 Lines |