Index: memmgr/mm_reference.c
===================================================================
--- memmgr/mm_reference.c	(revision 174993)
+++ memmgr/mm_reference.c	(working copy)
@@ -221,7 +221,6 @@
 	}
 }
 
-
 static int
 pq_map(OBJECT *obp, off64_t off, struct pa_quantum *pq, unsigned num, void *d) {
 	struct data				*data = d;
@@ -286,7 +285,7 @@
 			//RUSH3: returns NULL. Maybe not - what about special purpose
 			//RUSH3: ram that's outside the sysram region(s)?
 			// We need to map cached initially so we can flush
-			mmap_flags &= ~PROT_NOCACHE;
+	//		mmap_flags &= ~PROT_NOCACHE;
 		}
 
 		data->va = start + NQUANTUM_TO_LEN(num);
@@ -295,6 +294,7 @@
 			if(mmap_flags & PROT_WRITE) {
 				pq->flags |= PAQ_FLAG_MODIFIED;
 			}
+#if 0
 			if(!(mmap_flags & PROT_NOCACHE) && (mm->mmap_flags & PROT_NOCACHE)) {
 				// We've done a cached mapping, but the actual flags were for
 				// no-cache. We did this so that we can make sure there are
@@ -303,6 +303,7 @@
 				CPU_CACHE_CONTROL(or->adp, (void *)start, data->va - start, MS_INVALIDATE|MS_INVALIDATE_ICACHE);
 				r = pte_map(or->adp, start, data->va - 1, mmap_flags | PROT_NOCACHE, or->obp, paddr, 0);
 			}
+#endif
 		}
 	} else { 
 		data->va = start + NQUANTUM_TO_LEN(num);
 
 fail1:	
Index: memmgr/vmm_munmap.c
===================================================================
--- memmgr/vmm_munmap.c	(revision 174993)
+++ memmgr/vmm_munmap.c	(working copy)
@@ -58,6 +58,9 @@
 					sync_off, sync_off + ((num << QUANTUM_BITS) - 1), 
 					data->prp, (void *)(mm->start + (uintptr_t)(off - mm->offset)));
 		}
+		if(!(mm->mmap_flags & PROT_NOCACHE)) {
+			CPU_CACHE_CONTROL(data->prp->memory, (void *)mm->start, mm->end - mm->start, MS_INVALIDATE|MS_INVALIDATE_ICACHE);
+		}
 		data->flags |= PAQ_FLAG_INITIALIZED | PAQ_FLAG_INUSE;
 	} else {
 		vaddr = mm->start + (uintptr_t)(off - mm->offset);
