[BACK]Return to pmap.c CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / sys / arch / arm / arm32

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

Diff for /src/sys/arch/arm/arm32/pmap.c between version 1.97.4.3 and 1.97.4.4

version 1.97.4.3, 2002/11/21 20:15:23 version 1.97.4.4, 2002/12/07 20:43:02
Line 813  pmap_enter_pv(struct vm_page *pg, struct
Line 813  pmap_enter_pv(struct vm_page *pg, struct
         simple_unlock(&pg->mdpage.pvh_slock);   /* unlock, done! */          simple_unlock(&pg->mdpage.pvh_slock);   /* unlock, done! */
         if (pve->pv_flags & PVF_WIRED)          if (pve->pv_flags & PVF_WIRED)
                 ++pmap->pm_stats.wired_count;                  ++pmap->pm_stats.wired_count;
   #ifdef PMAP_ALIAS_DEBUG
       {
           int s = splhigh();
           if (pve->pv_flags & PVF_WRITE)
                   pg->mdpage.rw_mappings++;
           else
                   pg->mdpage.ro_mappings++;
           if (pg->mdpage.rw_mappings != 0 &&
               (pg->mdpage.kro_mappings != 0 || pg->mdpage.krw_mappings != 0)) {
                   printf("pmap_enter_pv: rw %u, kro %u, krw %u\n",
                       pg->mdpage.rw_mappings, pg->mdpage.kro_mappings,
                       pg->mdpage.krw_mappings);
           }
           splx(s);
       }
   #endif /* PMAP_ALIAS_DEBUG */
 }  }
   
 /*  /*
Line 838  pmap_remove_pv(struct vm_page *pg, struc
Line 854  pmap_remove_pv(struct vm_page *pg, struc
                         *prevptr = pve->pv_next;                /* remove it! */                          *prevptr = pve->pv_next;                /* remove it! */
                         if (pve->pv_flags & PVF_WIRED)                          if (pve->pv_flags & PVF_WIRED)
                             --pmap->pm_stats.wired_count;                              --pmap->pm_stats.wired_count;
   #ifdef PMAP_ALIAS_DEBUG
       {
                           int s = splhigh();
                           if (pve->pv_flags & PVF_WRITE) {
                                   KASSERT(pg->mdpage.rw_mappings != 0);
                                   pg->mdpage.rw_mappings--;
                           } else {
                                   KASSERT(pg->mdpage.ro_mappings != 0);
                                   pg->mdpage.ro_mappings--;
                           }
                           splx(s);
       }
   #endif /* PMAP_ALIAS_DEBUG */
                         break;                          break;
                 }                  }
                 prevptr = &pve->pv_next;                /* previous pointer */                  prevptr = &pve->pv_next;                /* previous pointer */
Line 881  pmap_modify_pv(struct pmap *pmap, vaddr_
Line 910  pmap_modify_pv(struct pmap *pmap, vaddr_
                                 else                                  else
                                         --pmap->pm_stats.wired_count;                                          --pmap->pm_stats.wired_count;
                         }                          }
   #ifdef PMAP_ALIAS_DEBUG
       {
                           int s = splhigh();
                           if ((flags ^ oflags) & PVF_WRITE) {
                                   if (flags & PVF_WRITE) {
                                           pg->mdpage.rw_mappings++;
                                           pg->mdpage.ro_mappings--;
                                           if (pg->mdpage.rw_mappings != 0 &&
                                               (pg->mdpage.kro_mappings != 0 ||
                                                pg->mdpage.krw_mappings != 0)) {
                                                   printf("pmap_modify_pv: rw %u, "
                                                       "kro %u, krw %u\n",
                                                       pg->mdpage.rw_mappings,
                                                       pg->mdpage.kro_mappings,
                                                       pg->mdpage.krw_mappings);
                                           }
                                   } else {
                                           KASSERT(pg->mdpage.rw_mappings != 0);
                                           pg->mdpage.rw_mappings--;
                                           pg->mdpage.ro_mappings++;
                                   }
                           }
                           splx(s);
       }
   #endif /* PMAP_ALIAS_DEBUG */
                         return (oflags);                          return (oflags);
                 }                  }
         }          }
Line 1367  pmap_alloc_ptpt(struct pmap *pmap)
Line 1421  pmap_alloc_ptpt(struct pmap *pmap)
   
         *pte = L2_S_PROTO | pmap->pm_pptpt |          *pte = L2_S_PROTO | pmap->pm_pptpt |
             L2_S_PROT(PTE_KERNEL, VM_PROT_READ|VM_PROT_WRITE);              L2_S_PROT(PTE_KERNEL, VM_PROT_READ|VM_PROT_WRITE);
   #ifdef PMAP_ALIAS_DEBUG
       {
           int s = splhigh();
           pg->mdpage.krw_mappings++;
           splx(s);
       }
   #endif /* PMAP_ALIAS_DEBUG */
   
         return (0);          return (0);
 }  }
Line 2820  void
Line 2881  void
 pmap_kenter_pa(vaddr_t va, paddr_t pa, vm_prot_t prot)  pmap_kenter_pa(vaddr_t va, paddr_t pa, vm_prot_t prot)
 {  {
         pt_entry_t *pte;          pt_entry_t *pte;
   
         pte = vtopte(va);          pte = vtopte(va);
         KASSERT(!pmap_pte_v(pte));          KASSERT(!pmap_pte_v(pte));
   
   #ifdef PMAP_ALIAS_DEBUG
       {
           struct vm_page *pg;
           int s;
   
           pg = PHYS_TO_VM_PAGE(pa);
           if (pg != NULL) {
                   s = splhigh();
                   if (pg->mdpage.ro_mappings == 0 &&
                       pg->mdpage.rw_mappings == 0 &&
                       pg->mdpage.kro_mappings == 0 &&
                       pg->mdpage.krw_mappings == 0) {
                           /* This case is okay. */
                   } else if (pg->mdpage.rw_mappings == 0 &&
                              pg->mdpage.krw_mappings == 0 &&
                              (prot & VM_PROT_WRITE) == 0) {
                           /* This case is okay. */
                   } else {
                           /* Something is awry. */
                           printf("pmap_kenter_pa: ro %u, rw %u, kro %u, krw %u "
                               "prot 0x%x\n", pg->mdpage.ro_mappings,
                               pg->mdpage.rw_mappings, pg->mdpage.kro_mappings,
                               pg->mdpage.krw_mappings, prot);
                           Debugger();
                   }
                   if (prot & VM_PROT_WRITE)
                           pg->mdpage.krw_mappings++;
                   else
                           pg->mdpage.kro_mappings++;
                   splx(s);
           }
       }
   #endif /* PMAP_ALIAS_DEBUG */
   
         *pte = L2_S_PROTO | pa |          *pte = L2_S_PROTO | pa |
             L2_S_PROT(PTE_KERNEL, prot) | pte_l2_s_cache_mode;              L2_S_PROT(PTE_KERNEL, prot) | pte_l2_s_cache_mode;
 }  }
Line 2842  pmap_kremove(vaddr_t va, vsize_t len)
Line 2937  pmap_kremove(vaddr_t va, vsize_t len)
   
                 KASSERT(pmap_pde_page(pmap_pde(pmap_kernel(), va)));                  KASSERT(pmap_pde_page(pmap_pde(pmap_kernel(), va)));
                 pte = vtopte(va);                  pte = vtopte(va);
   #ifdef PMAP_ALIAS_DEBUG
       {
                   struct vm_page *pg;
                   int s;
   
                   if ((*pte & L2_TYPE_MASK) != L2_TYPE_INV &&
                       (pg = PHYS_TO_VM_PAGE(*pte & L2_S_FRAME)) != NULL) {
                           s = splhigh();
                           if (*pte & L2_S_PROT_W) {
                                   KASSERT(pg->mdpage.krw_mappings != 0);
                                   pg->mdpage.krw_mappings--;
                           } else {
                                   KASSERT(pg->mdpage.kro_mappings != 0);
                                   pg->mdpage.kro_mappings--;
                           }
                           splx(s);
                   }
       }
   #endif /* PMAP_ALIAS_DEBUG */
                 cpu_idcache_wbinv_range(va, PAGE_SIZE);                  cpu_idcache_wbinv_range(va, PAGE_SIZE);
                 *pte = 0;                  *pte = 0;
                 cpu_tlb_flushID_SE(va);                  cpu_tlb_flushID_SE(va);
Line 3106  pmap_clearbit(struct vm_page *pg, u_int 
Line 3220  pmap_clearbit(struct vm_page *pg, u_int 
          * Loop over all current mappings setting/clearing as appropos           * Loop over all current mappings setting/clearing as appropos
          */           */
         for (pv = pg->mdpage.pvh_list; pv; pv = pv->pv_next) {          for (pv = pg->mdpage.pvh_list; pv; pv = pv->pv_next) {
   #ifdef PMAP_ALIAS_DEBUG
       {
                   int s = splhigh();
                   if ((maskbits & PVF_WRITE) != 0 &&
                       (pv->pv_flags & PVF_WRITE) != 0) {
                           KASSERT(pg->mdpage.rw_mappings != 0);
                           pg->mdpage.rw_mappings--;
                           pg->mdpage.ro_mappings++;
                   }
                   splx(s);
       }
   #endif /* PMAP_ALIAS_DEBUG */
                 va = pv->pv_va;                  va = pv->pv_va;
                 pv->pv_flags &= ~maskbits;                  pv->pv_flags &= ~maskbits;
                 ptes = pmap_map_ptes(pv->pv_pmap);      /* locks pmap */                  ptes = pmap_map_ptes(pv->pv_pmap);      /* locks pmap */

Legend:
Removed from v.1.97.4.3  
changed lines
  Added in v.1.97.4.4

CVSweb <webmaster@jp.NetBSD.org>