pmap_copy() is an optional pmap interface which has never been implemented. In pure Mary Kondo style, we should thank it for the joy it brought to CSRG people, and move it to the recycling bin - it's not going to be implemented anytime soon.
Index: share/man/man9/pmap.9 =================================================================== RCS file: /OpenBSD/src/share/man/man9/pmap.9,v retrieving revision 1.19 diff -u -p -r1.19 pmap.9 --- share/man/man9/pmap.9 16 Dec 2019 10:34:04 -0000 1.19 +++ share/man/man9/pmap.9 2 Apr 2023 19:23:11 -0000 @@ -49,8 +49,7 @@ .Nm pmap_growkernel , .Nm pmap_update , .Nm pmap_collect , -.Nm pmap_virtual_space , -.Nm pmap_copy +.Nm pmap_virtual_space .Nd machine dependent interface to the MMU .Sh SYNOPSIS .In machine/pmap.h @@ -366,9 +365,6 @@ it contains no valid mappings. .Fn pmap_collect "pmap_t pmap" .Ft void .Fn pmap_virtual_space "vaddr_t *vstartp" "vaddr_t *vendp" -.Ft void -.Fn pmap_copy "pmap_t dst_pmap" "pmap_t src_pmap" "vaddr_t dst_addr" \ - "vsize_t len" "vaddr_t src_addr" .nr nS 0 .Pp Wired memory allocation before the virtual memory system is bootstrapped @@ -398,26 +394,6 @@ is not expected to be used for some time module a chance to prioritize. The initial bounds of the kernel virtual address space are returned by .Fn pmap_virtual_space . -.Pp -The -.Fn pmap_copy -function copies the range specified by -.Fa src_addr -and -.Fa src_len -from -.Fa src_pmap -to the range described by -.Fa dst_addr -and -.Fa dst_len -in -.Fa dst_map . -.Fn pmap_copy -is called during a -.Xr fork 2 -operation to give the child process an initial set of low-level -mappings. .Sh SEE ALSO .Xr fork 2 , .Xr uvm_init 9 Index: sys/arch/alpha/alpha/pmap.c =================================================================== RCS file: /OpenBSD/src/sys/arch/alpha/alpha/pmap.c,v retrieving revision 1.89 diff -u -p -r1.89 pmap.c --- sys/arch/alpha/alpha/pmap.c 6 Feb 2023 11:16:22 -0000 1.89 +++ sys/arch/alpha/alpha/pmap.c 2 Apr 2023 19:23:11 -0000 @@ -2017,17 +2017,6 @@ pmap_extract(pmap_t pmap, vaddr_t va, pa } /* - * pmap_copy: [ INTERFACE ] - * - * Copy the mapping range specified by src_addr/len - * from the source map to the range dst_addr/len - * in the destination map. - * - * This routine is only advisory and need not do anything. - */ -/* call deleted in <machine/pmap.h> */ - -/* * pmap_collect: [ INTERFACE ] * * Garbage collects the physical map system for pages which are no Index: sys/arch/alpha/include/pmap.h =================================================================== RCS file: /OpenBSD/src/sys/arch/alpha/include/pmap.h,v retrieving revision 1.44 diff -u -p -r1.44 pmap.h --- sys/arch/alpha/include/pmap.h 6 Feb 2023 11:16:22 -0000 1.44 +++ sys/arch/alpha/include/pmap.h 2 Apr 2023 19:23:11 -0000 @@ -155,7 +155,6 @@ void pmap_do_tlb_shootdown(struct cpu_in #define pmap_resident_count(pmap) ((pmap)->pm_stats.resident_count) #define pmap_wired_count(pmap) ((pmap)->pm_stats.wired_count) -#define pmap_copy(dp, sp, da, l, sa) /* nothing */ #define pmap_update(pmap) /* nothing (yet) */ #define pmap_proc_iflush(p, va, len) /* nothing */ Index: sys/arch/amd64/amd64/pmap.c =================================================================== RCS file: /OpenBSD/src/sys/arch/amd64/amd64/pmap.c,v retrieving revision 1.162 diff -u -p -r1.162 pmap.c --- sys/arch/amd64/amd64/pmap.c 30 Jan 2023 11:21:26 -0000 1.162 +++ sys/arch/amd64/amd64/pmap.c 2 Apr 2023 19:23:11 -0000 @@ -2257,17 +2257,6 @@ pmap_collect(struct pmap *pmap) } #endif -/* - * pmap_copy: copy mappings from one pmap to another - * - * => optional function - * void pmap_copy(dst_pmap, src_pmap, dst_addr, len, src_addr) - */ - -/* - * defined as macro in pmap.h - */ - void pmap_enter_special(vaddr_t va, paddr_t pa, vm_prot_t prot) { Index: sys/arch/amd64/include/pmap.h =================================================================== RCS file: /OpenBSD/src/sys/arch/amd64/include/pmap.h,v retrieving revision 1.85 diff -u -p -r1.85 pmap.h --- sys/arch/amd64/include/pmap.h 31 Jan 2023 15:18:54 -0000 1.85 +++ sys/arch/amd64/include/pmap.h 2 Apr 2023 19:23:11 -0000 @@ -369,7 +369,6 @@ extern const long nbpd[], nkptpmax[]; #define pmap_clear_modify(pg) pmap_clear_attrs(pg, PG_M) #define pmap_clear_reference(pg) pmap_clear_attrs(pg, PG_U) -#define pmap_copy(DP,SP,D,L,S) #define pmap_is_modified(pg) pmap_test_attrs(pg, PG_M) #define pmap_is_referenced(pg) pmap_test_attrs(pg, PG_U) #define pmap_move(DP,SP,D,L,S) Index: sys/arch/arm/include/pmap.h =================================================================== RCS file: /OpenBSD/src/sys/arch/arm/include/pmap.h,v retrieving revision 1.53 diff -u -p -r1.53 pmap.h --- sys/arch/arm/include/pmap.h 31 Jan 2023 15:18:54 -0000 1.53 +++ sys/arch/arm/include/pmap.h 2 Apr 2023 19:23:11 -0000 @@ -240,7 +240,6 @@ extern struct pmap kernel_pmap_store; (((pg)->mdpage.pvh_attrs & PVF_REF) != 0) #define pmap_deactivate(p) do { /* nothing */ } while (0) -#define pmap_copy(dp, sp, da, l, sa) do { /* nothing */ } while (0) #define pmap_unuse_final(p) do { /* nothing */ } while (0) #define pmap_remove_holes(vm) do { /* nothing */ } while (0) Index: sys/arch/arm64/arm64/pmap.c =================================================================== RCS file: /OpenBSD/src/sys/arch/arm64/arm64/pmap.c,v retrieving revision 1.93 diff -u -p -r1.93 pmap.c --- sys/arch/arm64/arm64/pmap.c 27 Mar 2023 19:02:47 -0000 1.93 +++ sys/arch/arm64/arm64/pmap.c 2 Apr 2023 19:23:11 -0000 @@ -1927,13 +1927,6 @@ pmap_clear_reference(struct vm_page *pg) } void -pmap_copy(pmap_t dst_pmap, pmap_t src_pmap, vaddr_t dst_addr, - vsize_t len, vaddr_t src_addr) -{ - /* NOOP */ -} - -void pmap_unwire(pmap_t pm, vaddr_t va) { struct pte_desc *pted; Index: sys/arch/hppa/include/pmap.h =================================================================== RCS file: /OpenBSD/src/sys/arch/hppa/include/pmap.h,v retrieving revision 1.54 diff -u -p -r1.54 pmap.h --- sys/arch/hppa/include/pmap.h 24 Jan 2023 16:51:06 -0000 1.54 +++ sys/arch/hppa/include/pmap.h 2 Apr 2023 19:23:11 -0000 @@ -102,7 +102,6 @@ struct vm_page *pmap_unmap_direct(vaddr_ #define pmap_kernel() (&kernel_pmap_store) #define pmap_resident_count(pmap) ((pmap)->pm_stats.resident_count) #define pmap_update(pm) (void)(pm) -#define pmap_copy(dpmap,spmap,da,len,sa) #define PG_PMAP_MOD PG_PMAP0 /* modified */ #define PG_PMAP_REF PG_PMAP1 /* referenced */ Index: sys/arch/i386/i386/pmap.c =================================================================== RCS file: /OpenBSD/src/sys/arch/i386/i386/pmap.c,v retrieving revision 1.220 diff -u -p -r1.220 pmap.c --- sys/arch/i386/i386/pmap.c 30 Jan 2023 10:49:05 -0000 1.220 +++ sys/arch/i386/i386/pmap.c 2 Apr 2023 19:23:11 -0000 @@ -2263,17 +2263,6 @@ pmap_collect(struct pmap *pmap) } /* - * pmap_copy: copy mappings from one pmap to another - * - * => optional function - * void pmap_copy(dst_pmap, src_pmap, dst_addr, len, src_addr) - */ - -/* - * defined as macro in pmap.h - */ - -/* * pmap_enter: enter a mapping into a pmap * * => must be done "now" ... no lazy-evaluation Index: sys/arch/i386/i386/pmapae.c =================================================================== RCS file: /OpenBSD/src/sys/arch/i386/i386/pmapae.c,v retrieving revision 1.68 diff -u -p -r1.68 pmapae.c --- sys/arch/i386/i386/pmapae.c 30 Jan 2023 10:49:05 -0000 1.68 +++ sys/arch/i386/i386/pmapae.c 2 Apr 2023 19:23:11 -0000 @@ -820,8 +820,6 @@ pmap_bootstrap_pae(void) * => we should not be holding any pv_head locks (in case we are forced * to call pmap_steal_ptp()) * => we may need to lock pv_head's if we have to steal a PTP - * => just_try: true if we want a PTP, but not enough to steal one - * from another pmap (e.g. during optional functions like pmap_copy) */ struct vm_page * @@ -1670,17 +1668,6 @@ pmap_unwire_pae(struct pmap *pmap, vaddr } #endif } - -/* - * pmap_copy: copy mappings from one pmap to another - * - * => optional function - * void pmap_copy(dst_pmap, src_pmap, dst_addr, len, src_addr) - */ - -/* - * defined as macro in pmap.h - */ /* * pmap_enter: enter a mapping into a pmap Index: sys/arch/i386/include/pmap.h =================================================================== RCS file: /OpenBSD/src/sys/arch/i386/include/pmap.h,v retrieving revision 1.92 diff -u -p -r1.92 pmap.h --- sys/arch/i386/include/pmap.h 31 Jan 2023 15:18:54 -0000 1.92 +++ sys/arch/i386/include/pmap.h 2 Apr 2023 19:23:11 -0000 @@ -205,7 +205,6 @@ extern struct pool pmap_pv_pool; #define pmap_clear_modify(pg) pmap_clear_attrs(pg, PG_M) #define pmap_clear_reference(pg) pmap_clear_attrs(pg, PG_U) -#define pmap_copy(DP,SP,D,L,S) #define pmap_is_modified(pg) pmap_test_attrs(pg, PG_M) #define pmap_is_referenced(pg) pmap_test_attrs(pg, PG_U) #define pmap_valid_entry(E) ((E) & PG_V) /* is PDE or PTE valid? */ Index: sys/arch/m88k/include/pmap.h =================================================================== RCS file: /OpenBSD/src/sys/arch/m88k/include/pmap.h,v retrieving revision 1.28 diff -u -p -r1.28 pmap.h --- sys/arch/m88k/include/pmap.h 12 Feb 2023 07:02:43 -0000 1.28 +++ sys/arch/m88k/include/pmap.h 2 Apr 2023 19:23:11 -0000 @@ -51,7 +51,6 @@ extern apr_t kernel_apr, userland_apr; #define pmap_resident_count(pmap) ((pmap)->pm_stats.resident_count) #define pmap_wired_count(pmap) ((pmap)->pm_stats.wired_count) -#define pmap_copy(dp,sp,d,l,s) do { /* nothing */ } while (0) #define pmap_update(pmap) do { /* nothing */ } while (0) #define pmap_clear_modify(pg) pmap_unsetbit(pg, PG_M) Index: sys/arch/mips64/mips64/pmap.c =================================================================== RCS file: /OpenBSD/src/sys/arch/mips64/mips64/pmap.c,v retrieving revision 1.124 diff -u -p -r1.124 pmap.c --- sys/arch/mips64/mips64/pmap.c 11 Jan 2023 03:19:52 -0000 1.124 +++ sys/arch/mips64/mips64/pmap.c 2 Apr 2023 19:23:11 -0000 @@ -1407,22 +1407,6 @@ pmap_extract(pmap_t pmap, vaddr_t va, pa } /* - * Copy the range specified by src_addr/len - * from the source map to the range dst_addr/len - * in the destination map. - * - * This routine is only advisory and need not do anything. - */ -void -pmap_copy(pmap_t dst_pmap, pmap_t src_pmap, vaddr_t dst_addr, vsize_t len, - vaddr_t src_addr) -{ - - DPRINTF(PDB_FOLLOW,("pmap_copy(%p, %p, %p, 0x%lx, %p)\n", - dst_pmap, src_pmap, (void *)dst_addr, len, (void *)src_addr)); -} - -/* * pmap_zero_page zeros the specified (machine independent) page. */ void Index: sys/arch/powerpc/include/pmap.h =================================================================== RCS file: /OpenBSD/src/sys/arch/powerpc/include/pmap.h,v retrieving revision 1.63 diff -u -p -r1.63 pmap.h --- sys/arch/powerpc/include/pmap.h 31 Jan 2023 15:18:55 -0000 1.63 +++ sys/arch/powerpc/include/pmap.h 2 Apr 2023 19:23:11 -0000 @@ -148,7 +148,6 @@ int pmap_copyinsn(pmap_t, vaddr_t, uint3 void pmap_real_memory(vaddr_t *start, vsize_t *size); int pte_spill_v(struct pmap *pm, u_int32_t va, u_int32_t dsisr, int exec_fault); -#define pmap_copy(dst_pmap, src_pmap, dst_addr, len, src_addr) ; int reserve_dumppages(caddr_t p); #define pmap_unuse_final(p) /* nothing */ Index: sys/arch/powerpc64/powerpc64/pmap.c =================================================================== RCS file: /OpenBSD/src/sys/arch/powerpc64/powerpc64/pmap.c,v retrieving revision 1.59 diff -u -p -r1.59 pmap.c --- sys/arch/powerpc64/powerpc64/pmap.c 25 Jan 2023 09:53:53 -0000 1.59 +++ sys/arch/powerpc64/powerpc64/pmap.c 2 Apr 2023 19:23:11 -0000 @@ -1047,12 +1047,6 @@ pmap_init(void) pmap_initialized = 1; } -void -pmap_copy(pmap_t dst_pmap, pmap_t src_pmap, vaddr_t dst_addr, - vsize_t len, vaddr_t src_addr) -{ -} - int pmap_enter(pmap_t pm, vaddr_t va, paddr_t pa, vm_prot_t prot, int flags) { Index: sys/arch/riscv64/riscv64/pmap.c =================================================================== RCS file: /OpenBSD/src/sys/arch/riscv64/riscv64/pmap.c,v retrieving revision 1.29 diff -u -p -r1.29 pmap.c --- sys/arch/riscv64/riscv64/pmap.c 11 Jan 2023 11:10:25 -0000 1.29 +++ sys/arch/riscv64/riscv64/pmap.c 2 Apr 2023 19:23:11 -0000 @@ -1862,13 +1862,6 @@ pmap_clear_reference(struct vm_page *pg) } void -pmap_copy(pmap_t dst_pmap, pmap_t src_pmap, vaddr_t dst_addr, - vsize_t len, vaddr_t src_addr) -{ - /* NOOP */ -} - -void pmap_unwire(pmap_t pm, vaddr_t va) { struct pte_desc *pted; Index: sys/arch/sh/include/pmap.h =================================================================== RCS file: /OpenBSD/src/sys/arch/sh/include/pmap.h,v retrieving revision 1.19 diff -u -p -r1.19 pmap.h --- sys/arch/sh/include/pmap.h 8 Mar 2023 04:43:07 -0000 1.19 +++ sys/arch/sh/include/pmap.h 2 Apr 2023 19:23:11 -0000 @@ -65,7 +65,6 @@ void pmap_bootstrap(void); #define pmap_kernel() (&__pmap_kernel) #define pmap_deactivate(pmap) do { /* nothing */ } while (0) #define pmap_update(pmap) do { /* nothing */ } while (0) -#define pmap_copy(dp,sp,d,l,s) do { /* nothing */ } while (0) #define pmap_wired_count(pmap) ((pmap)->pm_stats.wired_count) #define pmap_resident_count(pmap) ((pmap)->pm_stats.resident_count) Index: sys/arch/sparc64/sparc64/pmap.c =================================================================== RCS file: /OpenBSD/src/sys/arch/sparc64/sparc64/pmap.c,v retrieving revision 1.110 diff -u -p -r1.110 pmap.c --- sys/arch/sparc64/sparc64/pmap.c 24 Jan 2023 07:26:34 -0000 1.110 +++ sys/arch/sparc64/sparc64/pmap.c 2 Apr 2023 19:23:11 -0000 @@ -1528,19 +1528,6 @@ pmap_release(struct pmap *pm) } /* - * Copy the range specified by src_addr/len - * from the source map to the range dst_addr/len - * in the destination map. - * - * This routine is only advisory and need not do anything. - */ -void -pmap_copy(struct pmap *dst_pmap, struct pmap *src_pmap, vaddr_t dst_addr, - vsize_t len, vaddr_t src_addr) -{ -} - -/* * Garbage collects the physical map system for * pages which are no longer used. * Success need not be guaranteed -- that is, there Index: sys/uvm/uvm_map.c =================================================================== RCS file: /OpenBSD/src/sys/uvm/uvm_map.c,v retrieving revision 1.313 diff -u -p -r1.313 uvm_map.c --- sys/uvm/uvm_map.c 24 Feb 2023 15:17:48 -0000 1.313 +++ sys/uvm/uvm_map.c 2 Apr 2023 19:23:11 -0000 @@ -3716,15 +3716,6 @@ uvm_mapent_forkshared(struct vmspace *ne old_entry->end - old_entry->start, 0, old_entry->protection, old_entry->max_protection, old_map, old_entry, dead); - /* - * pmap_copy the mappings: this routine is optional - * but if it is there it will reduce the number of - * page faults in the new proc. - */ - if (!UVM_ET_ISHOLE(new_entry)) - pmap_copy(new_map->pmap, old_map->pmap, new_entry->start, - (new_entry->end - new_entry->start), new_entry->start); - return (new_entry); } @@ -3805,8 +3796,6 @@ uvm_mapent_forkcopy(struct vmspace *new_ * resolve all copy-on-write faults now * (note that there is nothing to do if * the old mapping does not have an amap). - * XXX: is it worthwhile to bother with - * pmap_copy in this case? */ if (old_entry->aref.ar_amap) amap_cow_now(new_map, new_entry); @@ -3821,12 +3810,7 @@ uvm_mapent_forkcopy(struct vmspace *new_ * fork operation. * * if we do not write-protect the parent, then - * we must be sure to write-protect the child - * after the pmap_copy() operation. - * - * XXX: pmap_copy should have some way of telling - * us that it didn't do anything so we can avoid - * calling pmap_protect needlessly. + * we must be sure to write-protect the child. */ if (!UVM_ET_ISNEEDSCOPY(old_entry)) { if (old_entry->max_protection & PROT_WRITE) { @@ -3854,15 +3838,6 @@ uvm_mapent_forkcopy(struct vmspace *new_ else protect_child = FALSE; } - /* - * copy the mappings - * XXX: need a way to tell if this does anything - */ - if (!UVM_ET_ISHOLE(new_entry)) - pmap_copy(new_map->pmap, old_map->pmap, - new_entry->start, - (old_entry->end - old_entry->start), - old_entry->start); /* protect the child's mappings if necessary */ if (protect_child) { @@ -4526,13 +4501,6 @@ uvm_map_extract(struct vm_map *srcmap, v newentry->protection != PROT_NONE) newentry->protection = newentry->max_protection; newentry->protection &= ~PROT_EXEC; - - /* - * Step 2: perform pmap copy. - * (Doing this in the loop saves one RB traversal.) - */ - pmap_copy(kernel_map->pmap, srcmap->pmap, - cp_start - start + dstaddr, cp_len, cp_start); } pmap_update(kernel_map->pmap); Index: sys/uvm/uvm_pmap.h =================================================================== RCS file: /OpenBSD/src/sys/uvm/uvm_pmap.h,v retrieving revision 1.32 diff -u -p -r1.32 uvm_pmap.h --- sys/uvm/uvm_pmap.h 1 Jan 2023 19:49:18 -0000 1.32 +++ sys/uvm/uvm_pmap.h 2 Apr 2023 19:23:11 -0000 @@ -128,9 +128,6 @@ boolean_t pmap_clear_reference(struct v #if !defined(pmap_collect) && defined(__HAVE_PMAP_COLLECT) void pmap_collect(pmap_t); #endif -#if !defined(pmap_copy) -void pmap_copy(pmap_t, pmap_t, vaddr_t, vsize_t, vaddr_t); -#endif #if !defined(pmap_copy_page) void pmap_copy_page(struct vm_page *, struct vm_page *); #endif