Module Name: src Committed By: martin Date: Mon Nov 11 17:13:28 UTC 2019
Modified Files: src/sys/uvm [netbsd-9]: uvm_fault.c Log Message: Pull up following revision(s) (requested by chs in ticket #414): sys/uvm/uvm_fault.c: revision 1.208 in uvm_fault_lower_io(), fetch all the map entry values that we need before we unlock everything. To generate a diff of this commit: cvs rdiff -u -r1.206 -r1.206.2.1 src/sys/uvm/uvm_fault.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/uvm/uvm_fault.c diff -u src/sys/uvm/uvm_fault.c:1.206 src/sys/uvm/uvm_fault.c:1.206.2.1 --- src/sys/uvm/uvm_fault.c:1.206 Tue May 28 08:59:35 2019 +++ src/sys/uvm/uvm_fault.c Mon Nov 11 17:13:28 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: uvm_fault.c,v 1.206 2019/05/28 08:59:35 msaitoh Exp $ */ +/* $NetBSD: uvm_fault.c,v 1.206.2.1 2019/11/11 17:13:28 martin Exp $ */ /* * Copyright (c) 1997 Charles D. Cranor and Washington University. @@ -32,7 +32,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: uvm_fault.c,v 1.206 2019/05/28 08:59:35 msaitoh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: uvm_fault.c,v 1.206.2.1 2019/11/11 17:13:28 martin Exp $"); #include "opt_uvmhist.h" @@ -1901,11 +1901,18 @@ uvm_fault_lower_io( int gotpages; int error; voff_t uoff; + vm_prot_t access_type; + int advice; UVMHIST_FUNC("uvm_fault_lower_io"); UVMHIST_CALLED(maphist); /* update rusage counters */ curlwp->l_ru.ru_majflt++; + /* grab everything we need from the entry before we unlock */ + uoff = (ufi->orig_rvaddr - ufi->entry->start) + ufi->entry->offset; + access_type = flt->access_type & MASK(ufi->entry); + advice = ufi->entry->advice; + /* Locked: maps(read), amap(if there), uobj */ uvmfault_unlockall(ufi, amap, NULL); @@ -1915,10 +1922,8 @@ uvm_fault_lower_io( uvmexp.fltget++; gotpages = 1; pg = NULL; - uoff = (ufi->orig_rvaddr - ufi->entry->start) + ufi->entry->offset; error = uobj->pgops->pgo_get(uobj, uoff, &pg, &gotpages, - 0, flt->access_type & MASK(ufi->entry), ufi->entry->advice, - PGO_SYNCIO); + 0, access_type, advice, PGO_SYNCIO); /* locked: pg(if no error) */ /*