root/arch/i386/include/mutex.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


    1 /*      $OpenBSD: mutex.h,v 1.3 2005/07/18 02:43:25 fgsch Exp $ */
    2 
    3 /*
    4  * Copyright (c) 2004 Artur Grabowski <art@openbsd.org>
    5  * All rights reserved. 
    6  *
    7  * Redistribution and use in source and binary forms, with or without 
    8  * modification, are permitted provided that the following conditions 
    9  * are met: 
   10  *
   11  * 1. Redistributions of source code must retain the above copyright 
   12  *    notice, this list of conditions and the following disclaimer. 
   13  * 2. The name of the author may not be used to endorse or promote products
   14  *    derived from this software without specific prior written permission. 
   15  *
   16  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
   17  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
   18  * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
   19  * THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
   20  * EXEMPLARY, OR CONSEQUENTIAL  DAMAGES (INCLUDING, BUT NOT LIMITED TO,
   21  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
   22  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
   23  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
   24  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
   25  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
   26  */
   27 #ifndef _I386_MUTEX_H_
   28 #define _I386_MUTEX_H_
   29 
   30 /*
   31  * XXX - we don't really need the mtx_lock field, we can use mtx_oldipl
   32  *       as the lock to save some space.
   33  */
   34 struct mutex {
   35         __volatile int mtx_lock;
   36         int mtx_wantipl;
   37         int mtx_oldipl;
   38         void *mtx_owner;
   39 };
   40 
   41 #define MUTEX_INITIALIZER(IPL) { 0, (IPL), 0, NULL }
   42 
   43 #define MUTEX_ASSERT_LOCKED(mtx) do {                                   \
   44         if ((mtx)->mtx_lock != 1 ||                                     \
   45             (mtx)->mtx_owner != curcpu())                               \
   46                 panic("mutex %p not held in %s", (mtx), __func__);      \
   47 } while (0)
   48 
   49 #define MUTEX_ASSERT_UNLOCKED(mtx) do {                                 \
   50         if ((mtx)->mtx_lock == 1 &&                                     \
   51             (mtx)->mtx_owner == curcpu())                               \
   52                 panic("mutex %p held in %s", (mtx), __func__);          \
   53 } while (0)
   54 
   55 #define MUTEX_OLDIPL(mtx)       (mtx)->mtx_oldipl
   56 
   57 #endif

/* [<][>][^][v][top][bottom][index][help] */