diff options
author | jake <jake@FreeBSD.org> | 2002-12-20 21:47:21 +0000 |
---|---|---|
committer | jake <jake@FreeBSD.org> | 2002-12-20 21:47:21 +0000 |
commit | d522abfb6d47ee167a0c53c0083f506210ae0a0c (patch) | |
tree | 8498c1ff0faacc11dc3dc0f8636f3e4828ed9030 /sys | |
parent | 31d637dca52ba263b8039cc76549389044885fbc (diff) | |
download | FreeBSD-src-d522abfb6d47ee167a0c53c0083f506210ae0a0c.zip FreeBSD-src-d522abfb6d47ee167a0c53c0083f506210ae0a0c.tar.gz |
Add page queue locking around functions that call vm_page_flag_set. This
fixes a failed assertion early in boot on sparc64.
Reported by: Roderick van Domburg <r.s.a.vandomburg@student.utwente.nl>
Diffstat (limited to 'sys')
-rw-r--r-- | sys/sparc64/sparc64/pmap.c | 2 | ||||
-rw-r--r-- | sys/sparc64/sparc64/tsb.c | 2 |
2 files changed, 4 insertions, 0 deletions
diff --git a/sys/sparc64/sparc64/pmap.c b/sys/sparc64/sparc64/pmap.c index a05c787..c441806 100644 --- a/sys/sparc64/sparc64/pmap.c +++ b/sys/sparc64/sparc64/pmap.c @@ -1502,7 +1502,9 @@ pmap_enter(pmap_t pm, vm_offset_t va, vm_page_t m, vm_prot_t prot, if (tp != NULL) { CTR0(KTR_PMAP, "pmap_enter: replace"); PMAP_STATS_INC(pmap_enter_nreplace); + vm_page_lock_queues(); pmap_remove_tte(pm, NULL, tp, va); + vm_page_unlock_queues(); tlb_page_demap(pm, va); } else { CTR0(KTR_PMAP, "pmap_enter: new"); diff --git a/sys/sparc64/sparc64/tsb.c b/sys/sparc64/sparc64/tsb.c index 68ba11d..a2293cd 100644 --- a/sys/sparc64/sparc64/tsb.c +++ b/sys/sparc64/sparc64/tsb.c @@ -167,7 +167,9 @@ tsb_tte_enter(pmap_t pm, vm_page_t m, vm_offset_t va, u_long sz, u_long data) if ((tp->tte_data & TD_V) != 0) { TSB_STATS_INC(tsb_nrepl); ova = TTE_GET_VA(tp); + vm_page_lock_queues(); pmap_remove_tte(pm, NULL, tp, ova); + vm_page_unlock_queues(); tlb_page_demap(pm, ova); } |