The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/dev/usbmisc/ugen/ugenbuf.c

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*
    2  * Copyright (c) 2004 The DragonFly Project.
    3  * All rights reserved.
    4  *
    5  * This code is derived from software contributed to The DragonFly Project
    6  * by Matthew Dillon <dillon@backplane.com>.
    7  *
    8  * Redistribution and use in source and binary forms, with or without
    9  * modification, are permitted provided that the following conditions
   10  * are met:
   11  *
   12  * 1. Redistributions of source code must retain the above copyright
   13  *    notice, this list of conditions and the following disclaimer.
   14  * 2. Redistributions in binary form must reproduce the above copyright
   15  *    notice, this list of conditions and the following disclaimer in
   16  *    the documentation and/or other materials provided with the
   17  *    distribution.
   18  * 3. Neither the name of The DragonFly Project nor the names of its
   19  *    contributors may be used to endorse or promote products derived
   20  *    from this software without specific, prior written permission.
   21  *
   22  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
   23  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
   24  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
   25  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE
   26  * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
   27  * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING,
   28  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
   29  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
   30  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   31  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   32  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   33  * SUCH DAMAGE.
   34  *
   35  * $DragonFly: src/sys/dev/usbmisc/ugen/ugenbuf.c,v 1.3 2006/09/05 00:55:43 dillon Exp $
   36  */
   37 
   38 #include <sys/param.h>
   39 #include <sys/systm.h>
   40 #include <sys/kernel.h>
   41 #include <sys/malloc.h>
   42 #include <sys/sysctl.h>
   43 #include "ugenbuf.h"
   44 
   45 static MALLOC_DEFINE(M_UGENBUF, "ugenbufs", "Temporary buffer space");
   46 static void *ugencache_buf;
   47 static int ugencache_size;
   48 
   49 /*
   50  * getugenbuf()
   51  *
   52  *      Allocate a temporary buffer for UGEN.  This routine is called from
   53  *      mainline code only and the BGL is held.
   54  */
   55 void *
   56 getugenbuf(int reqsize, int *bsize)
   57 {
   58     void *buf;
   59 
   60     if (reqsize < 256)
   61         reqsize = 256;
   62     if (reqsize > 262144)
   63         reqsize = 262144;
   64     *bsize = reqsize;
   65 
   66     buf = ugencache_buf;
   67     if (buf == NULL) {
   68         buf = kmalloc(reqsize, M_UGENBUF, M_WAITOK);
   69     } else if (ugencache_size != reqsize) {
   70         ugencache_buf = NULL;
   71         kfree(buf, M_UGENBUF);
   72         buf = kmalloc(reqsize, M_UGENBUF, M_WAITOK);
   73     } else {
   74         buf = ugencache_buf;
   75         ugencache_buf = NULL;
   76     }
   77     return(buf);
   78 }
   79 
   80 /*
   81  * relugenbuf()
   82  *
   83  *      Release a temporary buffer for UGEN.  This routine is called from
   84  *      mainline code only and the BGL is held.
   85  */
   86 void
   87 relugenbuf(void *buf, int bsize)
   88 {
   89     if (ugencache_buf == NULL) {
   90         ugencache_buf = buf;
   91         ugencache_size = bsize;
   92     } else {
   93         kfree(buf, M_UGENBUF);
   94     }
   95 }
   96 

Cache object: 9b2808f69784326e85ce4b12fda5b6d3


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.