aboutsummaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorAlan Cox <alc@FreeBSD.org>2002-12-24 07:32:38 +0000
committerAlan Cox <alc@FreeBSD.org>2002-12-24 07:32:38 +0000
commit11a2911cec0c09ecc359057d95b6067eda20bce0 (patch)
tree39e1973ac74ca58a35ba64f82d0243418003b12b /sys
parentdc907f6632ddbf3e550c59fe2829460f64db5d3b (diff)
Notes
Diffstat (limited to 'sys')
-rw-r--r--sys/amd64/amd64/pmap.c10
-rw-r--r--sys/i386/i386/pmap.c10
2 files changed, 16 insertions, 4 deletions
diff --git a/sys/amd64/amd64/pmap.c b/sys/amd64/amd64/pmap.c
index 2218d58fe921b..5a54365d76993 100644
--- a/sys/amd64/amd64/pmap.c
+++ b/sys/amd64/amd64/pmap.c
@@ -997,9 +997,11 @@ pmap_new_thread(struct thread *td, int pages)
VM_ALLOC_NORMAL | VM_ALLOC_RETRY | VM_ALLOC_WIRED);
ma[i] = m;
+ vm_page_lock_queues();
vm_page_wakeup(m);
vm_page_flag_clear(m, PG_ZERO);
m->valid = VM_PAGE_BITS_ALL;
+ vm_page_unlock_queues();
}
pmap_qenter(ks, ma, pages);
}
@@ -1271,8 +1273,10 @@ pmap_pinit(pmap)
*/
ptdpg = vm_page_grab(pmap->pm_pteobj, PTDPTDI,
VM_ALLOC_NORMAL | VM_ALLOC_RETRY | VM_ALLOC_WIRED | VM_ALLOC_ZERO);
+ vm_page_lock_queues();
vm_page_flag_clear(ptdpg, PG_BUSY);
ptdpg->valid = VM_PAGE_BITS_ALL;
+ vm_page_unlock_queues();
pmap_qenter((vm_offset_t) pmap->pm_pdir, &ptdpg, 1);
if ((ptdpg->flags & PG_ZERO) == 0)
@@ -1412,10 +1416,11 @@ _pmap_allocpte(pmap, ptepindex)
pmap_zero_page(m);
}
}
-
+ vm_page_lock_queues();
m->valid = VM_PAGE_BITS_ALL;
vm_page_flag_clear(m, PG_ZERO);
vm_page_wakeup(m);
+ vm_page_unlock_queues();
return m;
}
@@ -2349,7 +2354,6 @@ retry:
vm_page_lock_queues();
if (vm_page_sleep_if_busy(p, FALSE, "init4p"))
goto retry;
- vm_page_unlock_queues();
} else {
p = vm_page_alloc(object, pindex, VM_ALLOC_NORMAL);
if (p == NULL)
@@ -2364,8 +2368,10 @@ retry:
}
p = vm_page_lookup(object, pindex);
+ vm_page_lock_queues();
vm_page_wakeup(p);
}
+ vm_page_unlock_queues();
ptepa = VM_PAGE_TO_PHYS(p);
if (ptepa & (NBPDR - 1)) {
diff --git a/sys/i386/i386/pmap.c b/sys/i386/i386/pmap.c
index 2218d58fe921b..5a54365d76993 100644
--- a/sys/i386/i386/pmap.c
+++ b/sys/i386/i386/pmap.c
@@ -997,9 +997,11 @@ pmap_new_thread(struct thread *td, int pages)
VM_ALLOC_NORMAL | VM_ALLOC_RETRY | VM_ALLOC_WIRED);
ma[i] = m;
+ vm_page_lock_queues();
vm_page_wakeup(m);
vm_page_flag_clear(m, PG_ZERO);
m->valid = VM_PAGE_BITS_ALL;
+ vm_page_unlock_queues();
}
pmap_qenter(ks, ma, pages);
}
@@ -1271,8 +1273,10 @@ pmap_pinit(pmap)
*/
ptdpg = vm_page_grab(pmap->pm_pteobj, PTDPTDI,
VM_ALLOC_NORMAL | VM_ALLOC_RETRY | VM_ALLOC_WIRED | VM_ALLOC_ZERO);
+ vm_page_lock_queues();
vm_page_flag_clear(ptdpg, PG_BUSY);
ptdpg->valid = VM_PAGE_BITS_ALL;
+ vm_page_unlock_queues();
pmap_qenter((vm_offset_t) pmap->pm_pdir, &ptdpg, 1);
if ((ptdpg->flags & PG_ZERO) == 0)
@@ -1412,10 +1416,11 @@ _pmap_allocpte(pmap, ptepindex)
pmap_zero_page(m);
}
}
-
+ vm_page_lock_queues();
m->valid = VM_PAGE_BITS_ALL;
vm_page_flag_clear(m, PG_ZERO);
vm_page_wakeup(m);
+ vm_page_unlock_queues();
return m;
}
@@ -2349,7 +2354,6 @@ retry:
vm_page_lock_queues();
if (vm_page_sleep_if_busy(p, FALSE, "init4p"))
goto retry;
- vm_page_unlock_queues();
} else {
p = vm_page_alloc(object, pindex, VM_ALLOC_NORMAL);
if (p == NULL)
@@ -2364,8 +2368,10 @@ retry:
}
p = vm_page_lookup(object, pindex);
+ vm_page_lock_queues();
vm_page_wakeup(p);
}
+ vm_page_unlock_queues();
ptepa = VM_PAGE_TO_PHYS(p);
if (ptepa & (NBPDR - 1)) {