[BACK]Return to uipc_socket.c CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / sys / kern

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

Diff for /src/sys/kern/uipc_socket.c between version 1.155 and 1.156

version 1.155, 2008/03/21 21:55:00 version 1.156, 2008/03/24 12:24:37
Line 253  sokvafree(vaddr_t sva, vsize_t len)
Line 253  sokvafree(vaddr_t sva, vsize_t len)
 static void  static void
 sodoloanfree(struct vm_page **pgs, void *buf, size_t size)  sodoloanfree(struct vm_page **pgs, void *buf, size_t size)
 {  {
         vaddr_t va, sva, eva;          vaddr_t sva, eva;
         vsize_t len;          vsize_t len;
         paddr_t pa;          int npgs;
         int i, npgs;  
           KASSERT(pgs != NULL);
   
         eva = round_page((vaddr_t) buf + size);          eva = round_page((vaddr_t) buf + size);
         sva = trunc_page((vaddr_t) buf);          sva = trunc_page((vaddr_t) buf);
         len = eva - sva;          len = eva - sva;
         npgs = len >> PAGE_SHIFT;          npgs = len >> PAGE_SHIFT;
   
         if (__predict_false(pgs == NULL)) {  
                 pgs = alloca(npgs * sizeof(*pgs));  
   
                 for (i = 0, va = sva; va < eva; i++, va += PAGE_SIZE) {  
                         if (pmap_extract(pmap_kernel(), va, &pa) == false)  
                                 panic("sodoloanfree: va 0x%lx not mapped", va);  
                         pgs[i] = PHYS_TO_VM_PAGE(pa);  
                 }  
         }  
   
         pmap_kremove(sva, len);          pmap_kremove(sva, len);
         pmap_update(pmap_kernel());          pmap_update(pmap_kernel());
         uvm_unloan(pgs, npgs, UVM_LOAN_TOPAGE);          uvm_unloan(pgs, npgs, UVM_LOAN_TOPAGE);
Line 313  sodopendfreel(void)
Line 304  sodopendfreel(void)
   
                 for (; m != NULL; m = next) {                  for (; m != NULL; m = next) {
                         next = m->m_next;                          next = m->m_next;
                           KASSERT((~m->m_flags & (M_EXT|M_EXT_PAGES)) == 0);
                           KASSERT(m->m_ext.ext_refcnt == 0);
   
                         rv += m->m_ext.ext_size;                          rv += m->m_ext.ext_size;
                         sodoloanfree((m->m_flags & M_EXT_PAGES) ?                          sodoloanfree(m->m_ext.ext_pgs, m->m_ext.ext_buf,
                             m->m_ext.ext_pgs : NULL, m->m_ext.ext_buf,  
                             m->m_ext.ext_size);                              m->m_ext.ext_size);
                         pool_cache_put(mb_cache, m);                          pool_cache_put(mb_cache, m);
                 }                  }
Line 331  void
Line 323  void
 soloanfree(struct mbuf *m, void *buf, size_t size, void *arg)  soloanfree(struct mbuf *m, void *buf, size_t size, void *arg)
 {  {
   
         if (m == NULL) {          KASSERT(m != NULL);
   
                 /*  
                  * called from MEXTREMOVE.  
                  */  
   
                 sodoloanfree(NULL, buf, size);  
                 return;  
         }  
   
         /*          /*
          * postpone freeing mbuf.           * postpone freeing mbuf.
Line 361  sosend_loan(struct socket *so, struct ui
Line 345  sosend_loan(struct socket *so, struct ui
         struct iovec *iov = uio->uio_iov;          struct iovec *iov = uio->uio_iov;
         vaddr_t sva, eva;          vaddr_t sva, eva;
         vsize_t len;          vsize_t len;
         vaddr_t lva, va;          vaddr_t lva;
         int npgs, i, error;          int npgs, error;
           vaddr_t va;
           int i;
   
         if (VMSPACE_IS_KERNEL_P(uio->uio_vmspace))          if (VMSPACE_IS_KERNEL_P(uio->uio_vmspace))
                 return (0);                  return (0);

Legend:
Removed from v.1.155  
changed lines
  Added in v.1.156

CVSweb <webmaster@jp.NetBSD.org>