Module Name: src
Committed By: martin
Date: Fri Apr 19 09:18:28 UTC 2024
Modified Files:
src/sys/uvm/pmap [netbsd-10]: pmap.c pmap.h
Log Message:
Pull up following revision(s) (requested by skrll in ticket #671):
sys/uvm/pmap/pmap.c: revision 1.78
sys/uvm/pmap/pmap.h: revision 1.27
Fix types in pmap_page_clear_attributes so that the top bits of
the u_long mdpg_attrs aren't dropped giving atomic_cas_ulong no
chance of completing if any of the top bits is set.
Update pmap_page_set_attributes for consistency.
An ATF test run completed for me with this fix.
port-riscv/58006: ATF tests no longer complete on riscv-riscv64
To generate a diff of this commit:
cvs rdiff -u -r1.74 -r1.74.2.1 src/sys/uvm/pmap/pmap.c
cvs rdiff -u -r1.26 -r1.26.2.1 src/sys/uvm/pmap/pmap.h
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/pmap/pmap.c
diff -u src/sys/uvm/pmap/pmap.c:1.74 src/sys/uvm/pmap/pmap.c:1.74.2.1
--- src/sys/uvm/pmap/pmap.c:1.74 Thu Nov 3 09:04:57 2022
+++ src/sys/uvm/pmap/pmap.c Fri Apr 19 09:18:28 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: pmap.c,v 1.74 2022/11/03 09:04:57 skrll Exp $ */
+/* $NetBSD: pmap.c,v 1.74.2.1 2024/04/19 09:18:28 martin Exp $ */
/*-
* Copyright (c) 1998, 2001 The NetBSD Foundation, Inc.
@@ -67,7 +67,7 @@
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.74 2022/11/03 09:04:57 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.74.2.1 2024/04/19 09:18:28 martin Exp $");
/*
* Manages physical address maps.
@@ -405,21 +405,21 @@ pmap_addr_range_check(pmap_t pmap, vaddr
*/
bool
-pmap_page_clear_attributes(struct vm_page_md *mdpg, u_int clear_attributes)
+pmap_page_clear_attributes(struct vm_page_md *mdpg, u_long clear_attributes)
{
- volatile unsigned long * const attrp = &mdpg->mdpg_attrs;
+ volatile u_long * const attrp = &mdpg->mdpg_attrs;
#ifdef MULTIPROCESSOR
for (;;) {
- u_int old_attr = *attrp;
+ u_long old_attr = *attrp;
if ((old_attr & clear_attributes) == 0)
return false;
- u_int new_attr = old_attr & ~clear_attributes;
+ u_long new_attr = old_attr & ~clear_attributes;
if (old_attr == atomic_cas_ulong(attrp, old_attr, new_attr))
return true;
}
#else
- unsigned long old_attr = *attrp;
+ u_long old_attr = *attrp;
if ((old_attr & clear_attributes) == 0)
return false;
*attrp &= ~clear_attributes;
@@ -428,7 +428,7 @@ pmap_page_clear_attributes(struct vm_pag
}
void
-pmap_page_set_attributes(struct vm_page_md *mdpg, u_int set_attributes)
+pmap_page_set_attributes(struct vm_page_md *mdpg, u_long set_attributes)
{
#ifdef MULTIPROCESSOR
atomic_or_ulong(&mdpg->mdpg_attrs, set_attributes);
Index: src/sys/uvm/pmap/pmap.h
diff -u src/sys/uvm/pmap/pmap.h:1.26 src/sys/uvm/pmap/pmap.h:1.26.2.1
--- src/sys/uvm/pmap/pmap.h:1.26 Thu Nov 3 18:55:07 2022
+++ src/sys/uvm/pmap/pmap.h Fri Apr 19 09:18:28 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: pmap.h,v 1.26 2022/11/03 18:55:07 skrll Exp $ */
+/* $NetBSD: pmap.h,v 1.26.2.1 2024/04/19 09:18:28 martin Exp $ */
/*
* Copyright (c) 1992, 1993
@@ -296,8 +296,8 @@ extern pmap_segtab_t pmap_kern_segtab;
bool pmap_remove_all(pmap_t);
void pmap_set_modified(paddr_t);
-bool pmap_page_clear_attributes(struct vm_page_md *, u_int);
-void pmap_page_set_attributes(struct vm_page_md *, u_int);
+bool pmap_page_clear_attributes(struct vm_page_md *, u_long);
+void pmap_page_set_attributes(struct vm_page_md *, u_long);
void pmap_pvlist_lock_init(size_t);
#ifdef PMAP_VIRTUAL_CACHE_ALIASES
void pmap_page_cache(struct vm_page_md *, bool);