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 +