Changeset View
Changeset View
Standalone View
Standalone View
head/sys/vm/vm_page.c
Show First 20 Lines • Show All 3,273 Lines • ▼ Show 20 Lines | |||||
* queue. Physical removal from the queue may be deferred | * queue. Physical removal from the queue may be deferred | ||||
* indefinitely. | * indefinitely. | ||||
* | * | ||||
* The page must be locked. | * The page must be locked. | ||||
*/ | */ | ||||
void | void | ||||
vm_page_dequeue_deferred(vm_page_t m) | vm_page_dequeue_deferred(vm_page_t m) | ||||
{ | { | ||||
int queue; | uint8_t queue; | ||||
vm_page_assert_locked(m); | vm_page_assert_locked(m); | ||||
queue = atomic_load_8(&m->queue); | if ((queue = vm_page_queue(m)) == PQ_NONE) | ||||
if (queue == PQ_NONE) { | |||||
KASSERT((m->aflags & PGA_QUEUE_STATE_MASK) == 0, | |||||
("page %p has queue state", m)); | |||||
return; | return; | ||||
} | |||||
if ((m->aflags & PGA_DEQUEUE) == 0) | |||||
vm_page_aflag_set(m, PGA_DEQUEUE); | vm_page_aflag_set(m, PGA_DEQUEUE); | ||||
vm_pqbatch_submit_page(m, queue); | vm_pqbatch_submit_page(m, queue); | ||||
} | } | ||||
/* | /* | ||||
* vm_page_dequeue: | * vm_page_dequeue: | ||||
* | * | ||||
* Remove the page from whichever page queue it's in, if any. | * Remove the page from whichever page queue it's in, if any. | ||||
* The page must either be locked or unallocated. This constraint | * The page must either be locked or unallocated. This constraint | ||||
▲ Show 20 Lines • Show All 79 Lines • ▼ Show 20 Lines | |||||
* | * | ||||
* The page must be locked. | * The page must be locked. | ||||
*/ | */ | ||||
void | void | ||||
vm_page_requeue(vm_page_t m) | vm_page_requeue(vm_page_t m) | ||||
{ | { | ||||
vm_page_assert_locked(m); | vm_page_assert_locked(m); | ||||
KASSERT(m->queue != PQ_NONE, | KASSERT(vm_page_queue(m) != PQ_NONE, | ||||
("%s: page %p is not logically enqueued", __func__, m)); | ("%s: page %p is not logically enqueued", __func__, m)); | ||||
if ((m->aflags & PGA_REQUEUE) == 0) | if ((m->aflags & PGA_REQUEUE) == 0) | ||||
vm_page_aflag_set(m, PGA_REQUEUE); | vm_page_aflag_set(m, PGA_REQUEUE); | ||||
vm_pqbatch_submit_page(m, atomic_load_8(&m->queue)); | vm_pqbatch_submit_page(m, atomic_load_8(&m->queue)); | ||||
} | } | ||||
/* | /* | ||||
▲ Show 20 Lines • Show All 1,125 Lines • Show Last 20 Lines |