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