Module Name: src Committed By: ad Date: Mon Apr 13 22:22:19 UTC 2020
Modified Files: src/sys/uvm: uvm_fault.c Log Message: uvm_fault_check(): if MADV_SEQUENTIAL, change lower lock type to RW_WRITER in case many threads are concurrently doing "sequential" access, to avoid excessive mixing of read/write lock holds. To generate a diff of this commit: cvs rdiff -u -r1.224 -r1.225 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.224 src/sys/uvm/uvm_fault.c:1.225 --- src/sys/uvm/uvm_fault.c:1.224 Mon Mar 23 10:35:56 2020 +++ src/sys/uvm/uvm_fault.c Mon Apr 13 22:22:19 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: uvm_fault.c,v 1.224 2020/03/23 10:35:56 skrll Exp $ */ +/* $NetBSD: uvm_fault.c,v 1.225 2020/04/13 22:22:19 ad 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.224 2020/03/23 10:35:56 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: uvm_fault.c,v 1.225 2020/04/13 22:22:19 ad Exp $"); #include "opt_uvmhist.h" @@ -1184,10 +1184,15 @@ uvm_fault_check( if (amap) uvmfault_anonflush(*ranons, nback); - /* flush object? */ + /* + * flush object? change lock type to RW_WRITER, to avoid + * excessive competition between read/write locks if many + * threads doing "sequential access". + */ if (uobj) { voff_t uoff; + flt->lower_lock_type = RW_WRITER; uoff = ufi->entry->offset + eoff; rw_enter(uobj->vmobjlock, RW_WRITER); (void) (uobj->pgops->pgo_put)(uobj, uoff, uoff +