Module Name: src Committed By: jdolecek Date: Fri Apr 20 19:02:18 UTC 2018
Modified Files: src/sys/kern: sys_pipe.c src/sys/uvm: uvm_emap.c uvm_extern.h Log Message: add prot parameter for uvm_emap_enter(), so that it's possible to enter also read/write mappings To generate a diff of this commit: cvs rdiff -u -r1.143 -r1.144 src/sys/kern/sys_pipe.c cvs rdiff -u -r1.12 -r1.13 src/sys/uvm/uvm_emap.c cvs rdiff -u -r1.209 -r1.210 src/sys/uvm/uvm_extern.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/kern/sys_pipe.c diff -u src/sys/kern/sys_pipe.c:1.143 src/sys/kern/sys_pipe.c:1.144 --- src/sys/kern/sys_pipe.c:1.143 Tue Dec 26 08:30:58 2017 +++ src/sys/kern/sys_pipe.c Fri Apr 20 19:02:18 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: sys_pipe.c,v 1.143 2017/12/26 08:30:58 kamil Exp $ */ +/* $NetBSD: sys_pipe.c,v 1.144 2018/04/20 19:02:18 jdolecek Exp $ */ /*- * Copyright (c) 2003, 2007, 2008, 2009 The NetBSD Foundation, Inc. @@ -68,7 +68,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: sys_pipe.c,v 1.143 2017/12/26 08:30:58 kamil Exp $"); +__KERNEL_RCSID(0, "$NetBSD: sys_pipe.c,v 1.144 2018/04/20 19:02:18 jdolecek Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -747,7 +747,8 @@ pipe_direct_write(file_t *fp, struct pip } /* Enter the loaned pages to KVA, produce new emap generation number. */ - uvm_emap_enter(wmap->kva + ptoa(starting_color), pgs, npages); + uvm_emap_enter(wmap->kva + ptoa(starting_color), pgs, npages, + VM_PROT_READ); wmap->egen = uvm_emap_produce(); /* Now we can put the pipe in direct write mode */ Index: src/sys/uvm/uvm_emap.c diff -u src/sys/uvm/uvm_emap.c:1.12 src/sys/uvm/uvm_emap.c:1.13 --- src/sys/uvm/uvm_emap.c:1.12 Mon Apr 2 18:25:41 2018 +++ src/sys/uvm/uvm_emap.c Fri Apr 20 19:02:18 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: uvm_emap.c,v 1.12 2018/04/02 18:25:41 jdolecek Exp $ */ +/* $NetBSD: uvm_emap.c,v 1.13 2018/04/20 19:02:18 jdolecek Exp $ */ /*- * Copyright (c) 2009, 2010 The NetBSD Foundation, Inc. @@ -50,7 +50,7 @@ * * Map pages at the address: * - * uvm_emap_enter(va, pgs, npages); + * uvm_emap_enter(va, pgs, npages, VM_PROT_READ); * gen = uvm_emap_produce(); * * Read pages via the mapping: @@ -80,7 +80,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: uvm_emap.c,v 1.12 2018/04/02 18:25:41 jdolecek Exp $"); +__KERNEL_RCSID(0, "$NetBSD: uvm_emap.c,v 1.13 2018/04/20 19:02:18 jdolecek Exp $"); #include <sys/param.h> #include <sys/kernel.h> @@ -185,14 +185,14 @@ uvm_emap_free(vaddr_t va, size_t size) * uvm_emap_enter: enter a new mapping, without TLB flush. */ void -uvm_emap_enter(vaddr_t va, struct vm_page **pgs, u_int npages) +uvm_emap_enter(vaddr_t va, struct vm_page **pgs, u_int npages, vm_prot_t prot) { paddr_t pa; u_int n; for (n = 0; n < npages; n++, va += PAGE_SIZE) { pa = VM_PAGE_TO_PHYS(pgs[n]); - pmap_emap_enter(va, pa, VM_PROT_READ); + pmap_emap_enter(va, pa, prot); } } @@ -387,14 +387,14 @@ uvm_emap_update(u_int gen) */ void -uvm_emap_enter(vaddr_t va, struct vm_page **pgs, u_int npages) +uvm_emap_enter(vaddr_t va, struct vm_page **pgs, u_int npages, vm_prot_t prot) { paddr_t pa; u_int n; for (n = 0; n < npages; n++, va += PAGE_SIZE) { pa = VM_PAGE_TO_PHYS(pgs[n]); - pmap_kenter_pa(va, pa, VM_PROT_READ, 0); + pmap_kenter_pa(va, pa, prot, 0); } pmap_update(pmap_kernel()); } Index: src/sys/uvm/uvm_extern.h diff -u src/sys/uvm/uvm_extern.h:1.209 src/sys/uvm/uvm_extern.h:1.210 --- src/sys/uvm/uvm_extern.h:1.209 Fri Apr 20 18:58:10 2018 +++ src/sys/uvm/uvm_extern.h Fri Apr 20 19:02:18 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: uvm_extern.h,v 1.209 2018/04/20 18:58:10 jdolecek Exp $ */ +/* $NetBSD: uvm_extern.h,v 1.210 2018/04/20 19:02:18 jdolecek Exp $ */ /* * Copyright (c) 1997 Charles D. Cranor and Washington University. @@ -632,7 +632,8 @@ void uvm_emap_update(u_int); vaddr_t uvm_emap_alloc(vsize_t, bool); void uvm_emap_free(vaddr_t, size_t); -void uvm_emap_enter(vaddr_t, struct vm_page **, u_int); +void uvm_emap_enter(vaddr_t, struct vm_page **, u_int, + vm_prot_t); void uvm_emap_remove(vaddr_t, vsize_t); #ifdef __HAVE_PMAP_EMAP