Subject: Re: port-mips/15965: NEW_PIPE broken on port-mips
To: Chuck Silvers <chuq@chuq.com>
From: Takao Shinohara <shin@sm.sony.co.jp>
List: netbsd-bugs
Date: 03/24/2002 12:01:31
Chuck Silvers <chuq@chuq.com> writes:
> On Tue, Mar 19, 2002 at 09:47:00PM +0100, Manuel Bouyer wrote:
> > Maybe a missing cache flush ?
> 
> indeed it was.  it's fixed now, get the latest mips/pmap.c.

I think this fix (pmap.c rev. 1.142) is not correct. Virtual alias
should be handled via pmap_enter()/pmap_remove().

How about this patch? (and backout 1.142 of pmap.c?)

--- Takao Shinohara

Index: sys_pipe.c
===================================================================
RCS file: /cvsroot/syssrc/sys/kern/sys_pipe.c,v
retrieving revision 1.25
diff -u -r1.25 sys_pipe.c
--- sys_pipe.c	2002/03/17 19:41:07	1.25
+++ sys_pipe.c	2002/03/24 02:53:51
@@ -1149,7 +1149,8 @@
 	/* Enter the loaned pages to kva */
 	kva = wpipe->pipe_map.kva;
 	for (j = 0; j < npages; j++, kva += PAGE_SIZE) {
-		pmap_kenter_pa(kva, VM_PAGE_TO_PHYS(pgs[j]), VM_PROT_READ);
+		pmap_enter(pmap_kernel(), kva, VM_PAGE_TO_PHYS(pgs[j]),
+		    VM_PROT_READ, PMAP_WIRED);
 	}
 	pmap_update(pmap_kernel());
 
@@ -1173,7 +1174,8 @@
 cleanup:
 	pipelock(wpipe, 0);
 	if (pgs != NULL) {
-		pmap_kremove(wpipe->pipe_map.kva, blen);
+		pmap_remove(pmap_kernel(), wpipe->pipe_map.kva,
+		    wpipe->pipe_map.kva + blen);
 		uvm_unloan(pgs, npages, UVM_LOAN_TOPAGE);
 	}
 	if (error || amountpipekva > maxpipekva)