Diff for /src/sys/i386/i386/Attic/pmap.c between versions 1.32 and 1.33

version 1.32, 2004/03/01 06:33:16 version 1.33, 2004/04/01 17:58:00
Line 689  pmap_extract_vmpage(pmap_t pmap, vm_offs Line 689  pmap_extract_vmpage(pmap_t pmap, vm_offs
  * note that in order for the mapping to take effect -- you   * note that in order for the mapping to take effect -- you
  * should do a invltlb after doing the pmap_kenter...   * should do a invltlb after doing the pmap_kenter...
  */   */
 PMAP_INLINE void   void 
 pmap_kenter(vm_offset_t va, vm_paddr_t pa)  pmap_kenter(vm_offset_t va, vm_paddr_t pa)
 {  {
         unsigned *pte;          unsigned *pte;
Line 704  pmap_kenter(vm_offset_t va, vm_paddr_t p Line 704  pmap_kenter(vm_offset_t va, vm_paddr_t p
         pmap_inval_flush(&info);          pmap_inval_flush(&info);
 }  }
   
   void
   pmap_kenter_quick(vm_offset_t va, vm_paddr_t pa)
   {
           unsigned *pte;
           unsigned npte;
   
           npte = pa | PG_RW | PG_V | pgeflag;
           pte = (unsigned *)vtopte(va);
           *pte = npte;
           cpu_invlpg((void *)va);
   }
   
   void
   pmap_kenter_sync(vm_offset_t va)
   {
           pmap_inval_info info;
   
           pmap_inval_init(&info);
           pmap_inval_add(&info, kernel_pmap, va);
           pmap_inval_flush(&info);
   }
   
   void
   pmap_kenter_sync_quick(vm_offset_t va)
   {
           cpu_invlpg((void *)va);
   }
   
 /*  /*
  * remove a page from the kernel pagetables   * remove a page from the kernel pagetables
  */   */
 PMAP_INLINE void  void
 pmap_kremove(vm_offset_t va)  pmap_kremove(vm_offset_t va)
 {  {
         unsigned *pte;          unsigned *pte;
Line 720  pmap_kremove(vm_offset_t va) Line 748  pmap_kremove(vm_offset_t va)
         pmap_inval_flush(&info);          pmap_inval_flush(&info);
 }  }
   
   void
   pmap_kremove_quick(vm_offset_t va)
   {
           unsigned *pte;
           pte = (unsigned *)vtopte(va);
           *pte = 0;
           cpu_invlpg((void *)va);
   }
   
 /*  /*
  *      Used to map a range of physical addresses into kernel   *      Used to map a range of physical addresses into kernel
  *      virtual address space.   *      virtual address space.
Line 870  pmap_swapout_proc(struct proc *p) Line 907  pmap_swapout_proc(struct proc *p)
                         panic("pmap_swapout_proc: upage already missing???");                          panic("pmap_swapout_proc: upage already missing???");
                 vm_page_dirty(m);                  vm_page_dirty(m);
                 vm_page_unwire(m, 0);                  vm_page_unwire(m, 0);
                 pmap_kremove( (vm_offset_t) p->p_addr + PAGE_SIZE * i);                  pmap_kremove((vm_offset_t)p->p_addr + (PAGE_SIZE * i));
         }          }
 #endif  #endif
 }  }
Line 891  pmap_swapin_proc(struct proc *p) Line 928  pmap_swapin_proc(struct proc *p)
   
                 m = vm_page_grab(upobj, i, VM_ALLOC_NORMAL | VM_ALLOC_RETRY);                  m = vm_page_grab(upobj, i, VM_ALLOC_NORMAL | VM_ALLOC_RETRY);
   
                 pmap_kenter(((vm_offset_t) p->p_addr) + i * PAGE_SIZE,                  pmap_kenter((vm_offset_t)p->p_addr + (i * PAGE_SIZE),
                         VM_PAGE_TO_PHYS(m));                          VM_PAGE_TO_PHYS(m));
   
                 if (m->valid != VM_PAGE_BITS_ALL) {                  if (m->valid != VM_PAGE_BITS_ALL) {
Line 1001  pmap_pinit0(struct pmap *pmap) Line 1038  pmap_pinit0(struct pmap *pmap)
 {  {
         pmap->pm_pdir =          pmap->pm_pdir =
                 (pd_entry_t *)kmem_alloc_pageable(kernel_map, PAGE_SIZE);                  (pd_entry_t *)kmem_alloc_pageable(kernel_map, PAGE_SIZE);
         pmap_kenter((vm_offset_t) pmap->pm_pdir, (vm_offset_t) IdlePTD);          pmap_kenter((vm_offset_t)pmap->pm_pdir, (vm_offset_t) IdlePTD);
         pmap->pm_count = 1;          pmap->pm_count = 1;
         pmap->pm_active = 0;          pmap->pm_active = 0;
         pmap->pm_ptphint = NULL;          pmap->pm_ptphint = NULL;
Line 1046  pmap_pinit(struct pmap *pmap) Line 1083  pmap_pinit(struct pmap *pmap)
         vm_page_flag_clear(ptdpg, PG_MAPPED | PG_BUSY); /* not usually mapped*/          vm_page_flag_clear(ptdpg, PG_MAPPED | PG_BUSY); /* not usually mapped*/
         ptdpg->valid = VM_PAGE_BITS_ALL;          ptdpg->valid = VM_PAGE_BITS_ALL;
   
         pmap_kenter((vm_offset_t) pmap->pm_pdir, VM_PAGE_TO_PHYS(ptdpg));          pmap_kenter((vm_offset_t)pmap->pm_pdir, VM_PAGE_TO_PHYS(ptdpg));
         if ((ptdpg->flags & PG_ZERO) == 0)          if ((ptdpg->flags & PG_ZERO) == 0)
                 bzero(pmap->pm_pdir, PAGE_SIZE);                  bzero(pmap->pm_pdir, PAGE_SIZE);
   
Line 1107  pmap_release_free_page(struct pmap *pmap Line 1144  pmap_release_free_page(struct pmap *pmap
                 bzero(pde + KPTDI, nkpt * PTESIZE);                  bzero(pde + KPTDI, nkpt * PTESIZE);
                 pde[MPPTDI] = 0;                  pde[MPPTDI] = 0;
                 pde[APTDPTDI] = 0;                  pde[APTDPTDI] = 0;
                 pmap_kremove((vm_offset_t) pmap->pm_pdir);                  pmap_kremove((vm_offset_t)pmap->pm_pdir);
         }          }
   
         if (pmap->pm_ptphint && (pmap->pm_ptphint->pindex == p->pindex))          if (pmap->pm_ptphint && (pmap->pm_ptphint->pindex == p->pindex))

Removed from v.1.32  
changed lines
  Added in v.1.33