[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.94 and 1.95

version 1.94, 2004/03/17 10:21:59 version 1.95, 2004/03/17 10:30:18
Line 162  int sokvawaiters;
Line 162  int sokvawaiters;
   
 static size_t sodopendfree(struct socket *);  static size_t sodopendfree(struct socket *);
 static size_t sodopendfreel(struct socket *);  static size_t sodopendfreel(struct socket *);
   static __inline void sokvareserve(struct socket *, vsize_t);
   static __inline void sokvaunreserve(vsize_t);
   
 /*  static __inline void
  * sokvaalloc: allocate kva for loan.  sokvareserve(struct socket *so, vsize_t len)
  */  
   
 vaddr_t  
 sokvaalloc(vsize_t len, struct socket *so)  
 {  {
         vaddr_t lva;  
         int s;          int s;
   
         /*  
          * reserve kva.  
          */  
   
         s = splvm();          s = splvm();
         simple_lock(&so_pendfree_slock);          simple_lock(&so_pendfree_slock);
         while (socurkva + len > somaxkva) {          while (socurkva + len > somaxkva) {
Line 203  sokvaalloc(vsize_t len, struct socket *s
Line 196  sokvaalloc(vsize_t len, struct socket *s
         socurkva += len;          socurkva += len;
         simple_unlock(&so_pendfree_slock);          simple_unlock(&so_pendfree_slock);
         splx(s);          splx(s);
   }
   
   static __inline void
   sokvaunreserve(vsize_t len)
   {
           int s;
   
           s = splvm();
           simple_lock(&so_pendfree_slock);
           socurkva -= len;
           if (sokvawaiters)
                   wakeup(&socurkva);
           simple_unlock(&so_pendfree_slock);
           splx(s);
   }
   
   /*
    * sokvaalloc: allocate kva for loan.
    */
   
   vaddr_t
   sokvaalloc(vsize_t len, struct socket *so)
   {
           vaddr_t lva;
   
           /*
            * reserve kva.
            */
   
           sokvareserve(so, len);
   
         /*          /*
          * allocate kva.           * allocate kva.
          */           */
   
         lva = uvm_km_valloc_wait(kernel_map, len);          lva = uvm_km_valloc_wait(kernel_map, len);
         if (lva == 0)          if (lva == 0) {
                   sokvaunreserve(len);
                 return (0);                  return (0);
           }
   
         return lva;          return lva;
 }  }
Line 222  sokvaalloc(vsize_t len, struct socket *s
Line 247  sokvaalloc(vsize_t len, struct socket *s
 void  void
 sokvafree(vaddr_t sva, vsize_t len)  sokvafree(vaddr_t sva, vsize_t len)
 {  {
         int s;  
   
         /*          /*
          * free kva.           * free kva.
Line 234  sokvafree(vaddr_t sva, vsize_t len)
Line 258  sokvafree(vaddr_t sva, vsize_t len)
          * unreserve kva.           * unreserve kva.
          */           */
   
         s = splvm();          sokvaunreserve(len);
         simple_lock(&so_pendfree_slock);  
         socurkva -= len;  
         if (sokvawaiters)  
                 wakeup(&socurkva);  
         simple_unlock(&so_pendfree_slock);  
         splx(s);  
 }  }
   
 static void  static void

Legend:
Removed from v.1.94  
changed lines
  Added in v.1.95

CVSweb <webmaster@jp.NetBSD.org>