diff options
Diffstat (limited to 'framework/src/suricata/src/threads-arch-tile.h')
-rw-r--r-- | framework/src/suricata/src/threads-arch-tile.h | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/framework/src/suricata/src/threads-arch-tile.h b/framework/src/suricata/src/threads-arch-tile.h new file mode 100644 index 00000000..d022d90e --- /dev/null +++ b/framework/src/suricata/src/threads-arch-tile.h @@ -0,0 +1,114 @@ +/* Copyright (C) 2011-2013 Open Information Security Foundation + * + * You can copy, redistribute or modify this Program under the terms of + * the GNU General Public License version 2 as published by the Free + * Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * version 2 along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + * 02110-1301, USA. + */ + +/** + * \file + * + * \author Ken Steele, Tilera Corporation <suricata@tilera.com> + */ + +#ifndef __THREADS_ARCH_TILE_H__ +#define __THREADS_ARCH_TILE_H__ + +#include <tmc/spin.h> +#include <arch/cycle.h> + +/* NOTE: On Tilera datapath threads use the TMC (Tilera Multicore + * Components) library spin mutexes while the control threads use + * pthread mutexes. So the pthread mutex types are split out so that + * their use can be differentiated. + */ + +/* ctrl mutex */ +#define SCCtrlMutex pthread_mutex_t +#define SCCtrlMutexAttr pthread_mutexattr_t +#define SCCtrlMutexInit(mut, mutattr ) pthread_mutex_init(mut, mutattr) +#define SCCtrlMutexLock(mut) pthread_mutex_lock(mut) +#define SCCtrlMutexTrylock(mut) pthread_mutex_trylock(mut) +#define SCCtrlMutexUnlock(mut) pthread_mutex_unlock(mut) +#define SCCtrlMutexDestroy pthread_mutex_destroy + +/* ctrl cond */ +#define SCCtrlCondT pthread_cond_t +#define SCCtrlCondInit pthread_cond_init +#define SCCtrlCondSignal pthread_cond_signal +#define SCCtrlCondTimedwait pthread_cond_timedwait +#define SCCtrlCondWait pthread_cond_wait +#define SCCtrlCondDestroy pthread_cond_destroy + +/* mutex */ + +#define SCMutex tmc_spin_queued_mutex_t +#define SCMutexAttr +#define SCMutexDestroy(x) ({ (void)(x); 0; }) +#define SCMUTEX_INITIALIZER TMC_SPIN_QUEUED_MUTEX_INIT +#define SCMutexInit(mut, mutattr) ({ \ + int ret = 0; \ + tmc_spin_queued_mutex_init(mut); \ + ret; \ +}) +#define SCMutexLock(mut) ({ \ + int ret = 0; \ + tmc_spin_queued_mutex_lock(mut); \ + ret; \ +}) +#define SCMutexTrylock(mut) ({ \ + int ret = (tmc_spin_queued_mutex_trylock(mut) == 0) ? 0 : EBUSY; \ + ret; \ +}) +#define SCMutexUnlock(mut) ({ \ + int ret = 0; \ + tmc_spin_queued_mutex_unlock(mut); \ + ret; \ +}) + +/* conditions */ + +/* Ignore signals when using spin locks */ +#define SCCondT uint8_t +#define SCCondInit(x,y) ({ 0; }) +#define SCCondSignal(x) ({ 0; }) +#define SCCondDestroy(x) ({ 0; }) + +static inline void cycle_sleep(int cycles) +{ + uint64_t end = get_cycle_count() + cycles; + while (get_cycle_count() < end) + ; +} +#define SCCondWait(x,y) cycle_sleep(300) + +/* spinlocks */ + +#define SCSpinlock tmc_spin_queued_mutex_t +#define SCSpinLock(spin) ({ tmc_spin_queued_mutex_lock(spin); 0; }) +#define SCSpinTrylock(spin) (tmc_spin_queued_mutex_trylock(spin) ? EBUSY : 0) +#define SCSpinUnlock(spin) ({ tmc_spin_queued_mutex_unlock(spin); 0; }) +#define SCSpinInit(spin, spin_attr) ({ tmc_spin_queued_mutex_init(spin); 0; }) +#define SCSpinDestroy(spin) ({ (void)(spin); 0; }) + +/* rwlocks */ + +#define SCRWLock tmc_spin_rwlock_t +#define SCRWLockDestroy(x) ({ (void)(x); 0; }) +#define SCRWLockInit(rwl, rwlattr ) ({ tmc_spin_rwlock_init(rwl); 0; }) +#define SCRWLockWRLock(rwl) ({ tmc_spin_rwlock_wrlock(rwl); 0; }) +#define SCRWLockRDLock(rwl) ({ tmc_spin_rwlock_rdlock(rwl); 0; }) +#define SCRWLockTryWRLock(rwl) (tmc_spin_rwlock_trywrlock(rwl) ? EBUSY : 0) +#define SCRWLockTryRDLock(rwl) (tmc_spin_rwlock_tryrdlock(rwl) ? EBUSY : 0) +#define SCRWLockUnlock(rwl) ({ tmc_spin_rwlock_unlock(rwl); 0; }) +#endif |