With the introduction of the PMAP_PREFER_{ALIGN,OFFSET} macros a long
time ago, there are actually no more uses of the PMAP_PREFER macro left
in the kernel.

The following diff removes PMAP_PREFER() but keeps a simple #define for
it to let uvm knows the PMAP_PREFER_{ALIGN,OFFSET} macros are available.

It might be worth renaming that enabling macro to __HAVE_PMAP_PREFER to
mimic existing macros such as __HAVE_PMAP_{COLLECT,DIRECT}... but then
PMAP_GROWKERNEL does not start with __HAVE so there is already a lack of
consistency in this area.

Note that this diff actually removes PMAP_PREFER on armv7, since none
of the targeted v7 platforms actually end up having virtual aliasing.

Tested on all affected PMAP_DIRECT platforms (and armv7 which is no
longer part of the club).

Miod

Index: sys/arch/arm/arm/pmap7.c
===================================================================
RCS file: /OpenBSD/src/sys/arch/arm/arm/pmap7.c,v
retrieving revision 1.65
diff -u -p -u -p -r1.65 pmap7.c
--- sys/arch/arm/arm/pmap7.c    12 Sep 2022 19:28:19 -0000      1.65
+++ sys/arch/arm/arm/pmap7.c    25 Dec 2022 16:53:14 -0000
@@ -2848,20 +2848,3 @@ pmap_pte_init_armv7(void)
        if ((id_mmfr3 & 0x00f00000) == 0x00100000)
                pmap_needs_pte_sync = 0;
 }
-
-uint32_t pmap_alias_dist;
-uint32_t pmap_alias_bits;
-
-vaddr_t
-pmap_prefer(vaddr_t foff, vaddr_t va)
-{
-       long d, m;
-
-       m = pmap_alias_dist;
-       if (m == 0)             /* m=0 => no cache aliasing */
-               return va;
-
-       d = foff - va;
-       d &= (m - 1);
-       return va + d;
-}
Index: sys/arch/arm/include/pmap.h
===================================================================
RCS file: /OpenBSD/src/sys/arch/arm/include/pmap.h,v
retrieving revision 1.51
diff -u -p -u -p -r1.51 pmap.h
--- sys/arch/arm/include/pmap.h 12 Sep 2022 19:28:19 -0000      1.51
+++ sys/arch/arm/include/pmap.h 25 Dec 2022 16:53:14 -0000
@@ -613,23 +613,6 @@ l2pte_is_writeable(pt_entry_t pte, struc
 #define        L2_L_MAPPABLE_P(va, pa, size)                                   
\
        ((((va) | (pa)) & L2_L_OFFSET) == 0 && (size) >= L2_L_SIZE)
 
-#ifndef _LOCORE
-/* pmap_prefer bits for VIPT ARMv7 */
-#define PMAP_PREFER(fo, ap)    pmap_prefer((fo), (ap))
-vaddr_t        pmap_prefer(vaddr_t, vaddr_t);
-
-extern uint32_t pmap_alias_dist;
-extern uint32_t pmap_alias_bits;
-
-/* pmap prefer alias alignment. */
-#define PMAP_PREFER_ALIGN()    (pmap_alias_dist)
-/* pmap prefer offset withing alignment. */
-#define PMAP_PREFER_OFFSET(of)                                         \
-    (PMAP_PREFER_ALIGN() == 0 ? 0 : ((of) & (PMAP_PREFER_ALIGN() - 1)))
-
-
-#endif /* _LOCORE */
-
 #endif /* _KERNEL */
 
 #ifndef _LOCORE
Index: sys/arch/hppa/include/cpu.h
===================================================================
RCS file: /OpenBSD/src/sys/arch/hppa/include/cpu.h,v
retrieving revision 1.97
diff -u -p -u -p -r1.97 cpu.h
--- sys/arch/hppa/include/cpu.h 6 Dec 2022 00:40:09 -0000       1.97
+++ sys/arch/hppa/include/cpu.h 25 Dec 2022 16:53:14 -0000
@@ -191,7 +191,6 @@ extern int cpu_hvers;
  */
 
 #define        HPPA_PGALIAS    0x00400000
-#define        HPPA_PGAMASK    0xffc00000
 #define        HPPA_PGAOFF     0x003fffff
 
 #define        HPPA_IOBEGIN    0xf0000000
Index: sys/arch/hppa/include/pmap.h
===================================================================
RCS file: /OpenBSD/src/sys/arch/hppa/include/pmap.h,v
retrieving revision 1.52
diff -u -p -u -p -r1.52 pmap.h
--- sys/arch/hppa/include/pmap.h        25 Oct 2022 18:44:36 -0000      1.52
+++ sys/arch/hppa/include/pmap.h        25 Dec 2022 16:53:14 -0000
@@ -91,16 +91,7 @@ struct vm_page *pmap_unmap_direct(vaddr_
  * according to the parisc manual aliased va's should be
  * different by high 12 bits only.
  */
-#define        PMAP_PREFER(o,h)        pmap_prefer(o, h)
-static __inline__ vaddr_t
-pmap_prefer(vaddr_t offs, vaddr_t hint)
-{
-       vaddr_t pmap_prefer_hint = (hint & HPPA_PGAMASK) | (offs & HPPA_PGAOFF);
-       if (pmap_prefer_hint < hint)
-               pmap_prefer_hint += HPPA_PGALIAS;
-       return pmap_prefer_hint;
-}
-
+#define        PMAP_PREFER
 /* pmap prefer alignment */
 #define PMAP_PREFER_ALIGN()    (HPPA_PGALIAS)
 /* pmap prefer offset within alignment */
Index: sys/arch/mips64/include/pmap.h
===================================================================
RCS file: /OpenBSD/src/sys/arch/mips64/include/pmap.h,v
retrieving revision 1.50
diff -u -p -u -p -r1.50 pmap.h
--- sys/arch/mips64/include/pmap.h      10 Sep 2022 20:35:28 -0000      1.50
+++ sys/arch/mips64/include/pmap.h      25 Dec 2022 16:53:14 -0000
@@ -149,8 +149,7 @@ extern      struct pmap *const kernel_pmap_pt
 
 #define        PMAP_STEAL_MEMORY               /* Enable 'stealing' during 
boot */
 
-#define        PMAP_PREFER(pa, va)             pmap_prefer(pa, va)
-
+#define        PMAP_PREFER
 extern vaddr_t pmap_prefer_mask;
 /* pmap prefer alignment */
 #define        PMAP_PREFER_ALIGN()                                             
\
@@ -159,7 +158,6 @@ extern vaddr_t pmap_prefer_mask;
 #define        PMAP_PREFER_OFFSET(of)          ((of) & pmap_prefer_mask)
 
 void   pmap_bootstrap(void);
-vaddr_t        pmap_prefer(vaddr_t, vaddr_t);
 int    pmap_emulate_modify(pmap_t, vaddr_t);
 void   pmap_page_cache(vm_page_t, u_int);
 
Index: sys/arch/mips64/mips64/pmap.c
===================================================================
RCS file: /OpenBSD/src/sys/arch/mips64/mips64/pmap.c,v
retrieving revision 1.121
diff -u -p -u -p -r1.121 pmap.c
--- sys/arch/mips64/mips64/pmap.c       13 Sep 2021 12:19:10 -0000      1.121
+++ sys/arch/mips64/mips64/pmap.c       25 Dec 2022 16:53:14 -0000
@@ -1406,19 +1406,6 @@ pmap_extract(pmap_t pmap, vaddr_t va, pa
 }
 
 /*
- * Find first virtual address >= *vap that
- * will not cause cache aliases.
- */
-vaddr_t
-pmap_prefer(paddr_t foff, vaddr_t va)
-{
-       if (pmap_prefer_mask != 0)
-               va += (foff - va) & pmap_prefer_mask;
-
-       return va;
-}
-
-/*
  *     Copy the range specified by src_addr/len
  *     from the source map to the range dst_addr/len
  *     in the destination map.
Index: sys/arch/sh/include/pmap.h
===================================================================
RCS file: /OpenBSD/src/sys/arch/sh/include/pmap.h,v
retrieving revision 1.16
diff -u -p -u -p -r1.16 pmap.h
--- sys/arch/sh/include/pmap.h  12 Sep 2022 19:33:34 -0000      1.16
+++ sys/arch/sh/include/pmap.h  25 Dec 2022 16:53:14 -0000
@@ -75,12 +75,11 @@ pmap_remove_all(struct pmap *pmap)
 }
 
 /*
- * pmap_prefer() helps to avoid virtual cache aliases on SH4 CPUs
+ * Avoid virtual cache aliases on SH4 CPUs
  * which have the virtually-indexed cache.
  */
 #ifdef SH4
-#define        PMAP_PREFER(pa, va)             pmap_prefer((pa), (va))
-vaddr_t        pmap_prefer(vaddr_t, vaddr_t);
+#define        PMAP_PREFER
 vaddr_t        pmap_prefer_align(void);
 vaddr_t        pmap_prefer_offset(vaddr_t);
 
Index: sys/arch/sh/sh/pmap.c
===================================================================
RCS file: /OpenBSD/src/sys/arch/sh/sh/pmap.c,v
retrieving revision 1.29
diff -u -p -u -p -r1.29 pmap.c
--- sys/arch/sh/sh/pmap.c       12 Sep 2022 19:33:34 -0000      1.29
+++ sys/arch/sh/sh/pmap.c       25 Dec 2022 16:53:14 -0000
@@ -891,21 +891,6 @@ pmap_clear_modify(struct vm_page *pg)
 
 #ifdef SH4
 /*
- * pmap_prefer(vaddr_t foff, vaddr_t *vap)
- *
- * Find first virtual address >= *vap that doesn't cause
- * a virtual cache alias against vaddr_t foff.
- */
-vaddr_t
-pmap_prefer(vaddr_t foff, vaddr_t va)
-{
-       if (SH_HAS_VIRTUAL_ALIAS)
-               va += ((foff - va) & sh_cache_prefer_mask);
-
-       return va;
-}
-
-/*
  * pmap_prefer_align()
  *
  * Return virtual cache alignment.
Index: sys/arch/sparc64/include/pmap.h
===================================================================
RCS file: /OpenBSD/src/sys/arch/sparc64/include/pmap.h,v
retrieving revision 1.32
diff -u -p -u -p -r1.32 pmap.h
--- sys/arch/sparc64/include/pmap.h     10 Sep 2022 20:35:29 -0000      1.32
+++ sys/arch/sparc64/include/pmap.h     25 Dec 2022 16:53:14 -0000
@@ -167,9 +167,9 @@ extern struct pmap kernel_pmap_;
 #define pmap_proc_iflush(p,va,len)     /* nothing */
 
 void pmap_bootstrap(u_long, u_long, u_int, u_int);
-/* make sure all page mappings are modulo 16K to prevent d$ aliasing */
-#define PMAP_PREFER(pa, va)    ((va) + (((va) ^ (pa)) & VA_ALIAS_MASK))
 
+/* make sure all page mappings are modulo 16K to prevent d$ aliasing */
+#define PMAP_PREFER
 /* pmap prefer alignment */
 #define PMAP_PREFER_ALIGN()    (VA_ALIAS_ALIGN)
 /* pmap prefer offset in alignment */
Index: sys/uvm/uvm_pmap.h
===================================================================
RCS file: /OpenBSD/src/sys/uvm/uvm_pmap.h,v
retrieving revision 1.31
diff -u -p -u -p -r1.31 uvm_pmap.h
--- sys/uvm/uvm_pmap.h  10 Sep 2022 20:35:29 -0000      1.31
+++ sys/uvm/uvm_pmap.h  25 Dec 2022 16:53:14 -0000
@@ -104,7 +104,6 @@ typedef struct pmap_statistics      *pmap_sta
 #ifndef PMAP_PREFER
 #define PMAP_PREFER_ALIGN()    0
 #define PMAP_PREFER_OFFSET(off)        0
-#define PMAP_PREFER(addr, off) (addr)
 #endif
 
 #ifdef _KERNEL

Reply via email to