1*1fb62fb0SOlivier Houchard /* 2*1fb62fb0SOlivier Houchard * Copyright 2010-2015 Samy Al Bahra. 3*1fb62fb0SOlivier Houchard * All rights reserved. 4*1fb62fb0SOlivier Houchard * 5*1fb62fb0SOlivier Houchard * Redistribution and use in source and binary forms, with or without 6*1fb62fb0SOlivier Houchard * modification, are permitted provided that the following conditions 7*1fb62fb0SOlivier Houchard * are met: 8*1fb62fb0SOlivier Houchard * 1. Redistributions of source code must retain the above copyright 9*1fb62fb0SOlivier Houchard * notice, this list of conditions and the following disclaimer. 10*1fb62fb0SOlivier Houchard * 2. Redistributions in binary form must reproduce the above copyright 11*1fb62fb0SOlivier Houchard * notice, this list of conditions and the following disclaimer in the 12*1fb62fb0SOlivier Houchard * documentation and/or other materials provided with the distribution. 13*1fb62fb0SOlivier Houchard * 14*1fb62fb0SOlivier Houchard * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15*1fb62fb0SOlivier Houchard * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16*1fb62fb0SOlivier Houchard * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17*1fb62fb0SOlivier Houchard * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18*1fb62fb0SOlivier Houchard * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19*1fb62fb0SOlivier Houchard * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20*1fb62fb0SOlivier Houchard * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21*1fb62fb0SOlivier Houchard * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22*1fb62fb0SOlivier Houchard * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23*1fb62fb0SOlivier Houchard * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24*1fb62fb0SOlivier Houchard * SUCH DAMAGE. 25*1fb62fb0SOlivier Houchard */ 26*1fb62fb0SOlivier Houchard 27*1fb62fb0SOlivier Houchard #ifndef CK_SPINLOCK_H 28*1fb62fb0SOlivier Houchard #define CK_SPINLOCK_H 29*1fb62fb0SOlivier Houchard 30*1fb62fb0SOlivier Houchard #include "spinlock/anderson.h" 31*1fb62fb0SOlivier Houchard #include "spinlock/cas.h" 32*1fb62fb0SOlivier Houchard #include "spinlock/clh.h" 33*1fb62fb0SOlivier Houchard #include "spinlock/dec.h" 34*1fb62fb0SOlivier Houchard #include "spinlock/fas.h" 35*1fb62fb0SOlivier Houchard #include "spinlock/hclh.h" 36*1fb62fb0SOlivier Houchard #include "spinlock/mcs.h" 37*1fb62fb0SOlivier Houchard #include "spinlock/ticket.h" 38*1fb62fb0SOlivier Houchard 39*1fb62fb0SOlivier Houchard /* 40*1fb62fb0SOlivier Houchard * On tested x86, x86_64, PPC64 and SPARC64 targets, 41*1fb62fb0SOlivier Houchard * ck_spinlock_fas proved to have lowest latency 42*1fb62fb0SOlivier Houchard * in fast path testing or negligible degradation 43*1fb62fb0SOlivier Houchard * from faster but less robust implementations. 44*1fb62fb0SOlivier Houchard */ 45*1fb62fb0SOlivier Houchard #define CK_SPINLOCK_INITIALIZER CK_SPINLOCK_FAS_INITIALIZER 46*1fb62fb0SOlivier Houchard #define ck_spinlock_t ck_spinlock_fas_t 47*1fb62fb0SOlivier Houchard #define ck_spinlock_init(x) ck_spinlock_fas_init(x) 48*1fb62fb0SOlivier Houchard #define ck_spinlock_lock(x) ck_spinlock_fas_lock(x) 49*1fb62fb0SOlivier Houchard #define ck_spinlock_lock_eb(x) ck_spinlock_fas_lock_eb(x) 50*1fb62fb0SOlivier Houchard #define ck_spinlock_unlock(x) ck_spinlock_fas_unlock(x) 51*1fb62fb0SOlivier Houchard #define ck_spinlock_locked(x) ck_spinlock_fas_locked(x) 52*1fb62fb0SOlivier Houchard #define ck_spinlock_trylock(x) ck_spinlock_fas_trylock(x) 53*1fb62fb0SOlivier Houchard 54*1fb62fb0SOlivier Houchard CK_ELIDE_PROTOTYPE(ck_spinlock, ck_spinlock_t, 55*1fb62fb0SOlivier Houchard ck_spinlock_locked, ck_spinlock_lock, 56*1fb62fb0SOlivier Houchard ck_spinlock_locked, ck_spinlock_unlock) 57*1fb62fb0SOlivier Houchard 58*1fb62fb0SOlivier Houchard CK_ELIDE_TRYLOCK_PROTOTYPE(ck_spinlock, ck_spinlock_t, 59*1fb62fb0SOlivier Houchard ck_spinlock_locked, ck_spinlock_trylock) 60*1fb62fb0SOlivier Houchard 61*1fb62fb0SOlivier Houchard #endif /* CK_SPINLOCK_H */ 62