[BACK]Return to pmap_motorola.c CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / sys / arch / m68k / m68k

Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.

Diff for /src/sys/arch/m68k/m68k/pmap_motorola.c between version 1.17 and 1.17.2.1

version 1.17, 2005/06/03 08:55:33 version 1.17.2.1, 2006/12/30 20:46:25
Line 276  pt_entry_t *caddr2_pte; /* PTE for CADDR
Line 276  pt_entry_t *caddr2_pte; /* PTE for CADDR
   
 struct pool     pmap_pmap_pool; /* memory pool for pmap structures */  struct pool     pmap_pmap_pool; /* memory pool for pmap structures */
   
 struct pv_entry *pmap_alloc_pv __P((void));  struct pv_entry *pmap_alloc_pv(void);
 void    pmap_free_pv __P((struct pv_entry *));  void    pmap_free_pv(struct pv_entry *);
 void    pmap_collect_pv __P((void));  void    pmap_collect_pv(void);
 #ifdef COMPAT_HPUX  #ifdef COMPAT_HPUX
 int     pmap_mapmulti __P((pmap_t, vaddr_t));  int     pmap_mapmulti(pmap_t, vaddr_t);
 #endif /* COMPAT_HPUX */  #endif /* COMPAT_HPUX */
   
 #define PAGE_IS_MANAGED(pa)     (pmap_initialized &&                    \  #define PAGE_IS_MANAGED(pa)     (pmap_initialized &&                    \
Line 288  int pmap_mapmulti __P((pmap_t, vaddr_t))
Line 288  int pmap_mapmulti __P((pmap_t, vaddr_t))
   
 #define pa_to_pvh(pa)                                                   \  #define pa_to_pvh(pa)                                                   \
 ({                                                                      \  ({                                                                      \
         int bank_, pg_;                                                 \          int bank_, pg_ = 0;     /* XXX gcc4 -Wuninitialized */          \
                                                                         \                                                                          \
         bank_ = vm_physseg_find(atop((pa)), &pg_);                      \          bank_ = vm_physseg_find(atop((pa)), &pg_);                      \
         &vm_physmem[bank_].pmseg.pvent[pg_];                            \          &vm_physmem[bank_].pmseg.pvent[pg_];                            \
Line 296  int pmap_mapmulti __P((pmap_t, vaddr_t))
Line 296  int pmap_mapmulti __P((pmap_t, vaddr_t))
   
 #define pa_to_attribute(pa)                                             \  #define pa_to_attribute(pa)                                             \
 ({                                                                      \  ({                                                                      \
         int bank_, pg_;                                                 \          int bank_, pg_ = 0;     /* XXX gcc4 -Wuninitialized */          \
                                                                         \                                                                          \
         bank_ = vm_physseg_find(atop((pa)), &pg_);                      \          bank_ = vm_physseg_find(atop((pa)), &pg_);                      \
         &vm_physmem[bank_].pmseg.attrs[pg_];                            \          &vm_physmem[bank_].pmseg.attrs[pg_];                            \
Line 305  int pmap_mapmulti __P((pmap_t, vaddr_t))
Line 305  int pmap_mapmulti __P((pmap_t, vaddr_t))
 /*  /*
  * Internal routines   * Internal routines
  */   */
 void    pmap_remove_mapping __P((pmap_t, vaddr_t, pt_entry_t *, int));  void    pmap_remove_mapping(pmap_t, vaddr_t, pt_entry_t *, int);
 void    pmap_do_remove __P((pmap_t, vaddr_t, vaddr_t, int));  void    pmap_do_remove(pmap_t, vaddr_t, vaddr_t, int);
 boolean_t pmap_testbit __P((paddr_t, int));  boolean_t pmap_testbit(paddr_t, int);
 boolean_t pmap_changebit __P((paddr_t, int, int));  boolean_t pmap_changebit(paddr_t, int, int);
 void    pmap_enter_ptpage       __P((pmap_t, vaddr_t));  boolean_t pmap_enter_ptpage(pmap_t, vaddr_t, boolean_t);
 void    pmap_ptpage_addref __P((vaddr_t));  void    pmap_ptpage_addref(vaddr_t);
 int     pmap_ptpage_delref __P((vaddr_t));  int     pmap_ptpage_delref(vaddr_t);
 void    pmap_collect1   __P((pmap_t, paddr_t, paddr_t));  void    pmap_collect1(pmap_t, paddr_t, paddr_t);
 void    pmap_pinit __P((pmap_t));  void    pmap_pinit(pmap_t);
 void    pmap_release __P((pmap_t));  void    pmap_release(pmap_t);
   
 #ifdef DEBUG  #ifdef DEBUG
 void pmap_pvdump        __P((paddr_t));  void pmap_pvdump(paddr_t);
 void pmap_check_wiring  __P((const char *, vaddr_t));  void pmap_check_wiring(const char *, vaddr_t);
 #endif  #endif
   
 /* pmap_remove_mapping flags */  /* pmap_remove_mapping flags */
Line 355  pmap_virtual_space(vstartp, vendp)
Line 355  pmap_virtual_space(vstartp, vendp)
  *      Note: no locking is necessary in this function.   *      Note: no locking is necessary in this function.
  */   */
 void  void
 pmap_init()  pmap_init(void)
 {  {
         vaddr_t         addr, addr2;          vaddr_t         addr, addr2;
         vsize_t         s;          vsize_t         s;
Line 395  pmap_init()
Line 395  pmap_init()
         if (addr == 0)          if (addr == 0)
                 panic("pmap_init: can't allocate data structures");                  panic("pmap_init: can't allocate data structures");
   
         Segtabzero = (st_entry_t *) addr;          Segtabzero = (st_entry_t *)addr;
         (void) pmap_extract(pmap_kernel(), addr, (paddr_t *)(void *)&Segtabzeropa);          (void)pmap_extract(pmap_kernel(), addr,
               (paddr_t *)(void *)&Segtabzeropa);
         addr += M68K_STSIZE;          addr += M68K_STSIZE;
   
         pv_table = (struct pv_entry *) addr;          pv_table = (struct pv_entry *) addr;
         addr += page_cnt * sizeof(struct pv_entry);          addr += page_cnt * sizeof(struct pv_entry);
   
         pmap_attributes = (char *) addr;          pmap_attributes = (char *)addr;
   
         PMAP_DPRINTF(PDB_INIT, ("pmap_init: %lx bytes: page_cnt %x s0 %p(%p) "          PMAP_DPRINTF(PDB_INIT, ("pmap_init: %lx bytes: page_cnt %x s0 %p(%p) "
             "tbl %p atr %p\n",              "tbl %p atr %p\n",
Line 436  pmap_init()
Line 437  pmap_init()
          */           */
         addr = 0;          addr = 0;
         rv = uvm_map(kernel_map, &addr, s, NULL, UVM_UNKNOWN_OFFSET, 0,          rv = uvm_map(kernel_map, &addr, s, NULL, UVM_UNKNOWN_OFFSET, 0,
                      UVM_MAPFLAG(UVM_PROT_NONE, UVM_PROT_NONE, UVM_INH_NONE,              UVM_MAPFLAG(UVM_PROT_NONE, UVM_PROT_NONE, UVM_INH_NONE,
                                  UVM_ADV_RANDOM, UVM_FLAG_NOMERGE));              UVM_ADV_RANDOM, UVM_FLAG_NOMERGE));
         if (rv != 0 || (addr + s) >= (vaddr_t)Sysmap)          if (rv != 0 || (addr + s) >= (vaddr_t)Sysmap)
                 panic("pmap_init: kernel PT too small");                  panic("pmap_init: kernel PT too small");
         uvm_unmap(kernel_map, addr, addr + s);          uvm_unmap(kernel_map, addr, addr + s);
Line 543  pmap_init()
Line 544  pmap_init()
  *      Allocate a pv_entry.   *      Allocate a pv_entry.
  */   */
 struct pv_entry *  struct pv_entry *
 pmap_alloc_pv()  pmap_alloc_pv(void)
 {  {
         struct pv_page *pvp;          struct pv_page *pvp;
         struct pv_entry *pv;          struct pv_entry *pv;
Line 583  pmap_alloc_pv()
Line 584  pmap_alloc_pv()
  *      Free a pv_entry.   *      Free a pv_entry.
  */   */
 void  void
 pmap_free_pv(pv)  pmap_free_pv(struct pv_entry *pv)
         struct pv_entry *pv;  
 {  {
         struct pv_page *pvp;          struct pv_page *pvp;
   
         pvp = (struct pv_page *) trunc_page((vaddr_t)pv);          pvp = (struct pv_page *)trunc_page((vaddr_t)pv);
         switch (++pvp->pvp_pgi.pgi_nfree) {          switch (++pvp->pvp_pgi.pgi_nfree) {
         case 1:          case 1:
                 TAILQ_INSERT_TAIL(&pv_page_freelist, pvp, pvp_pgi.pgi_list);                  TAILQ_INSERT_TAIL(&pv_page_freelist, pvp, pvp_pgi.pgi_list);
Line 611  pmap_free_pv(pv)
Line 611  pmap_free_pv(pv)
  *      Perform compaction on the PV list, called via pmap_collect().   *      Perform compaction on the PV list, called via pmap_collect().
  */   */
 void  void
 pmap_collect_pv()  pmap_collect_pv(void)
 {  {
         struct pv_page_list pv_page_collectlist;          struct pv_page_list pv_page_collectlist;
         struct pv_page *pvp, *npvp;          struct pv_page *pvp, *npvp;
Line 651  pmap_collect_pv()
Line 651  pmap_collect_pv()
                                 npv = pvp->pvp_pgi.pgi_freelist;                                  npv = pvp->pvp_pgi.pgi_freelist;
 #ifdef DIAGNOSTIC  #ifdef DIAGNOSTIC
                                 if (npv == 0)                                  if (npv == 0)
                                         panic("pmap_collect_pv: pgi_nfree inconsistent");                                          panic("pmap_collect_pv: "
                                               "pgi_nfree inconsistent");
 #endif  #endif
                                 pvp->pvp_pgi.pgi_freelist = npv->pv_next;                                  pvp->pvp_pgi.pgi_freelist = npv->pv_next;
                                 *npv = *pv;                                  *npv = *pv;
Line 681  pmap_collect_pv()
Line 682  pmap_collect_pv()
  *      Note: THIS FUNCTION IS DEPRECATED, AND SHOULD BE REMOVED!   *      Note: THIS FUNCTION IS DEPRECATED, AND SHOULD BE REMOVED!
  */   */
 vaddr_t  vaddr_t
 pmap_map(va, spa, epa, prot)  pmap_map(vaddr_t va, paddr_t spa, paddr_t epa, int prot)
         vaddr_t va;  
         paddr_t spa, epa;  
         int prot;  
 {  {
   
         PMAP_DPRINTF(PDB_FOLLOW,          PMAP_DPRINTF(PDB_FOLLOW,
Line 696  pmap_map(va, spa, epa, prot)
Line 694  pmap_map(va, spa, epa, prot)
                 spa += PAGE_SIZE;                  spa += PAGE_SIZE;
         }          }
         pmap_update(pmap_kernel());          pmap_update(pmap_kernel());
         return (va);          return va;
 }  }
   
 /*  /*
Line 707  pmap_map(va, spa, epa, prot)
Line 705  pmap_map(va, spa, epa, prot)
  *      Note: no locking is necessary in this function.   *      Note: no locking is necessary in this function.
  */   */
 pmap_t  pmap_t
 pmap_create()  pmap_create(void)
 {  {
         struct pmap *pmap;          struct pmap *pmap;
   
Line 717  pmap_create()
Line 715  pmap_create()
         pmap = pool_get(&pmap_pmap_pool, PR_WAITOK);          pmap = pool_get(&pmap_pmap_pool, PR_WAITOK);
         memset(pmap, 0, sizeof(*pmap));          memset(pmap, 0, sizeof(*pmap));
         pmap_pinit(pmap);          pmap_pinit(pmap);
         return (pmap);          return pmap;
 }  }
   
 /*  /*
Line 728  pmap_create()
Line 726  pmap_create()
  *      Note: THIS FUNCTION SHOULD BE MOVED INTO pmap_create()!   *      Note: THIS FUNCTION SHOULD BE MOVED INTO pmap_create()!
  */   */
 void  void
 pmap_pinit(pmap)  pmap_pinit(struct pmap *pmap)
         struct pmap *pmap;  
 {  {
   
         PMAP_DPRINTF(PDB_FOLLOW|PDB_CREATE,          PMAP_DPRINTF(PDB_FOLLOW|PDB_CREATE,
Line 760  pmap_pinit(pmap)
Line 757  pmap_pinit(pmap)
  *      all resources if the reference count drops to zero.   *      all resources if the reference count drops to zero.
  */   */
 void  void
 pmap_destroy(pmap)  pmap_destroy(pmap_t pmap)
         struct pmap *pmap;  
 {  {
         int count;          int count;
   
Line 784  pmap_destroy(pmap)
Line 780  pmap_destroy(pmap)
  *      Note: THIS FUNCTION SHOULD BE MOVED INTO pmap_destroy().   *      Note: THIS FUNCTION SHOULD BE MOVED INTO pmap_destroy().
  */   */
 void  void
 pmap_release(pmap)  pmap_release(pmap_t pmap)
         struct pmap *pmap;  
 {  {
   
         PMAP_DPRINTF(PDB_FOLLOW, ("pmap_release(%p)\n", pmap));          PMAP_DPRINTF(PDB_FOLLOW, ("pmap_release(%p)\n", pmap));
Line 814  pmap_release(pmap)
Line 809  pmap_release(pmap)
  *      Add a reference to the specified pmap.   *      Add a reference to the specified pmap.
  */   */
 void  void
 pmap_reference(pmap)  pmap_reference(pmap_t pmap)
         pmap_t  pmap;  
 {  {
         PMAP_DPRINTF(PDB_FOLLOW, ("pmap_reference(%p)\n", pmap));          PMAP_DPRINTF(PDB_FOLLOW, ("pmap_reference(%p)\n", pmap));
   
Line 835  pmap_reference(pmap)
Line 829  pmap_reference(pmap)
  *      by a critical section in cpu_switch()!   *      by a critical section in cpu_switch()!
  */   */
 void  void
 pmap_activate(l)  pmap_activate(struct lwp *l)
         struct lwp *l;  
 {  {
         struct pmap *pmap = l->l_proc->p_vmspace->vm_map.pmap;          pmap_t pmap = l->l_proc->p_vmspace->vm_map.pmap;
   
         PMAP_DPRINTF(PDB_FOLLOW|PDB_SEGTAB,          PMAP_DPRINTF(PDB_FOLLOW|PDB_SEGTAB,
             ("pmap_activate(%p)\n", l));              ("pmap_activate(%p)\n", l));
Line 856  pmap_activate(l)
Line 849  pmap_activate(l)
  *      as well.   *      as well.
  */   */
 void  void
 pmap_deactivate(l)  pmap_deactivate(struct lwp *l)
         struct lwp *l;  
 {  {
   
         /* No action necessary in this pmap implementation. */          /* No action necessary in this pmap implementation. */
Line 872  pmap_deactivate(l)
Line 864  pmap_deactivate(l)
  *      rounded to the page size.   *      rounded to the page size.
  */   */
 void  void
 pmap_remove(pmap, sva, eva)  pmap_remove(pmap_t pmap, vaddr_t sva, vaddr_t eva)
         struct pmap *pmap;  
         vaddr_t sva, eva;  
 {  {
   
         pmap_do_remove(pmap, sva, eva, 1);          pmap_do_remove(pmap, sva, eva, 1);
 }  }
   
 void  void
 pmap_do_remove(pmap, sva, eva, remove_wired)  pmap_do_remove(pmap_t pmap, vaddr_t sva, vaddr_t eva, int remove_wired)
         struct pmap *pmap;  
         vaddr_t sva, eva;  
         int remove_wired;  
 {  {
         vaddr_t nssva;          vaddr_t nssva;
         pt_entry_t *pte;          pt_entry_t *pte;
Line 993  pmap_do_remove(pmap, sva, eva, remove_wi
Line 980  pmap_do_remove(pmap, sva, eva, remove_wi
  *      the permissions specified.   *      the permissions specified.
  */   */
 void  void
 pmap_page_protect(pg, prot)  pmap_page_protect(struct vm_page *pg, vm_prot_t prot)
         struct vm_page *pg;  
         vm_prot_t prot;  
 {  {
         paddr_t pa = VM_PAGE_TO_PHYS(pg);          paddr_t pa = VM_PAGE_TO_PHYS(pg);
         struct pv_entry *pv;          struct pv_entry *pv;
Line 1047  pmap_page_protect(pg, prot)
Line 1032  pmap_page_protect(pg, prot)
  *      as requested.   *      as requested.
  */   */
 void  void
 pmap_protect(pmap, sva, eva, prot)  pmap_protect(pmap_t pmap, vaddr_t sva, vaddr_t eva, vm_prot_t prot)
         pmap_t          pmap;  
         vaddr_t         sva, eva;  
         vm_prot_t       prot;  
 {  {
         vaddr_t nssva;          vaddr_t nssva;
         pt_entry_t *pte;          pt_entry_t *pte;
Line 1154  pmap_protect(pmap, sva, eva, prot)
Line 1136  pmap_protect(pmap, sva, eva, prot)
  *      insert this page into the given map NOW.   *      insert this page into the given map NOW.
  */   */
 int  int
 pmap_enter(pmap, va, pa, prot, flags)  pmap_enter(pmap_t pmap, vaddr_t va, paddr_t pa, vm_prot_t prot, int flags)
         struct pmap *pmap;  
         vaddr_t va;  
         paddr_t pa;  
         vm_prot_t prot;  
         int flags;  
 {  {
         pt_entry_t *pte;          pt_entry_t *pte;
         int npte;          int npte;
Line 1167  pmap_enter(pmap, va, pa, prot, flags)
Line 1144  pmap_enter(pmap, va, pa, prot, flags)
         boolean_t cacheable = TRUE;          boolean_t cacheable = TRUE;
         boolean_t checkpv = TRUE;          boolean_t checkpv = TRUE;
         boolean_t wired = (flags & PMAP_WIRED) != 0;          boolean_t wired = (flags & PMAP_WIRED) != 0;
           boolean_t can_fail = (flags & PMAP_CANFAIL) != 0;
   
         PMAP_DPRINTF(PDB_FOLLOW|PDB_ENTER,          PMAP_DPRINTF(PDB_FOLLOW|PDB_ENTER,
             ("pmap_enter(%p, %lx, %lx, %x, %x)\n",              ("pmap_enter(%p, %lx, %lx, %x, %x)\n",
Line 1184  pmap_enter(pmap, va, pa, prot, flags)
Line 1162  pmap_enter(pmap, va, pa, prot, flags)
         /*          /*
          * For user mapping, allocate kernel VM resources if necessary.           * For user mapping, allocate kernel VM resources if necessary.
          */           */
         if (pmap->pm_ptab == NULL)          if (pmap->pm_ptab == NULL) {
                 pmap->pm_ptab = (pt_entry_t *)                  pmap->pm_ptab = (pt_entry_t *)
                     uvm_km_alloc(pt_map, M68K_MAX_PTSIZE, 0,                      uvm_km_alloc(pt_map, M68K_MAX_PTSIZE, 0,
                     UVM_KMF_VAONLY | UVM_KMF_WAITVA);                      UVM_KMF_VAONLY |
                       (can_fail ? UVM_KMF_NOWAIT : UVM_KMF_WAITVA));
                   if (pmap->pm_ptab == NULL)
                           return ENOMEM;
           }
   
         /*          /*
          * Segment table entry not valid, we need a new PT page           * Segment table entry not valid, we need a new PT page
          */           */
         if (!pmap_ste_v(pmap, va))          if (!pmap_ste_v(pmap, va)) {
                 pmap_enter_ptpage(pmap, va);                  int err = pmap_enter_ptpage(pmap, va, can_fail);
                   if (err)
                           return err;
           }
   
         pa = m68k_trunc_page(pa);          pa = m68k_trunc_page(pa);
         pte = pmap_pte(pmap, va);          pte = pmap_pte(pmap, va);
Line 1454  validate:
Line 1439  validate:
 }  }
   
 void  void
 pmap_kenter_pa(va, pa, prot)  pmap_kenter_pa(vaddr_t va, paddr_t pa, vm_prot_t prot)
         vaddr_t va;  
         paddr_t pa;  
         vm_prot_t prot;  
 {  {
         struct pmap *pmap = pmap_kernel();          pmap_t pmap = pmap_kernel();
         pt_entry_t *pte;          pt_entry_t *pte;
         int s, npte;          int s, npte;
   
Line 1472  pmap_kenter_pa(va, pa, prot)
Line 1454  pmap_kenter_pa(va, pa, prot)
   
         if (!pmap_ste_v(pmap, va)) {          if (!pmap_ste_v(pmap, va)) {
                 s = splvm();                  s = splvm();
                 pmap_enter_ptpage(pmap, va);                  pmap_enter_ptpage(pmap, va, FALSE);
                 splx(s);                  splx(s);
         }          }
   
Line 1513  pmap_kenter_pa(va, pa, prot)
Line 1495  pmap_kenter_pa(va, pa, prot)
 }  }
   
 void  void
 pmap_kremove(va, size)  pmap_kremove(vaddr_t va, vsize_t size)
         vaddr_t va;  
         vsize_t size;  
 {  {
         struct pmap *pmap = pmap_kernel();          pmap_t pmap = pmap_kernel();
         pt_entry_t *pte;          pt_entry_t *pte;
         vaddr_t nssva;          vaddr_t nssva;
         vaddr_t eva = va + size;          vaddr_t eva = va + size;
Line 1620  pmap_kremove(va, size)
Line 1600  pmap_kremove(va, size)
  *      The mapping must already exist in the pmap.   *      The mapping must already exist in the pmap.
  */   */
 void  void
 pmap_unwire(pmap, va)  pmap_unwire(pmap_t pmap, vaddr_t va)
         pmap_t          pmap;  
         vaddr_t         va;  
 {  {
         pt_entry_t *pte;          pt_entry_t *pte;
   
Line 1650  pmap_unwire(pmap, va)
Line 1628  pmap_unwire(pmap, va)
  *      pmap/virtual address pair.   *      pmap/virtual address pair.
  */   */
 boolean_t  boolean_t
 pmap_extract(pmap, va, pap)  pmap_extract(pmap_t pmap, vaddr_t va, paddr_t *pap)
         pmap_t  pmap;  
         vaddr_t va;  
         paddr_t *pap;  
 {  {
         paddr_t pa;          paddr_t pa;
         u_int pte;          u_int pte;
Line 1671  pmap_extract(pmap, va, pap)
Line 1646  pmap_extract(pmap, va, pap)
                         if (pmapdebug & PDB_FOLLOW)                          if (pmapdebug & PDB_FOLLOW)
                                 printf("%lx\n", pa);                                  printf("%lx\n", pa);
 #endif  #endif
                         return (TRUE);                          return TRUE;
                 }                  }
         }          }
 #ifdef DEBUG  #ifdef DEBUG
         if (pmapdebug & PDB_FOLLOW)          if (pmapdebug & PDB_FOLLOW)
                 printf("failed\n");                  printf("failed\n");
 #endif  #endif
         return (FALSE);          return FALSE;
 }  }
   
 /*  /*
Line 1691  pmap_extract(pmap, va, pap)
Line 1666  pmap_extract(pmap, va, pap)
  *      This routine is only advisory and need not do anything.   *      This routine is only advisory and need not do anything.
  */   */
 void  void
 pmap_copy(dst_pmap, src_pmap, dst_addr, len, src_addr)  pmap_copy(pmap_t dst_pmap, pmap_t src_pmap, vaddr_t dst_addr, vsize_t len,
         pmap_t          dst_pmap;      vaddr_t src_addr)
         pmap_t          src_pmap;  
         vaddr_t         dst_addr;  
         vsize_t         len;  
         vaddr_t         src_addr;  
 {  {
   
         PMAP_DPRINTF(PDB_FOLLOW,          PMAP_DPRINTF(PDB_FOLLOW,
Line 1715  pmap_copy(dst_pmap, src_pmap, dst_addr, 
Line 1686  pmap_copy(dst_pmap, src_pmap, dst_addr, 
  *      Called by the pageout daemon when pages are scarce.   *      Called by the pageout daemon when pages are scarce.
  */   */
 void  void
 pmap_collect(pmap)  pmap_collect(pmap_t pmap)
         pmap_t          pmap;  
 {  {
   
         PMAP_DPRINTF(PDB_FOLLOW, ("pmap_collect(%p)\n", pmap));          PMAP_DPRINTF(PDB_FOLLOW, ("pmap_collect(%p)\n", pmap));
Line 1761  pmap_collect(pmap)
Line 1731  pmap_collect(pmap)
  *      WAY OF HANDLING PT PAGES!   *      WAY OF HANDLING PT PAGES!
  */   */
 void  void
 pmap_collect1(pmap, startpa, endpa)  pmap_collect1(pmap_t pmap, paddr_t startpa, paddr_t endpa)
         pmap_t          pmap;  
         paddr_t         startpa, endpa;  
 {  {
         paddr_t pa;          paddr_t pa;
         struct pv_entry *pv;          struct pv_entry *pv;
Line 1808  pmap_collect1(pmap, startpa, endpa)
Line 1776  pmap_collect1(pmap, startpa, endpa)
 #ifdef DEBUG  #ifdef DEBUG
                 if (pmapdebug & (PDB_PTPAGE|PDB_COLLECT)) {                  if (pmapdebug & (PDB_PTPAGE|PDB_COLLECT)) {
                         printf("collect: freeing KPT page at %lx (ste %x@%p)\n",                          printf("collect: freeing KPT page at %lx (ste %x@%p)\n",
                                pv->pv_va, *pv->pv_ptste, pv->pv_ptste);                              pv->pv_va, *pv->pv_ptste, pv->pv_ptste);
                         opmapdebug = pmapdebug;                          opmapdebug = pmapdebug;
                         pmapdebug |= PDB_PTPAGE;                          pmapdebug |= PDB_PTPAGE;
                 }                  }
Line 1841  pmap_collect1(pmap, startpa, endpa)
Line 1809  pmap_collect1(pmap, startpa, endpa)
                         panic("pmap_collect: lost a KPT page");                          panic("pmap_collect: lost a KPT page");
                 if (pmapdebug & (PDB_PTPAGE|PDB_COLLECT))                  if (pmapdebug & (PDB_PTPAGE|PDB_COLLECT))
                         printf("collect: %lx (%lx) to free list\n",                          printf("collect: %lx (%lx) to free list\n",
                                kpt->kpt_va, kpa);                              kpt->kpt_va, kpa);
 #endif  #endif
                 *pkpt = kpt->kpt_next;                  *pkpt = kpt->kpt_next;
                 kpt->kpt_next = kpt_free_list;                  kpt->kpt_next = kpt_free_list;
Line 1852  pmap_collect1(pmap, startpa, endpa)
Line 1820  pmap_collect1(pmap, startpa, endpa)
   
                 if (*ste != SG_NV)                  if (*ste != SG_NV)
                         printf("collect: kernel STE at %p still valid (%x)\n",                          printf("collect: kernel STE at %p still valid (%x)\n",
                                ste, *ste);                              ste, *ste);
                 ste = &Sysptmap[ste - pmap_ste(pmap_kernel(), 0)];                  ste = &Sysptmap[ste - pmap_ste(pmap_kernel(), 0)];
                 if (*ste != SG_NV)                  if (*ste != SG_NV)
                         printf("collect: kernel PTmap at %p still valid (%x)\n",                          printf("collect: kernel PTmap at %p still valid (%x)\n",
                                ste, *ste);                              ste, *ste);
 #endif  #endif
         }          }
 }  }
Line 1873  pmap_collect1(pmap, startpa, endpa)
Line 1841  pmap_collect1(pmap, startpa, endpa)
  *            support multiple processors, this is sufficient.)   *            support multiple processors, this is sufficient.)
  */   */
 void  void
 pmap_zero_page(phys)  pmap_zero_page(paddr_t phys)
         paddr_t phys;  
 {  {
         int npte;          int npte;
   
Line 1931  pmap_zero_page(phys)
Line 1898  pmap_zero_page(phys)
  *            support multiple processors, this is sufficient.)   *            support multiple processors, this is sufficient.)
  */   */
 void  void
 pmap_copy_page(src, dst)  pmap_copy_page(paddr_t src, paddr_t dst)
         paddr_t src, dst;  
 {  {
         int npte1, npte2;          int npte1, npte2;
   
Line 1992  pmap_copy_page(src, dst)
Line 1958  pmap_copy_page(src, dst)
  *      Clear the modify bits on the specified physical page.   *      Clear the modify bits on the specified physical page.
  */   */
 boolean_t  boolean_t
 pmap_clear_modify(pg)  pmap_clear_modify(struct vm_page *pg)
         struct vm_page *pg;  
 {  {
         paddr_t pa = VM_PAGE_TO_PHYS(pg);          paddr_t pa = VM_PAGE_TO_PHYS(pg);
   
Line 2008  pmap_clear_modify(pg)
Line 1973  pmap_clear_modify(pg)
  *      Clear the reference bit on the specified physical page.   *      Clear the reference bit on the specified physical page.
  */   */
 boolean_t  boolean_t
 pmap_clear_reference(pg)  pmap_clear_reference(struct vm_page *pg)
         struct vm_page *pg;  
 {  {
         paddr_t pa = VM_PAGE_TO_PHYS(pg);          paddr_t pa = VM_PAGE_TO_PHYS(pg);
   
Line 2025  pmap_clear_reference(pg)
Line 1989  pmap_clear_reference(pg)
  *      by any physical maps.   *      by any physical maps.
  */   */
 boolean_t  boolean_t
 pmap_is_referenced(pg)  pmap_is_referenced(struct vm_page *pg)
         struct vm_page *pg;  
 {  {
         paddr_t pa = VM_PAGE_TO_PHYS(pg);          paddr_t pa = VM_PAGE_TO_PHYS(pg);
   
         return (pmap_testbit(pa, PG_U));          return pmap_testbit(pa, PG_U);
 }  }
   
 /*  /*
Line 2040  pmap_is_referenced(pg)
Line 2003  pmap_is_referenced(pg)
  *      by any physical maps.   *      by any physical maps.
  */   */
 boolean_t  boolean_t
 pmap_is_modified(pg)  pmap_is_modified(struct vm_page *pg)
         struct vm_page *pg;  
 {  {
         paddr_t pa = VM_PAGE_TO_PHYS(pg);          paddr_t pa = VM_PAGE_TO_PHYS(pg);
   
         return (pmap_testbit(pa, PG_M));          return pmap_testbit(pa, PG_M);
 }  }
   
 /*  /*
Line 2058  pmap_is_modified(pg)
Line 2020  pmap_is_modified(pg)
  *      Note: no locking is necessary in this function.   *      Note: no locking is necessary in this function.
  */   */
 paddr_t  paddr_t
 pmap_phys_address(ppn)  pmap_phys_address(int ppn)
         int ppn;  
 {  {
         return(m68k_ptob(ppn));          return m68k_ptob(ppn);
 }  }
   
 #ifdef M68K_MMU_HP  #ifdef M68K_MMU_HP
Line 2072  pmap_phys_address(ppn)
Line 2033  pmap_phys_address(ppn)
  *      cause a virtually-addressed cache alias problem.   *      cause a virtually-addressed cache alias problem.
  */   */
 void  void
 pmap_prefer(foff, vap)  pmap_prefer(vaddr_t foff, vaddr_t *vap)
         vaddr_t foff, *vap;  
 {  {
         vaddr_t va;          vaddr_t va;
         vsize_t d;          vsize_t d;
Line 2102  pmap_prefer(foff, vap)
Line 2062  pmap_prefer(foff, vap)
  *      VM knows nothing about it.   *      VM knows nothing about it.
  */   */
 int  int
 pmap_mapmulti(pmap, va)  pmap_mapmulti(pmap_t pmap, vaddr_t va)
         struct pmap *pmap;  
         vaddr_t va;  
 {  {
         st_entry_t *ste, *bste;          st_entry_t *ste, *bste;
   
Line 2112  pmap_mapmulti(pmap, va)
Line 2070  pmap_mapmulti(pmap, va)
         if (pmapdebug & PDB_MULTIMAP) {          if (pmapdebug & PDB_MULTIMAP) {
                 ste = pmap_ste(pmap, HPMMBASEADDR(va));                  ste = pmap_ste(pmap, HPMMBASEADDR(va));
                 printf("pmap_mapmulti(%p, %lx): bste %p(%x)",                  printf("pmap_mapmulti(%p, %lx): bste %p(%x)",
                        pmap, va, ste, *ste);                      pmap, va, ste, *ste);
                 ste = pmap_ste(pmap, va);                  ste = pmap_ste(pmap, va);
                 printf(" ste %p(%x)\n", ste, *ste);                  printf(" ste %p(%x)\n", ste, *ste);
         }          }
Line 2149  pmap_mapmulti(pmap, va)
Line 2107  pmap_mapmulti(pmap, va)
  */   */
 /* static */  /* static */
 void  void
 pmap_remove_mapping(pmap, va, pte, flags)  pmap_remove_mapping(pmap_t pmap, vaddr_t va, pt_entry_t *pte, int flags)
         struct pmap *pmap;  
         vaddr_t va;  
         pt_entry_t *pte;  
         int flags;  
 {  {
         paddr_t pa;          paddr_t pa;
         struct pv_entry *pv, *npv;          struct pv_entry *pv, *npv;
Line 2274  pmap_remove_mapping(pmap, va, pte, flags
Line 2228  pmap_remove_mapping(pmap, va, pte, flags
 #endif  #endif
                         pmap_remove_mapping(pmap_kernel(), ptpva,                          pmap_remove_mapping(pmap_kernel(), ptpva,
                             NULL, PRM_TFLUSH|PRM_CFLUSH);                              NULL, PRM_TFLUSH|PRM_CFLUSH);
                           simple_lock(&uvm.kernel_object->vmobjlock);
                         uvm_pagefree(PHYS_TO_VM_PAGE(ptppa));                          uvm_pagefree(PHYS_TO_VM_PAGE(ptppa));
                           simple_unlock(&uvm.kernel_object->vmobjlock);
                         PMAP_DPRINTF(PDB_REMOVE|PDB_PTPAGE,                          PMAP_DPRINTF(PDB_REMOVE|PDB_PTPAGE,
                             ("remove: PT page 0x%lx (0x%lx) freed\n",                              ("remove: PT page 0x%lx (0x%lx) freed\n",
                             ptpva, ptppa));                              ptpva, ptppa));
Line 2441  pmap_remove_mapping(pmap, va, pte, flags
Line 2397  pmap_remove_mapping(pmap, va, pte, flags
  */   */
 /* static */  /* static */
 boolean_t  boolean_t
 pmap_testbit(pa, bit)  pmap_testbit(paddr_t pa, int bit)
         paddr_t pa;  
         int bit;  
 {  {
         struct pv_entry *pv;          struct pv_entry *pv;
         pt_entry_t *pte;          pt_entry_t *pte;
Line 2458  pmap_testbit(pa, bit)
Line 2412  pmap_testbit(pa, bit)
   
         if (*pa_to_attribute(pa) & bit) {          if (*pa_to_attribute(pa) & bit) {
                 splx(s);                  splx(s);
                 return(TRUE);                  return TRUE;
         }          }
   
 #ifdef M68K_MMU_HP  #ifdef M68K_MMU_HP
Line 2482  pmap_testbit(pa, bit)
Line 2436  pmap_testbit(pa, bit)
                         if (*pte & bit) {                          if (*pte & bit) {
                                 *pa_to_attribute(pa) |= bit;                                  *pa_to_attribute(pa) |= bit;
                                 splx(s);                                  splx(s);
                                 return (TRUE);                                  return TRUE;
                         }                          }
                 }                  }
         }          }
         splx(s);          splx(s);
         return (FALSE);          return FALSE;
 }  }
   
 /*  /*
Line 2498  pmap_testbit(pa, bit)
Line 2452  pmap_testbit(pa, bit)
  */   */
 /* static */  /* static */
 boolean_t  boolean_t
 pmap_changebit(pa, set, mask)  pmap_changebit(paddr_t pa, int set, int mask)
         paddr_t pa;  
         int set, mask;  
 {  {
         struct pv_entry *pv;          struct pv_entry *pv;
         pt_entry_t *pte, npte;          pt_entry_t *pte, npte;
Line 2581  pmap_changebit(pa, set, mask)
Line 2533  pmap_changebit(pa, set, mask)
                 }                  }
         }          }
         splx(s);          splx(s);
         return(r);          return r;
 }  }
   
 /*  /*
Line 2590  pmap_changebit(pa, set, mask)
Line 2542  pmap_changebit(pa, set, mask)
  *      Allocate and map a PT page for the specified pmap/va pair.   *      Allocate and map a PT page for the specified pmap/va pair.
  */   */
 /* static */  /* static */
 void  int
 pmap_enter_ptpage(pmap, va)  pmap_enter_ptpage(pmap_t pmap, vaddr_t va, boolean_t can_fail)
         struct pmap *pmap;  
         vaddr_t va;  
 {  {
         paddr_t ptpa;          paddr_t ptpa;
         struct vm_page *pg;          struct vm_page *pg;
Line 2614  pmap_enter_ptpage(pmap, va)
Line 2564  pmap_enter_ptpage(pmap, va)
         if (pmap->pm_stab == Segtabzero) {          if (pmap->pm_stab == Segtabzero) {
                 pmap->pm_stab = (st_entry_t *)                  pmap->pm_stab = (st_entry_t *)
                     uvm_km_alloc(st_map, M68K_STSIZE, 0,                      uvm_km_alloc(st_map, M68K_STSIZE, 0,
                     UVM_KMF_WIRED | UVM_KMF_ZERO);                      UVM_KMF_WIRED | UVM_KMF_ZERO |
                       (can_fail ? UVM_KMF_NOWAIT : 0));
                   if (pmap->pm_stab == NULL) {
                           pmap->pm_stab = Segtabzero;
                           return ENOMEM;
                   }
                 (void) pmap_extract(pmap_kernel(), (vaddr_t)pmap->pm_stab,                  (void) pmap_extract(pmap_kernel(), (vaddr_t)pmap->pm_stab,
                     (paddr_t *)&pmap->pm_stpa);                      (paddr_t *)&pmap->pm_stpa);
 #if defined(M68040) || defined(M68060)  #if defined(M68040) || defined(M68060)
Line 2622  pmap_enter_ptpage(pmap, va)
Line 2577  pmap_enter_ptpage(pmap, va)
                 if (mmutype == MMU_68040)                  if (mmutype == MMU_68040)
 #endif  #endif
                 {                  {
                         if (pmap_changebit((paddr_t)pmap->pm_stpa,                          pt_entry_t      *pte;
                                            PG_CI, ~PG_CCB))  
                                 DCIS();                          pte = pmap_pte(pmap_kernel(), pmap->pm_stab);
                           *pte = (*pte & ~PG_CMASK) | PG_CI;
                         pmap->pm_stfree = protostfree;                          pmap->pm_stfree = protostfree;
                 }                  }
 #endif  #endif
Line 2715  pmap_enter_ptpage(pmap, va)
Line 2671  pmap_enter_ptpage(pmap, va)
                         int ix = pmap_ste(pmap, va) - pmap_ste(pmap, 0);                          int ix = pmap_ste(pmap, va) - pmap_ste(pmap, 0);
   
                         printf("enter: add &Sysptmap[%d]: %x (KPT page %lx)\n",                          printf("enter: add &Sysptmap[%d]: %x (KPT page %lx)\n",
                                ix, Sysptmap[ix], kpt->kpt_va);                              ix, Sysptmap[ix], kpt->kpt_va);
                 }                  }
 #endif  #endif
                 splx(s);                  splx(s);
Line 2734  pmap_enter_ptpage(pmap, va)
Line 2690  pmap_enter_ptpage(pmap, va)
                 pmap->pm_sref++;                  pmap->pm_sref++;
                 PMAP_DPRINTF(PDB_ENTER|PDB_PTPAGE,                  PMAP_DPRINTF(PDB_ENTER|PDB_PTPAGE,
                     ("enter: about to alloc UPT pg at %lx\n", va));                      ("enter: about to alloc UPT pg at %lx\n", va));
                   simple_lock(&uvm.kernel_object->vmobjlock);
                 while ((pg = uvm_pagealloc(uvm.kernel_object,                  while ((pg = uvm_pagealloc(uvm.kernel_object,
                                            va - vm_map_min(kernel_map),                                             va - vm_map_min(kernel_map),
                                            NULL, UVM_PGA_ZERO)) == NULL) {                                             NULL, UVM_PGA_ZERO)) == NULL) {
                           simple_unlock(&uvm.kernel_object->vmobjlock);
                         uvm_wait("ptpage");                          uvm_wait("ptpage");
                           simple_lock(&uvm.kernel_object->vmobjlock);
                 }                  }
                   simple_unlock(&uvm.kernel_object->vmobjlock);
                 pg->flags &= ~(PG_BUSY|PG_FAKE);                  pg->flags &= ~(PG_BUSY|PG_FAKE);
                 UVM_PAGE_OWN(pg, NULL);                  UVM_PAGE_OWN(pg, NULL);
                 ptpa = VM_PAGE_TO_PHYS(pg);                  ptpa = VM_PAGE_TO_PHYS(pg);
Line 2760  pmap_enter_ptpage(pmap, va)
Line 2720  pmap_enter_ptpage(pmap, va)
                 pt_entry_t *pte = pmap_pte(pmap_kernel(), va);                  pt_entry_t *pte = pmap_pte(pmap_kernel(), va);
                 if ((pmapdebug & PDB_PARANOIA) && (*pte & PG_CCB) == 0)                  if ((pmapdebug & PDB_PARANOIA) && (*pte & PG_CCB) == 0)
                         printf("%s PT no CCB: kva=%lx ptpa=%lx pte@%p=%x\n",                          printf("%s PT no CCB: kva=%lx ptpa=%lx pte@%p=%x\n",
                                pmap == pmap_kernel() ? "Kernel" : "User",                              pmap == pmap_kernel() ? "Kernel" : "User",
                                va, ptpa, pte, *pte);                              va, ptpa, pte, *pte);
 #endif  #endif
                 if (pmap_changebit(ptpa, PG_CI, ~PG_CCB))                  if (pmap_changebit(ptpa, PG_CI, ~PG_CCB))
                         DCIS();                          DCIS();
Line 2832  pmap_enter_ptpage(pmap, va)
Line 2792  pmap_enter_ptpage(pmap, va)
                 TBIAU();                  TBIAU();
         pmap->pm_ptpages++;          pmap->pm_ptpages++;
         splx(s);          splx(s);
   
           return 0;
 }  }
   
 /*  /*
Line 2840  pmap_enter_ptpage(pmap, va)
Line 2802  pmap_enter_ptpage(pmap, va)
  *      Add a reference to the specified PT page.   *      Add a reference to the specified PT page.
  */   */
 void  void
 pmap_ptpage_addref(ptpva)  pmap_ptpage_addref(vaddr_t ptpva)
         vaddr_t ptpva;  
 {  {
         struct vm_page *pg;          struct vm_page *pg;
   
Line 2860  pmap_ptpage_addref(ptpva)
Line 2821  pmap_ptpage_addref(ptpva)
  *      Delete a reference to the specified PT page.   *      Delete a reference to the specified PT page.
  */   */
 int  int
 pmap_ptpage_delref(ptpva)  pmap_ptpage_delref(vaddr_t ptpva)
         vaddr_t ptpva;  
 {  {
         struct vm_page *pg;          struct vm_page *pg;
         int rv;          int rv;
Line 2873  pmap_ptpage_delref(ptpva)
Line 2833  pmap_ptpage_delref(ptpva)
             ("ptpage delref: pg %p now %d\n",              ("ptpage delref: pg %p now %d\n",
              pg, pg->wire_count));               pg, pg->wire_count));
         simple_unlock(&uvm.kernel_object->vmobjlock);          simple_unlock(&uvm.kernel_object->vmobjlock);
         return (rv);          return rv;
 }  }
   
 /*  /*
Line 2883  pmap_ptpage_delref(ptpva)
Line 2843  pmap_ptpage_delref(ptpva)
  *              Synchronize caches corresponding to [addr, addr + len) in p.   *              Synchronize caches corresponding to [addr, addr + len) in p.
  */   */
 void  void
 pmap_procwr(p, va, len)  pmap_procwr(struct proc *p, vaddr_t va, size_t len)
         struct proc     *p;  
         vaddr_t         va;  
         size_t          len;  
 {  {
   
         (void)cachectl1(0x80000004, va, len, p);          (void)cachectl1(0x80000004, va, len, p);
 }  }
   
 #ifdef mvme68k  #ifdef mvme68k
   
 void  void
 _pmap_set_page_cacheable(pm, va)  _pmap_set_page_cacheable(pmap_t pmap, vaddr_t va)
         struct pmap *pm;  
         vaddr_t va;  
 {  {
   
         if (!pmap_ste_v(pm, va))          if (!pmap_ste_v(pmap, va))
                 return;                  return;
   
 #if defined(M68040) || defined(M68060)  #if defined(M68040) || defined(M68060)
 #if defined(M68020) || defined(M68030)  #if defined(M68020) || defined(M68030)
         if (mmutype == MMU_68040)          if (mmutype == MMU_68040) {
         {  
 #endif  #endif
         if (pmap_changebit(pmap_pte_pa(pmap_pte(pm, va)), PG_CCB, ~PG_CI))          if (pmap_changebit(pmap_pte_pa(pmap_pte(pmap, va)), PG_CCB, ~PG_CI))
                 DCIS();                  DCIS();
   
 #if defined(M68020) || defined(M68030)  #if defined(M68020) || defined(M68030)
         } else          } else
                 pmap_changebit(pmap_pte_pa(pmap_pte(pm, va)), 0, ~PG_CI);                  pmap_changebit(pmap_pte_pa(pmap_pte(pmap, va)), 0, ~PG_CI);
 #endif  #endif
 #else  #else
         pmap_changebit(pmap_pte_pa(pmap_pte(pm, va)), 0, ~PG_CI);          pmap_changebit(pmap_pte_pa(pmap_pte(pmap, va)), 0, ~PG_CI);
 #endif  #endif
 }  }
   
 void  void
 _pmap_set_page_cacheinhibit(pm, va)  _pmap_set_page_cacheinhibit(pmap_t pmap, vaddr_t va)
         struct pmap *pm;  
         vaddr_t va;  
 {  {
   
         if (!pmap_ste_v(pm, va))          if (!pmap_ste_v(pmap, va))
                 return;                  return;
   
 #if defined(M68040) || defined(M68060)  #if defined(M68040) || defined(M68060)
 #if defined(M68020) || defined(M68030)  #if defined(M68020) || defined(M68030)
         if (mmutype == MMU_68040)          if (mmutype == MMU_68040) {
         {  
 #endif  #endif
         if (pmap_changebit(pmap_pte_pa(pmap_pte(pm, va)), PG_CI, ~PG_CCB))          if (pmap_changebit(pmap_pte_pa(pmap_pte(pmap, va)), PG_CI, ~PG_CCB))
                 DCIS();                  DCIS();
 #if defined(M68020) || defined(M68030)  #if defined(M68020) || defined(M68030)
         } else          } else
                 pmap_changebit(pmap_pte_pa(pmap_pte(pm, va)), PG_CI, ~0);                  pmap_changebit(pmap_pte_pa(pmap_pte(pmap, va)), PG_CI, ~0);
 #endif  #endif
 #else  #else
         pmap_changebit(pmap_pte_pa(pmap_pte(pm, va)), PG_CI, ~0);          pmap_changebit(pmap_pte_pa(pmap_pte(pmap, va)), PG_CI, ~0);
 #endif  #endif
 }  }
   
 int  int
 _pmap_page_is_cacheable(pm, va)  _pmap_page_is_cacheable(pmap_t pmap, vaddr_t va)
         struct pmap *pm;  
         vaddr_t va;  
 {  {
   
         if (!pmap_ste_v(pm, va))          if (!pmap_ste_v(pmap, va))
                 return (0);                  return 0;
   
         return ((pmap_pte_ci(pmap_pte(pm, va)) == 0) ? 1 : 0);          return (pmap_pte_ci(pmap_pte(pmap, va)) == 0) ? 1 : 0;
 }  }
   
 #endif /* mvme68k */  #endif /* mvme68k */
Line 2965  _pmap_page_is_cacheable(pm, va)
Line 2915  _pmap_page_is_cacheable(pm, va)
  *      Dump the contents of the PV list for the specified physical page.   *      Dump the contents of the PV list for the specified physical page.
  */   */
 void  void
 pmap_pvdump(pa)  pmap_pvdump(paddr_t pa)
         paddr_t pa;  
 {  {
         struct pv_entry *pv;          struct pv_entry *pv;
   
         printf("pa %lx", pa);          printf("pa %lx", pa);
         for (pv = pa_to_pvh(pa); pv; pv = pv->pv_next)          for (pv = pa_to_pvh(pa); pv; pv = pv->pv_next)
                 printf(" -> pmap %p, va %lx, ptste %p, ptpmap %p, flags %x",                  printf(" -> pmap %p, va %lx, ptste %p, ptpmap %p, flags %x",
                        pv->pv_pmap, pv->pv_va, pv->pv_ptste, pv->pv_ptpmap,                      pv->pv_pmap, pv->pv_va, pv->pv_ptste, pv->pv_ptpmap,
                        pv->pv_flags);                      pv->pv_flags);
         printf("\n");          printf("\n");
 }  }
   
Line 2986  pmap_pvdump(pa)
Line 2935  pmap_pvdump(pa)
  *      to that page that the VM system has.   *      to that page that the VM system has.
  */   */
 void  void
 pmap_check_wiring(str, va)  pmap_check_wiring(const char *str, vaddr_t va)
         const char *str;  
         vaddr_t va;  
 {  {
         pt_entry_t *pte;          pt_entry_t *pte;
         paddr_t pa;          paddr_t pa;

Legend:
Removed from v.1.17  
changed lines
  Added in v.1.17.2.1

CVSweb <webmaster@jp.NetBSD.org>