[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.1 and 1.97.4.2

version 1.97.4.1, 2002/07/31 00:23:17 version 1.97.4.2, 2002/11/16 10:03:47
Line 2534  pmap_protect(struct pmap *pmap, vaddr_t 
Line 2534  pmap_protect(struct pmap *pmap, vaddr_t 
 {  {
         pt_entry_t *pte = NULL, *ptes;          pt_entry_t *pte = NULL, *ptes;
         struct vm_page *pg;          struct vm_page *pg;
         int armprot;  
         int flush = 0;          int flush = 0;
         paddr_t pa;  
   
         PDEBUG(0, printf("pmap_protect: pmap=%p %08lx->%08lx %x\n",          PDEBUG(0, printf("pmap_protect: pmap=%p %08lx->%08lx %x\n",
             pmap, sva, eva, prot));              pmap, sva, eva, prot));
   
         if (~prot & VM_PROT_READ) {          if (~prot & VM_PROT_READ) {
                 /* Just remove the mappings. */                  /*
                    * Just remove the mappings.  pmap_update() is not required
                    * here since the caller should do it.
                    */
                 pmap_remove(pmap, sva, eva);                  pmap_remove(pmap, sva, eva);
                 /* pmap_update not needed as it should be called by the caller  
                  * of pmap_protect */  
                 return;                  return;
         }          }
         if (prot & VM_PROT_WRITE) {          if (prot & VM_PROT_WRITE) {
Line 2596  pmap_protect(struct pmap *pmap, vaddr_t 
Line 2595  pmap_protect(struct pmap *pmap, vaddr_t 
   
                 flush = 1;                  flush = 1;
   
                 armprot = 0;                  *pte &= ~L2_S_PROT_W;           /* clear write bit */
                 if (sva < VM_MAXUSER_ADDRESS)  
                         armprot |= L2_S_PROT_U;  
                 else if (sva < VM_MAX_ADDRESS)  
                         armprot |= L2_S_PROT_W;  /* XXX Ekk what is this ? */  
                 *pte = (*pte & 0xfffff00f) | armprot;  
   
                 pa = pmap_pte_pa(pte);  
   
                 /* Get the physical page index */  
   
                 /* Clear write flag */                  /* Clear write flag */
                 if ((pg = PHYS_TO_VM_PAGE(pa)) != NULL) {                  if ((pg = PHYS_TO_VM_PAGE(pmap_pte_pa(pte))) != NULL) {
                         simple_lock(&pg->mdpage.pvh_slock);                          simple_lock(&pg->mdpage.pvh_slock);
                         (void) pmap_modify_pv(pmap, sva, pg, PVF_WRITE, 0);                          (void) pmap_modify_pv(pmap, sva, pg, PVF_WRITE, 0);
                         pmap_vac_me_harder(pmap, pg, ptes, FALSE);                          pmap_vac_me_harder(pmap, pg, ptes, FALSE);
                         simple_unlock(&pg->mdpage.pvh_slock);                          simple_unlock(&pg->mdpage.pvh_slock);
                 }                  }
   
 next:   next:
                 sva += NBPG;                  sva += NBPG;
                 pte++;                  pte++;
         }          }

Legend:
Removed from v.1.97.4.1  
changed lines
  Added in v.1.97.4.2

CVSweb <webmaster@jp.NetBSD.org>