libkvm already figures out the pagesize of the machine in _kvm_open(), and then allows the machine-dependent _kvm_initvtop() to override it if need be (thereby, handling sparc). Thus we can avoid the PAGE_SIZE, PAGE_SHIFT, ... variables.
Seems to be working ... wonder if I missed some relevant testing. Index: kvm_alpha.c =================================================================== RCS file: /cvs/src/lib/libkvm/kvm_alpha.c,v retrieving revision 1.14 diff -u -p -u -r1.14 kvm_alpha.c --- kvm_alpha.c 20 Mar 2006 15:11:48 -0000 1.14 +++ kvm_alpha.c 23 Mar 2013 16:39:53 -0000 @@ -113,10 +113,6 @@ _kvm_kvatop(kvm_t *kd, u_long va, paddr_ vm = kd->vmst; page_off = va & (cpu_kh->page_size - 1); -#ifndef PAGE_SHIFT -#define PAGE_SHIFT vm->page_shift -#endif - if (va >= ALPHA_K0SEG_BASE && va <= ALPHA_K0SEG_END) { /* * Direct-mapped address: just convert it. Index: kvm_amd64.c =================================================================== RCS file: /cvs/src/lib/libkvm/kvm_amd64.c,v retrieving revision 1.9 diff -u -p -u -r1.9 kvm_amd64.c --- kvm_amd64.c 5 Dec 2012 23:20:02 -0000 1.9 +++ kvm_amd64.c 23 Mar 2013 16:39:25 -0000 @@ -96,11 +96,11 @@ _kvm_kvatop(kvm_t *kd, u_long va, paddr_ return (0); } - page_off = va & PAGE_MASK; + page_off = va & (kd->nbpg - 1); if (va >= PMAP_DIRECT_BASE && va <= PMAP_DIRECT_END) { *pa = va - PMAP_DIRECT_BASE; - return (int)(PAGE_SIZE - page_off); + return (int)(kd->nbpg - page_off); } cpu_kh = kd->cpu_data; @@ -177,7 +177,7 @@ _kvm_kvatop(kvm_t *kd, u_long va, paddr_ goto lose; } *pa = (pte & PG_FRAME) + page_off; - return (int)(PAGE_SIZE - page_off); + return (int)(kd->nbpg - page_off); lose: *pa = (u_long)~0L; Index: kvm_arm.c =================================================================== RCS file: /cvs/src/lib/libkvm/kvm_arm.c,v retrieving revision 1.7 diff -u -p -u -r1.7 kvm_arm.c --- kvm_arm.c 20 Mar 2013 14:46:45 -0000 1.7 +++ kvm_arm.c 23 Mar 2013 16:39:19 -0000 @@ -106,7 +106,7 @@ _kvm_kvatop(kvm_t *kd, u_long va, paddr_ va < cpup->kernelbase + cpup->kerneloffs + cpup->staticsize) { *pa = (va - cpup->kernelbase) + (paddr_t)cpup->ram_segs[0].start; - return (int)(PAGE_SIZE - (va & PAGE_MASK)); + return (int)(kd->nbpg - (va & (kd->nbpg - 1))); } _kvm_err(kd, 0, "kvm_vatop: va %x unreachable", va); Index: kvm_hppa.c =================================================================== RCS file: /cvs/src/lib/libkvm/kvm_hppa.c,v retrieving revision 1.7 diff -u -p -u -r1.7 kvm_hppa.c --- kvm_hppa.c 28 Jul 2009 12:56:25 -0000 1.7 +++ kvm_hppa.c 23 Mar 2013 16:39:13 -0000 @@ -63,7 +63,7 @@ _kvm_kvatop(kvm_t *kd, u_long va, paddr_ /* XXX this only really works for the kernel image only */ *pa = va; - return (PAGE_SIZE - (va & PAGE_MASK)); + return (kd->nbpg - (va & (kd->nbpg - 1))); } /* Index: kvm_hppa64.c =================================================================== RCS file: /cvs/src/lib/libkvm/kvm_hppa64.c,v retrieving revision 1.1 diff -u -p -u -r1.1 kvm_hppa64.c --- kvm_hppa64.c 9 Jul 2011 00:29:59 -0000 1.1 +++ kvm_hppa64.c 23 Mar 2013 16:39:05 -0000 @@ -63,7 +63,7 @@ _kvm_kvatop(kvm_t *kd, u_long va, paddr_ /* XXX this only really works for the kernel image only */ *pa = va; - return (PAGE_SIZE - (va & PAGE_MASK)); + return (kd->nbpg - (va & (kd->nbpg - 1))); } /* Index: kvm_i386.c =================================================================== RCS file: /cvs/src/lib/libkvm/kvm_i386.c,v retrieving revision 1.22 diff -u -p -u -r1.22 kvm_i386.c --- kvm_i386.c 9 Jul 2012 08:43:10 -0000 1.22 +++ kvm_i386.c 23 Mar 2013 16:38:56 -0000 @@ -101,10 +101,10 @@ _kvm_initvtop(kvm_t *kd) (off_t)_kvm_pa2off(kd, nl[0].n_value - KERNBASE)) != sizeof pa) goto invalid; - vm->PTD = (pd_entry_t *)_kvm_malloc(kd, PAGE_SIZE); + vm->PTD = (pd_entry_t *)_kvm_malloc(kd, kd->nbpg); - if (_kvm_pread(kd, kd->pmfd, vm->PTD, PAGE_SIZE, - (off_t)_kvm_pa2off(kd, pa)) != PAGE_SIZE) + if (_kvm_pread(kd, kd->pmfd, vm->PTD, kd->nbpg, + (off_t)_kvm_pa2off(kd, pa)) != kd->nbpg) goto invalid; return (0); @@ -138,7 +138,7 @@ _kvm_kvatop(kvm_t *kd, u_long va, paddr_ } vm = kd->vmst; - offset = va & PAGE_MASK; + offset = va & (kd->nbpg - 1); /* * If we are initializing (kernel page table descriptor pointer @@ -146,7 +146,7 @@ _kvm_kvatop(kvm_t *kd, u_long va, paddr_ */ if (vm->PTD == NULL) { *pa = va; - return (PAGE_SIZE - (int)offset); + return (kd->nbpg - (int)offset); } if ((vm->PTD[pdei(va)] & PG_V) == 0) goto invalid; @@ -160,7 +160,7 @@ _kvm_kvatop(kvm_t *kd, u_long va, paddr_ goto invalid; *pa = (pte & PG_FRAME) + offset; - return (PAGE_SIZE - (int)offset); + return (kd->nbpg - (int)offset); invalid: _kvm_err(kd, 0, "invalid address (%lx)", va); Index: kvm_m68k.c =================================================================== RCS file: /cvs/src/lib/libkvm/kvm_m68k.c,v retrieving revision 1.20 diff -u -p -u -r1.20 kvm_m68k.c --- kvm_m68k.c 9 Jul 2012 08:43:10 -0000 1.20 +++ kvm_m68k.c 23 Mar 2013 16:40:32 -0000 @@ -67,8 +67,8 @@ #include <machine/kcore.h> #ifndef btop -#define btop(x) (((unsigned)(x)) >> PAGE_SHIFT) /* XXX */ -#define ptob(x) ((caddr_t)((x) << PAGE_SHIFT)) /* XXX */ +#define btop(x) (((unsigned)(x)) / kd->nbpg) /* XXX */ +#define ptob(x) ((caddr_t)((x) * kd->nbpg)) /* XXX */ #endif void @@ -97,7 +97,7 @@ _kvm_vatop(kvm_t *kd, st_entry_t *sta, u _kvm_err(kd, 0, "vatop called in live kernel!"); return (0); } - offset = va & PAGE_MASK; + offset = va & (kd->nbpg - 1); cpu_kh = kd->cpu_data; /* * If we are initializing (kernel segment table pointer not yet set) @@ -105,7 +105,7 @@ _kvm_vatop(kvm_t *kd, st_entry_t *sta, u */ if (cpu_kh->sysseg_pa == 0) { *pa = va + cpu_kh->kernel_pa; - return (PAGE_SIZE - offset); + return (kd->nbpg - offset); } if (cpu_kh->mmutype == MMU_68040 || cpu_kh->mmutype == MMU_68060) { st_entry_t *sta2; @@ -174,7 +174,7 @@ _kvm_vatop(kvm_t *kd, st_entry_t *sta, u } *pa = addr + offset; - return (PAGE_SIZE - offset); + return (kd->nbpg - offset); invalid: _kvm_err(kd, 0, "invalid address (%lx)", va); return (0); Index: kvm_sh.c =================================================================== RCS file: /cvs/src/lib/libkvm/kvm_sh.c,v retrieving revision 1.5 diff -u -p -u -r1.5 kvm_sh.c --- kvm_sh.c 20 Mar 2013 14:46:45 -0000 1.5 +++ kvm_sh.c 23 Mar 2013 16:40:12 -0000 @@ -56,9 +56,9 @@ _kvm_initvtop(kvm_t *kd) #define __PMAP_PTP_N 512 /* # of page table page maps 2GB. */ /* Stolen from sys/arch/sh/sh/pmap.c */ #define __PMAP_PTP_SHIFT 22 -#define __PMAP_PTP_PG_N (PAGE_SIZE / sizeof(pt_entry_t)) +#define __PMAP_PTP_PG_N (kd->nbpg / sizeof(pt_entry_t)) #define __PMAP_PTP_INDEX(va) (((va) >> __PMAP_PTP_SHIFT) & (__PMAP_PTP_N - 1)) -#define __PMAP_PTP_OFSET(va) ((va >> PAGE_SHIFT) & (__PMAP_PTP_PG_N - 1)) +#define __PMAP_PTP_OFSET(va) ((va / kd->nbpg) & (__PMAP_PTP_PG_N - 1)) int _kvm_kvatop(kvm_t *kd, u_long va, paddr_t *pa) @@ -128,8 +128,8 @@ _kvm_kvatop(kvm_t *kd, u_long va, paddr_ goto bad; } - *pa = (l2pte & PG_PPN) | (va & PAGE_MASK); - return (PAGE_SIZE - (va & PAGE_MASK)); + *pa = (l2pte & PG_PPN) | (va & (kd->nbpg - 1)); + return (kd->nbpg - (va & (kd->nbpg - 1))); } /* Index: kvm_sparc64.c =================================================================== RCS file: /cvs/src/lib/libkvm/kvm_sparc64.c,v retrieving revision 1.8 diff -u -p -u -r1.8 kvm_sparc64.c --- kvm_sparc64.c 5 Dec 2012 23:20:02 -0000 1.8 +++ kvm_sparc64.c 23 Mar 2013 19:39:18 -0000 @@ -88,8 +88,6 @@ _kvm_freevtop(kvm_t *kd) int _kvm_initvtop(kvm_t *kd) { - kd->nbpg = 0x2000; - return (0); } Index: kvm_vax.c =================================================================== RCS file: /cvs/src/lib/libkvm/kvm_vax.c,v retrieving revision 1.13 diff -u -p -u -r1.13 kvm_vax.c --- kvm_vax.c 19 Jun 2006 20:25:49 -0000 1.13 +++ kvm_vax.c 23 Mar 2013 16:38:23 -0000 @@ -109,9 +109,9 @@ _kvm_kvatop(kvm_t *kd, u_long va, paddr_ return (0); } - ofs = va & PAGE_MASK; + ofs = va & (kd->nbpg - 1); *pa = ((pte & PG_FRAME) << VAX_PGSHIFT) | ofs; - return (int)(PAGE_SIZE - ofs); + return (int)(kd->nbpg - ofs); } /*