From 1d161cb2d4028073315aea9c01d2f2a76ebb814f Mon Sep 17 00:00:00 2001 From: jdolecek Date: Thu, 20 Sep 2001 19:09:13 +0000 Subject: [PATCH] call pmap_update() after pmap_enter()s ALWAYS call uvm_unloanpage() in cleanup - it's necessary even in pipe_loan_free() case, since uvm_km_free() doesn't seem to implicitly unloan the loaned pages --- sys/kern/sys_pipe.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/sys/kern/sys_pipe.c b/sys/kern/sys_pipe.c index dc44c77a1b2e..18dc35e12614 100644 --- a/sys/kern/sys_pipe.c +++ b/sys/kern/sys_pipe.c @@ -1,4 +1,4 @@ -/* $NetBSD: sys_pipe.c,v 1.11 2001/07/26 14:14:28 jdolecek Exp $ */ +/* $NetBSD: sys_pipe.c,v 1.12 2001/09/20 19:09:13 jdolecek Exp $ */ /* * Copyright (c) 1996 John S. Dyson @@ -1060,6 +1060,7 @@ retry: for(j=0; j < npages; j++, kva += PAGE_SIZE) pmap_enter(pmap_kernel(), kva, res[j]->phys_addr, VM_PROT_READ, 0); + pmap_update(pmap_kernel()); wpipe->pipe_state |= PIPE_DIRECTW; error = 0; @@ -1081,10 +1082,10 @@ retry: cleanup: pipelock(wpipe, 0); + if (res) + uvm_unloanpage(res, npages); if (error || amountpipekva > maxpipekva) pipe_loan_free(wpipe); - else if (res) - uvm_unloanpage(res, npages); pipeunlock(wpipe); if (error == EPIPE) {