> Date: Sun, 2 Apr 2023 19:29:02 +0000
> From: Miod Vallat <m...@online.fr>
> 
> 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.

I'm fine with removing this.  Just wonder if this was ever implemented
for one of the architectures that we no longer support and whether
there was any effect on performance.

> 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
> 
> 

Reply via email to