aboutsummaryrefslogtreecommitdiff
path: root/sys/sparc64
diff options
context:
space:
mode:
authorJake Burkholder <jake@FreeBSD.org>2002-07-28 19:15:34 +0000
committerJake Burkholder <jake@FreeBSD.org>2002-07-28 19:15:34 +0000
commitb44ba1a844ff3b351139591b8eeff6273e566a45 (patch)
tree7409c58c739abe93e777697931a24cb0ce6f7c57 /sys/sparc64
parent6a684ecf05fc7da0e405e81cd2b425d7436d1ee4 (diff)
downloadsrc-b44ba1a844ff3b351139591b8eeff6273e566a45.tar.gz
src-b44ba1a844ff3b351139591b8eeff6273e566a45.zip
Fix a bug introduced in previous commit. Due to the interaction of the
direct physical mappings with virtual page colour, we need to flush the data cache when a page changes colour. I missed one case which broke pipes.
Notes
Notes: svn path=/head/; revision=100830
Diffstat (limited to 'sys/sparc64')
-rw-r--r--sys/sparc64/sparc64/pmap.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/sys/sparc64/sparc64/pmap.c b/sys/sparc64/sparc64/pmap.c
index 3067d12a6042..eea59318f865 100644
--- a/sys/sparc64/sparc64/pmap.c
+++ b/sys/sparc64/sparc64/pmap.c
@@ -600,8 +600,8 @@ pmap_cache_enter(vm_page_t m, vm_offset_t va)
c++;
}
if (c == 1) {
- m->md.color = color;
dcache_page_inval(VM_PAGE_TO_PHYS(m));
+ m->md.color = color;
CTR0(KTR_PMAP, "pmap_cache_enter: cacheable");
return (1);
}
@@ -640,7 +640,7 @@ pmap_cache_remove(vm_page_t m, vm_offset_t va)
if (m->md.colors[i] != 0)
c++;
}
- if (c > 1)
+ if (c == 0)
return;
STAILQ_FOREACH(tp, &m->md.tte_list, tte_link) {
tp->tte_data |= TD_CV;