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