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);
 }
 
 /*

Reply via email to