When iterating over a paging queue, explicitly check for PG_MARKER, instead

of relying on zeroed memory being interpreted as an empty PV list.

Reviewed by:	kib
This commit is contained in:
Alan Cox 2011-07-02 23:42:04 +00:00
parent a8229fa37c
commit 80788b2a27
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=223732
5 changed files with 5 additions and 5 deletions

View File

@ -2104,7 +2104,7 @@ pmap_collect(pmap_t locked_pmap, struct vpgqueues *vpq)
vm_page_t m, free;
TAILQ_FOREACH(m, &vpq->pl, pageq) {
if (m->hold_count || m->busy)
if ((m->flags & PG_MARKER) != 0 || m->hold_count || m->busy)
continue;
TAILQ_FOREACH_SAFE(pv, &m->md.pv_list, pv_list, next_pv) {
va = pv->pv_va;

View File

@ -2188,7 +2188,7 @@ pmap_collect(pmap_t locked_pmap, struct vpgqueues *vpq)
sched_pin();
TAILQ_FOREACH(m, &vpq->pl, pageq) {
if (m->hold_count || m->busy)
if ((m->flags & PG_MARKER) != 0 || m->hold_count || m->busy)
continue;
TAILQ_FOREACH_SAFE(pv, &m->md.pv_list, pv_list, next_pv) {
va = pv->pv_va;

View File

@ -2012,7 +2012,7 @@ pmap_collect(pmap_t locked_pmap, struct vpgqueues *vpq)
sched_pin();
TAILQ_FOREACH(m, &vpq->pl, pageq) {
if (m->hold_count || m->busy)
if ((m->flags & PG_MARKER) != 0 || m->hold_count || m->busy)
continue;
TAILQ_FOREACH_SAFE(pv, &m->md.pv_list, pv_list, next_pv) {
va = pv->pv_va;

View File

@ -774,7 +774,7 @@ get_pv_entry(pmap_t locked_pmap)
vpq = &vm_page_queues[PQ_INACTIVE];
retry:
TAILQ_FOREACH(m, &vpq->pl, pageq) {
if (m->hold_count || m->busy)
if ((m->flags & PG_MARKER) != 0 || m->hold_count || m->busy)
continue;
TAILQ_FOREACH_SAFE(pv, &m->md.pv_list, pv_list, next_pv) {
va = pv->pv_va;

View File

@ -1414,7 +1414,7 @@ get_pv_entry(pmap_t locked_pmap)
vpq = &vm_page_queues[PQ_INACTIVE];
retry:
TAILQ_FOREACH(m, &vpq->pl, pageq) {
if (m->hold_count || m->busy)
if ((m->flags & PG_MARKER) != 0 || m->hold_count || m->busy)
continue;
TAILQ_FOREACH_SAFE(pv, &m->md.pv_list, pv_list, next_pv) {
va = pv->pv_va;