summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoralc <alc@FreeBSD.org>2002-07-14 20:24:40 +0000
committeralc <alc@FreeBSD.org>2002-07-14 20:24:40 +0000
commit84e8c06b808766af4447b87b2678fd2a64f4057a (patch)
tree2bbfbb70c1f11fc663065382f8f8aa732fe14a56
parente650551ab94d75db5cd689ab630bf45931ec961d (diff)
downloadFreeBSD-src-84e8c06b808766af4447b87b2678fd2a64f4057a.zip
FreeBSD-src-84e8c06b808766af4447b87b2678fd2a64f4057a.tar.gz
o Lock page queue accesses by vm_page_wire().
-rw-r--r--sys/amd64/amd64/pmap.c4
-rw-r--r--sys/i386/i386/pmap.c4
2 files changed, 8 insertions, 0 deletions
diff --git a/sys/amd64/amd64/pmap.c b/sys/amd64/amd64/pmap.c
index 9b4d09d..a52736b 100644
--- a/sys/amd64/amd64/pmap.c
+++ b/sys/amd64/amd64/pmap.c
@@ -1071,9 +1071,11 @@ pmap_swapin_thread(td)
m->valid = VM_PAGE_BITS_ALL;
}
ma[i] = m;
+ vm_page_lock_queues();
vm_page_wire(m);
vm_page_wakeup(m);
vm_page_flag_set(m, PG_MAPPED | PG_WRITEABLE);
+ vm_page_unlock_queues();
}
pmap_qenter(ks, ma, KSTACK_PAGES);
}
@@ -1521,7 +1523,9 @@ pmap_growkernel(vm_offset_t addr)
nkpt++;
+ vm_page_lock_queues();
vm_page_wire(nkpg);
+ vm_page_unlock_queues();
pmap_zero_page(nkpg);
ptppaddr = VM_PAGE_TO_PHYS(nkpg);
newpdir = (pd_entry_t) (ptppaddr | PG_V | PG_RW | PG_A | PG_M);
diff --git a/sys/i386/i386/pmap.c b/sys/i386/i386/pmap.c
index 9b4d09d..a52736b 100644
--- a/sys/i386/i386/pmap.c
+++ b/sys/i386/i386/pmap.c
@@ -1071,9 +1071,11 @@ pmap_swapin_thread(td)
m->valid = VM_PAGE_BITS_ALL;
}
ma[i] = m;
+ vm_page_lock_queues();
vm_page_wire(m);
vm_page_wakeup(m);
vm_page_flag_set(m, PG_MAPPED | PG_WRITEABLE);
+ vm_page_unlock_queues();
}
pmap_qenter(ks, ma, KSTACK_PAGES);
}
@@ -1521,7 +1523,9 @@ pmap_growkernel(vm_offset_t addr)
nkpt++;
+ vm_page_lock_queues();
vm_page_wire(nkpg);
+ vm_page_unlock_queues();
pmap_zero_page(nkpg);
ptppaddr = VM_PAGE_TO_PHYS(nkpg);
newpdir = (pd_entry_t) (ptppaddr | PG_V | PG_RW | PG_A | PG_M);
OpenPOWER on IntegriCloud