Module Name: src Committed By: martin Date: Mon Oct 2 13:01:46 UTC 2023
Modified Files: src/sys/uvm [netbsd-10]: uvm_pdaemon.c Log Message: Pull up following revision(s) (requested by ad in ticket #379): sys/uvm/uvm_pdaemon.c: revision 1.134 uvmpd_trylockowner(): release pg->interlock before calling rw_obj_free() since it can call back into the VM system. To generate a diff of this commit: cvs rdiff -u -r1.133 -r1.133.16.1 src/sys/uvm/uvm_pdaemon.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_pdaemon.c diff -u src/sys/uvm/uvm_pdaemon.c:1.133 src/sys/uvm/uvm_pdaemon.c:1.133.16.1 --- src/sys/uvm/uvm_pdaemon.c:1.133 Sat Apr 17 21:37:21 2021 +++ src/sys/uvm/uvm_pdaemon.c Mon Oct 2 13:01:46 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: uvm_pdaemon.c,v 1.133 2021/04/17 21:37:21 mrg Exp $ */ +/* $NetBSD: uvm_pdaemon.c,v 1.133.16.1 2023/10/02 13:01:46 martin Exp $ */ /* * Copyright (c) 1997 Charles D. Cranor and Washington University. @@ -66,7 +66,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: uvm_pdaemon.c,v 1.133 2021/04/17 21:37:21 mrg Exp $"); +__KERNEL_RCSID(0, "$NetBSD: uvm_pdaemon.c,v 1.133.16.1 2023/10/02 13:01:46 martin Exp $"); #include "opt_uvmhist.h" #include "opt_readahead.h" @@ -416,7 +416,7 @@ uvmpd_page_owner_lock(struct vm_page *pg krwlock_t * uvmpd_trylockowner(struct vm_page *pg) { - krwlock_t *slock, *heldslock; + krwlock_t *slock, *heldslock = NULL; KASSERT(mutex_owned(&pg->interlock)); @@ -453,9 +453,7 @@ uvmpd_trylockowner(struct vm_page *pg) if (heldslock != slock) { rw_exit(heldslock); slock = NULL; - } - rw_obj_free(heldslock); - if (slock != NULL) { + } else { success: /* * Set PG_ANON if it isn't set already. @@ -468,6 +466,9 @@ success: } } mutex_exit(&pg->interlock); + if (heldslock != NULL) { + rw_obj_free(heldslock); + } return slock; }