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

Reply via email to