Module Name: src
Committed By: martin
Date: Mon Nov 18 18:08:51 UTC 2024
Modified Files:
src/sys/arch/x86/x86 [netbsd-9]: pmap.c
Log Message:
Pull up following revision(s) (requested by riastradh in ticket #1924):
sys/arch/x86/x86/pmap.c: revision 1.427
x86/pmap: Use UVM_KMF_WAITVA to ensure pmap_pdp_alloc never fails.
This is used as the backing page allocator for pmap_pdp_pool, and
pmap_ctor assumes that PR_WAITOK allocations from it don't fail and
unconditionally writes to the resulting kva, which if null leads
nowhere good.
It is unclear to me why uvm_km_alloc can accept any combination of
the options UVM_KMF_NOWAIT and UVM_KMF_WAITVA. It seems to me that
at least one should be required (and they should be exclusive), and
any other use should trip an assertion.
PR kern/58666: panic: lock error: Reader / writer lock:
rw_vector_enter,357: locking against myself
To generate a diff of this commit:
cvs rdiff -u -r1.334.2.7 -r1.334.2.8 src/sys/arch/x86/x86/pmap.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/arch/x86/x86/pmap.c
diff -u src/sys/arch/x86/x86/pmap.c:1.334.2.7 src/sys/arch/x86/x86/pmap.c:1.334.2.8
--- src/sys/arch/x86/x86/pmap.c:1.334.2.7 Fri May 13 11:10:38 2022
+++ src/sys/arch/x86/x86/pmap.c Mon Nov 18 18:08:51 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: pmap.c,v 1.334.2.7 2022/05/13 11:10:38 martin Exp $ */
+/* $NetBSD: pmap.c,v 1.334.2.8 2024/11/18 18:08:51 martin Exp $ */
/*
* Copyright (c) 2008, 2010, 2016, 2017 The NetBSD Foundation, Inc.
@@ -130,7 +130,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.334.2.7 2022/05/13 11:10:38 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.334.2.8 2024/11/18 18:08:51 martin Exp $");
#include "opt_user_ldt.h"
#include "opt_lockdebug.h"
@@ -2357,7 +2357,8 @@ pmap_pdp_alloc(struct pool *pp, int flag
{
return (void *)uvm_km_alloc(kernel_map,
PAGE_SIZE * PDP_SIZE, PAGE_SIZE * PDP_SIZE,
- ((flags & PR_WAITOK) ? 0 : UVM_KMF_NOWAIT | UVM_KMF_TRYLOCK) |
+ ((flags & PR_WAITOK) ? UVM_KMF_WAITVA
+ : UVM_KMF_NOWAIT | UVM_KMF_TRYLOCK) |
UVM_KMF_WIRED);
}