Changeset View
Changeset View
Standalone View
Standalone View
head/sys/vm/vm_pageout.c
Show First 20 Lines • Show All 748 Lines • ▼ Show 20 Lines | recheck: | ||||
* Held pages are essentially stuck in the queue. | * Held pages are essentially stuck in the queue. | ||||
* | * | ||||
* Wired pages may not be freed. Complete their removal | * Wired pages may not be freed. Complete their removal | ||||
* from the queue now to avoid needless revisits during | * from the queue now to avoid needless revisits during | ||||
* future scans. | * future scans. | ||||
*/ | */ | ||||
if (m->hold_count != 0) | if (m->hold_count != 0) | ||||
continue; | continue; | ||||
if (m->wire_count != 0) { | if (vm_page_wired(m)) { | ||||
vm_page_dequeue_deferred(m); | vm_page_dequeue_deferred(m); | ||||
continue; | continue; | ||||
} | } | ||||
if (object != m->object) { | if (object != m->object) { | ||||
if (object != NULL) | if (object != NULL) | ||||
VM_OBJECT_WUNLOCK(object); | VM_OBJECT_WUNLOCK(object); | ||||
object = m->object; | object = m->object; | ||||
▲ Show 20 Lines • Show All 432 Lines • ▼ Show 20 Lines | while ((m = vm_pageout_next(&ss, false)) != NULL) { | ||||
* while locks were dropped. | * while locks were dropped. | ||||
*/ | */ | ||||
if (vm_page_queue(m) != PQ_ACTIVE) | if (vm_page_queue(m) != PQ_ACTIVE) | ||||
continue; | continue; | ||||
/* | /* | ||||
* Wired pages are dequeued lazily. | * Wired pages are dequeued lazily. | ||||
*/ | */ | ||||
if (m->wire_count != 0) { | if (vm_page_wired(m)) { | ||||
vm_page_dequeue_deferred(m); | vm_page_dequeue_deferred(m); | ||||
continue; | continue; | ||||
} | } | ||||
/* | /* | ||||
* Check to see "how much" the page has been used. | * Check to see "how much" the page has been used. | ||||
* | * | ||||
* Test PGA_REFERENCED after calling pmap_ts_referenced() so | * Test PGA_REFERENCED after calling pmap_ts_referenced() so | ||||
▲ Show 20 Lines • Show All 210 Lines • ▼ Show 20 Lines | recheck: | ||||
* Wired pages may not be freed. Complete their removal | * Wired pages may not be freed. Complete their removal | ||||
* from the queue now to avoid needless revisits during | * from the queue now to avoid needless revisits during | ||||
* future scans. | * future scans. | ||||
*/ | */ | ||||
if (m->hold_count != 0) { | if (m->hold_count != 0) { | ||||
addl_page_shortage++; | addl_page_shortage++; | ||||
goto reinsert; | goto reinsert; | ||||
} | } | ||||
if (m->wire_count != 0) { | if (vm_page_wired(m)) { | ||||
vm_page_dequeue_deferred(m); | vm_page_dequeue_deferred(m); | ||||
continue; | continue; | ||||
} | } | ||||
if (object != m->object) { | if (object != m->object) { | ||||
if (object != NULL) | if (object != NULL) | ||||
VM_OBJECT_WUNLOCK(object); | VM_OBJECT_WUNLOCK(object); | ||||
object = m->object; | object = m->object; | ||||
▲ Show 20 Lines • Show All 670 Lines • Show Last 20 Lines |