Module Name: src Committed By: riastradh Date: Sat Aug 20 23:49:32 UTC 2022
Modified Files: src/sys/arch/amd64/amd64: netbsd32_machdep.c src/sys/arch/amd64/include: pmap.h pmap_private.h src/sys/arch/i386/i386: compat_16_machdep.c src/sys/arch/i386/include: pmap.h pmap_private.h src/sys/arch/x86/include: pmap.h pmap_private.h src/sys/arch/x86/x86: pmap.c sys_machdep.c src/sys/external/bsd/drm2/include/linux: shmem_fs.h Log Message: x86: Move definition of struct pmap to pmap_private.h. This makes pmap_resident_count and pmap_wired_count out-of-line functions instead of inline. No functional change intended otherwise. To generate a diff of this commit: cvs rdiff -u -r1.140 -r1.141 src/sys/arch/amd64/amd64/netbsd32_machdep.c cvs rdiff -u -r1.68 -r1.69 src/sys/arch/amd64/include/pmap.h cvs rdiff -u -r1.1 -r1.2 src/sys/arch/amd64/include/pmap_private.h cvs rdiff -u -r1.33 -r1.34 src/sys/arch/i386/i386/compat_16_machdep.c cvs rdiff -u -r1.128 -r1.129 src/sys/arch/i386/include/pmap.h cvs rdiff -u -r1.1 -r1.2 src/sys/arch/i386/include/pmap_private.h cvs rdiff -u -r1.133 -r1.134 src/sys/arch/x86/include/pmap.h cvs rdiff -u -r1.1 -r1.2 src/sys/arch/x86/include/pmap_private.h cvs rdiff -u -r1.419 -r1.420 src/sys/arch/x86/x86/pmap.c cvs rdiff -u -r1.57 -r1.58 src/sys/arch/x86/x86/sys_machdep.c cvs rdiff -u -r1.4 -r1.5 src/sys/external/bsd/drm2/include/linux/shmem_fs.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/arch/amd64/amd64/netbsd32_machdep.c diff -u src/sys/arch/amd64/amd64/netbsd32_machdep.c:1.140 src/sys/arch/amd64/amd64/netbsd32_machdep.c:1.141 --- src/sys/arch/amd64/amd64/netbsd32_machdep.c:1.140 Sat Nov 6 20:42:56 2021 +++ src/sys/arch/amd64/amd64/netbsd32_machdep.c Sat Aug 20 23:49:31 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: netbsd32_machdep.c,v 1.140 2021/11/06 20:42:56 thorpej Exp $ */ +/* $NetBSD: netbsd32_machdep.c,v 1.141 2022/08/20 23:49:31 riastradh Exp $ */ /* * Copyright (c) 2001 Wasabi Systems, Inc. @@ -36,7 +36,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: netbsd32_machdep.c,v 1.140 2021/11/06 20:42:56 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: netbsd32_machdep.c,v 1.141 2022/08/20 23:49:31 riastradh Exp $"); #ifdef _KERNEL_OPT #include "opt_compat_netbsd.h" @@ -75,6 +75,7 @@ __KERNEL_RCSID(0, "$NetBSD: netbsd32_mac #include <machine/sysarch.h> #include <machine/userret.h> #include <machine/gdt.h> +#include <machine/pmap_private.h> #include <compat/netbsd32/netbsd32.h> #include <compat/netbsd32/netbsd32_exec.h> Index: src/sys/arch/amd64/include/pmap.h diff -u src/sys/arch/amd64/include/pmap.h:1.68 src/sys/arch/amd64/include/pmap.h:1.69 --- src/sys/arch/amd64/include/pmap.h:1.68 Sat Aug 20 23:48:50 2022 +++ src/sys/arch/amd64/include/pmap.h Sat Aug 20 23:49:31 2022 @@ -1,4 +1,3 @@ -/* $NetBSD: pmap.h,v 1.68 2022/08/20 23:48:50 riastradh Exp $ */ +/* $NetBSD: pmap.h,v 1.69 2022/08/20 23:49:31 riastradh Exp $ */ -#define PTP_LEVELS 4 #include <x86/pmap.h> Index: src/sys/arch/amd64/include/pmap_private.h diff -u src/sys/arch/amd64/include/pmap_private.h:1.1 src/sys/arch/amd64/include/pmap_private.h:1.2 --- src/sys/arch/amd64/include/pmap_private.h:1.1 Sat Aug 20 23:48:50 2022 +++ src/sys/arch/amd64/include/pmap_private.h Sat Aug 20 23:49:31 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap_private.h,v 1.1 2022/08/20 23:48:50 riastradh Exp $ */ +/* $NetBSD: pmap_private.h,v 1.2 2022/08/20 23:49:31 riastradh Exp $ */ /* * Copyright (c) 1997 Charles D. Cranor and Washington University. @@ -175,6 +175,8 @@ extern pt_entry_t *pte_base; #define NBPD_INITIALIZER { NBPD_L1, NBPD_L2, NBPD_L3, NBPD_L4 } #define PDES_INITIALIZER { L2_BASE, L3_BASE, L4_BASE } +#define PTP_LEVELS 4 + /* * PTE_AVL usage: we make use of the ignored bits of the PTE */ Index: src/sys/arch/i386/i386/compat_16_machdep.c diff -u src/sys/arch/i386/i386/compat_16_machdep.c:1.33 src/sys/arch/i386/i386/compat_16_machdep.c:1.34 --- src/sys/arch/i386/i386/compat_16_machdep.c:1.33 Wed Oct 27 04:14:59 2021 +++ src/sys/arch/i386/i386/compat_16_machdep.c Sat Aug 20 23:49:31 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: compat_16_machdep.c,v 1.33 2021/10/27 04:14:59 thorpej Exp $ */ +/* $NetBSD: compat_16_machdep.c,v 1.34 2022/08/20 23:49:31 riastradh Exp $ */ /*- * Copyright (c) 1996, 1997, 1998, 2000 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: compat_16_machdep.c,v 1.33 2021/10/27 04:14:59 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: compat_16_machdep.c,v 1.34 2022/08/20 23:49:31 riastradh Exp $"); #ifdef _KERNEL_OPT #include "opt_compat_netbsd.h" @@ -48,6 +48,7 @@ __KERNEL_RCSID(0, "$NetBSD: compat_16_ma #include <uvm/uvm_extern.h> #include <machine/pmap.h> +#include <machine/pmap_private.h> #include <machine/vmparam.h> #include <x86/fpu.h> Index: src/sys/arch/i386/include/pmap.h diff -u src/sys/arch/i386/include/pmap.h:1.128 src/sys/arch/i386/include/pmap.h:1.129 --- src/sys/arch/i386/include/pmap.h:1.128 Sat Aug 20 23:48:50 2022 +++ src/sys/arch/i386/include/pmap.h Sat Aug 20 23:49:31 2022 @@ -1,4 +1,3 @@ -/* $NetBSD: pmap.h,v 1.128 2022/08/20 23:48:50 riastradh Exp $ */ +/* $NetBSD: pmap.h,v 1.129 2022/08/20 23:49:31 riastradh Exp $ */ -#define PTP_LEVELS 2 #include <x86/pmap.h> Index: src/sys/arch/i386/include/pmap_private.h diff -u src/sys/arch/i386/include/pmap_private.h:1.1 src/sys/arch/i386/include/pmap_private.h:1.2 --- src/sys/arch/i386/include/pmap_private.h:1.1 Sat Aug 20 23:48:50 2022 +++ src/sys/arch/i386/include/pmap_private.h Sat Aug 20 23:49:31 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap_private.h,v 1.1 2022/08/20 23:48:50 riastradh Exp $ */ +/* $NetBSD: pmap_private.h,v 1.2 2022/08/20 23:49:31 riastradh Exp $ */ /* * Copyright (c) 1997 Charles D. Cranor and Washington University. @@ -241,6 +241,8 @@ #define NBPD_INITIALIZER { NBPD_L1, NBPD_L2 } #define PDES_INITIALIZER { L2_BASE } +#define PTP_LEVELS 2 + /* * PTE_AVL usage: we make use of the ignored bits of the PTE */ Index: src/sys/arch/x86/include/pmap.h diff -u src/sys/arch/x86/include/pmap.h:1.133 src/sys/arch/x86/include/pmap.h:1.134 --- src/sys/arch/x86/include/pmap.h:1.133 Sat Aug 20 23:48:50 2022 +++ src/sys/arch/x86/include/pmap.h Sat Aug 20 23:49:31 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.h,v 1.133 2022/08/20 23:48:50 riastradh Exp $ */ +/* $NetBSD: pmap.h,v 1.134 2022/08/20 23:49:31 riastradh Exp $ */ /* * Copyright (c) 1997 Charles D. Cranor and Washington University. @@ -68,72 +68,8 @@ #define _X86_PMAP_H_ #if defined(_KERNEL) -#include <sys/kcpuset.h> -#include <sys/rwlock.h> #include <x86/pmap_pv.h> #include <uvm/pmap/pmap_pvt.h> -#include <uvm/uvm_object.h> - -/* - * the pmap structure - * - * note that the pm_obj contains the lock pointer, the reference count, - * page list, and number of PTPs within the pmap. - * - * pm_lock is the same as the lock for vm object 0. Changes to - * the other objects may only be made if that lock has been taken - * (the other object locks are only used when uvm_pagealloc is called) - */ - -struct pv_page; - -struct pmap { - struct uvm_object pm_obj[PTP_LEVELS-1];/* objects for lvl >= 1) */ - LIST_ENTRY(pmap) pm_list; /* list of all pmaps */ - pd_entry_t *pm_pdir; /* VA of PD */ - paddr_t pm_pdirpa[PDP_SIZE]; /* PA of PDs (read-only after create) */ - struct vm_page *pm_ptphint[PTP_LEVELS-1]; - /* pointer to a PTP in our pmap */ - struct pmap_statistics pm_stats; /* pmap stats */ - struct pv_entry *pm_pve; /* spare pv_entry */ - LIST_HEAD(, pv_page) pm_pvp_part; - LIST_HEAD(, pv_page) pm_pvp_empty; - LIST_HEAD(, pv_page) pm_pvp_full; - -#if !defined(__x86_64__) - vaddr_t pm_hiexec; /* highest executable mapping */ -#endif /* !defined(__x86_64__) */ - - union descriptor *pm_ldt; /* user-set LDT */ - size_t pm_ldt_len; /* XXX unused, remove */ - int pm_ldt_sel; /* LDT selector */ - - kcpuset_t *pm_cpus; /* mask of CPUs using pmap */ - kcpuset_t *pm_kernel_cpus; /* mask of CPUs using kernel part - of pmap */ - kcpuset_t *pm_xen_ptp_cpus; /* mask of CPUs which have this pmap's - ptp mapped */ - uint64_t pm_ncsw; /* for assertions */ - LIST_HEAD(,vm_page) pm_gc_ptp; /* PTPs queued for free */ - - /* Used by NVMM and Xen */ - int (*pm_enter)(struct pmap *, vaddr_t, paddr_t, vm_prot_t, u_int); - bool (*pm_extract)(struct pmap *, vaddr_t, paddr_t *); - void (*pm_remove)(struct pmap *, vaddr_t, vaddr_t); - int (*pm_sync_pv)(struct vm_page *, vaddr_t, paddr_t, int, uint8_t *, - pt_entry_t *); - void (*pm_pp_remove_ent)(struct pmap *, struct vm_page *, pt_entry_t, - vaddr_t); - void (*pm_write_protect)(struct pmap *, vaddr_t, vaddr_t, vm_prot_t); - void (*pm_unwire)(struct pmap *, vaddr_t); - - void (*pm_tlb_flush)(struct pmap *); - void *pm_data; - - kmutex_t pm_lock /* locks for pm_objs */ - __aligned(64); /* give lock own cache line */ - krwlock_t pm_dummy_lock; /* ugly hack for abusing uvm_object */ -}; /* * MD flags that we use for pmap_enter and pmap_kenter_pa: @@ -143,9 +79,6 @@ struct pmap { * macros */ -#define pmap_resident_count(pmap) ((pmap)->pm_stats.resident_count) -#define pmap_wired_count(pmap) ((pmap)->pm_stats.wired_count) - #define pmap_clear_modify(pg) pmap_clear_attrs(pg, PP_ATTRS_D) #define pmap_clear_reference(pg) pmap_clear_attrs(pg, PP_ATTRS_A) #define pmap_copy(DP,SP,D,L,S) __USE(L) Index: src/sys/arch/x86/include/pmap_private.h diff -u src/sys/arch/x86/include/pmap_private.h:1.1 src/sys/arch/x86/include/pmap_private.h:1.2 --- src/sys/arch/x86/include/pmap_private.h:1.1 Sat Aug 20 23:48:50 2022 +++ src/sys/arch/x86/include/pmap_private.h Sat Aug 20 23:49:31 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap_private.h,v 1.1 2022/08/20 23:48:50 riastradh Exp $ */ +/* $NetBSD: pmap_private.h,v 1.2 2022/08/20 23:49:31 riastradh Exp $ */ /* * Copyright (c) 1997 Charles D. Cranor and Washington University. @@ -74,13 +74,16 @@ #include <sys/param.h> #include <sys/types.h> +#include <sys/kcpuset.h> #include <sys/mutex.h> #include <sys/pool.h> #include <sys/queue.h> +#include <sys/rwlock.h> #include <machine/pte.h> #include <machine/vmparam.h> +#include <uvm/uvm_object.h> #include <uvm/uvm_pmap.h> struct pmap; @@ -154,6 +157,67 @@ extern kmutex_t pmaps_lock; /* protec */ extern struct pool_cache pmap_cache; +/* + * the pmap structure + * + * note that the pm_obj contains the lock pointer, the reference count, + * page list, and number of PTPs within the pmap. + * + * pm_lock is the same as the lock for vm object 0. Changes to + * the other objects may only be made if that lock has been taken + * (the other object locks are only used when uvm_pagealloc is called) + */ + +struct pv_page; + +struct pmap { + struct uvm_object pm_obj[PTP_LEVELS-1];/* objects for lvl >= 1) */ + LIST_ENTRY(pmap) pm_list; /* list of all pmaps */ + pd_entry_t *pm_pdir; /* VA of PD */ + paddr_t pm_pdirpa[PDP_SIZE]; /* PA of PDs (read-only after create) */ + struct vm_page *pm_ptphint[PTP_LEVELS-1]; + /* pointer to a PTP in our pmap */ + struct pmap_statistics pm_stats; /* pmap stats */ + struct pv_entry *pm_pve; /* spare pv_entry */ + LIST_HEAD(, pv_page) pm_pvp_part; + LIST_HEAD(, pv_page) pm_pvp_empty; + LIST_HEAD(, pv_page) pm_pvp_full; + +#if !defined(__x86_64__) + vaddr_t pm_hiexec; /* highest executable mapping */ +#endif /* !defined(__x86_64__) */ + + union descriptor *pm_ldt; /* user-set LDT */ + size_t pm_ldt_len; /* XXX unused, remove */ + int pm_ldt_sel; /* LDT selector */ + + kcpuset_t *pm_cpus; /* mask of CPUs using pmap */ + kcpuset_t *pm_kernel_cpus; /* mask of CPUs using kernel part + of pmap */ + kcpuset_t *pm_xen_ptp_cpus; /* mask of CPUs which have this pmap's + ptp mapped */ + uint64_t pm_ncsw; /* for assertions */ + LIST_HEAD(,vm_page) pm_gc_ptp; /* PTPs queued for free */ + + /* Used by NVMM and Xen */ + int (*pm_enter)(struct pmap *, vaddr_t, paddr_t, vm_prot_t, u_int); + bool (*pm_extract)(struct pmap *, vaddr_t, paddr_t *); + void (*pm_remove)(struct pmap *, vaddr_t, vaddr_t); + int (*pm_sync_pv)(struct vm_page *, vaddr_t, paddr_t, int, uint8_t *, + pt_entry_t *); + void (*pm_pp_remove_ent)(struct pmap *, struct vm_page *, pt_entry_t, + vaddr_t); + void (*pm_write_protect)(struct pmap *, vaddr_t, vaddr_t, vm_prot_t); + void (*pm_unwire)(struct pmap *, vaddr_t); + + void (*pm_tlb_flush)(struct pmap *); + void *pm_data; + + kmutex_t pm_lock /* locks for pm_objs */ + __aligned(64); /* give lock own cache line */ + krwlock_t pm_dummy_lock; /* ugly hack for abusing uvm_object */ +}; + /* macro to access pm_pdirpa slots */ #ifdef PAE #define pmap_pdirpa(pmap, index) \ Index: src/sys/arch/x86/x86/pmap.c diff -u src/sys/arch/x86/x86/pmap.c:1.419 src/sys/arch/x86/x86/pmap.c:1.420 --- src/sys/arch/x86/x86/pmap.c:1.419 Sat Aug 20 23:48:51 2022 +++ src/sys/arch/x86/x86/pmap.c Sat Aug 20 23:49:31 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.419 2022/08/20 23:48:51 riastradh Exp $ */ +/* $NetBSD: pmap.c,v 1.420 2022/08/20 23:49:31 riastradh Exp $ */ /* * Copyright (c) 2008, 2010, 2016, 2017, 2019, 2020 The NetBSD Foundation, Inc. @@ -130,7 +130,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.419 2022/08/20 23:48:51 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.420 2022/08/20 23:49:31 riastradh Exp $"); #include "opt_user_ldt.h" #include "opt_lockdebug.h" @@ -528,6 +528,20 @@ static void pmap_alloc_level(struct pmap static void pmap_load1(struct lwp *, struct pmap *, struct pmap *); static void pmap_reactivate(struct pmap *); +long +pmap_resident_count(struct pmap *pmap) +{ + + return pmap->pm_stats.resident_count; +} + +long +pmap_wired_count(struct pmap *pmap) +{ + + return pmap->pm_stats.wired_count; +} + /* * p m a p h e l p e r f u n c t i o n s */ Index: src/sys/arch/x86/x86/sys_machdep.c diff -u src/sys/arch/x86/x86/sys_machdep.c:1.57 src/sys/arch/x86/x86/sys_machdep.c:1.58 --- src/sys/arch/x86/x86/sys_machdep.c:1.57 Thu Oct 7 12:52:27 2021 +++ src/sys/arch/x86/x86/sys_machdep.c Sat Aug 20 23:49:31 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: sys_machdep.c,v 1.57 2021/10/07 12:52:27 msaitoh Exp $ */ +/* $NetBSD: sys_machdep.c,v 1.58 2022/08/20 23:49:31 riastradh Exp $ */ /* * Copyright (c) 1998, 2007, 2009, 2017 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: sys_machdep.c,v 1.57 2021/10/07 12:52:27 msaitoh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: sys_machdep.c,v 1.58 2022/08/20 23:49:31 riastradh Exp $"); #include "opt_mtrr.h" #include "opt_user_ldt.h" @@ -62,6 +62,7 @@ __KERNEL_RCSID(0, "$NetBSD: sys_machdep. #include <machine/reg.h> #include <machine/sysarch.h> #include <machine/mtrr.h> +#include <machine/pmap_private.h> #if defined(__x86_64__) || defined(XENPV) #undef IOPERM /* not implemented */ Index: src/sys/external/bsd/drm2/include/linux/shmem_fs.h diff -u src/sys/external/bsd/drm2/include/linux/shmem_fs.h:1.4 src/sys/external/bsd/drm2/include/linux/shmem_fs.h:1.5 --- src/sys/external/bsd/drm2/include/linux/shmem_fs.h:1.4 Sun Dec 19 12:13:08 2021 +++ src/sys/external/bsd/drm2/include/linux/shmem_fs.h Sat Aug 20 23:49:31 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: shmem_fs.h,v 1.4 2021/12/19 12:13:08 riastradh Exp $ */ +/* $NetBSD: shmem_fs.h,v 1.5 2022/08/20 23:49:31 riastradh Exp $ */ /*- * Copyright (c) 2013 The NetBSD Foundation, Inc. @@ -40,6 +40,7 @@ #include <lib/libkern/libkern.h> #include <uvm/uvm_extern.h> +#include <uvm/uvm_object.h> #include <linux/err.h> #include <linux/gfp.h>