diff options
author | Ido Barnea <ibarnea@cisco.com> | 2016-08-08 13:07:20 +0300 |
---|---|---|
committer | Ido Barnea <ibarnea@cisco.com> | 2016-08-08 13:07:20 +0300 |
commit | dc56569b146966c17433fef70d4eb5456871dcc6 (patch) | |
tree | 73eb19c9aad6570007fd808e478b7a23f6ca835c /src/dpdk22/lib/librte_eal/common/include/generic/rte_spinlock.h | |
parent | 2067ee3de8e6664e66f872a0b5c6d1b68b99625a (diff) |
removed dpdk22 files
Diffstat (limited to 'src/dpdk22/lib/librte_eal/common/include/generic/rte_spinlock.h')
-rw-r--r-- | src/dpdk22/lib/librte_eal/common/include/generic/rte_spinlock.h | 325 |
1 files changed, 0 insertions, 325 deletions
diff --git a/src/dpdk22/lib/librte_eal/common/include/generic/rte_spinlock.h b/src/dpdk22/lib/librte_eal/common/include/generic/rte_spinlock.h deleted file mode 100644 index 4e0a3c30..00000000 --- a/src/dpdk22/lib/librte_eal/common/include/generic/rte_spinlock.h +++ /dev/null @@ -1,325 +0,0 @@ -/*- - * BSD LICENSE - * - * Copyright(c) 2010-2014 Intel Corporation. All rights reserved. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Intel Corporation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef _RTE_SPINLOCK_H_ -#define _RTE_SPINLOCK_H_ - -/** - * @file - * - * RTE Spinlocks - * - * This file defines an API for read-write locks, which are implemented - * in an architecture-specific way. This kind of lock simply waits in - * a loop repeatedly checking until the lock becomes available. - * - * All locks must be initialised before use, and only initialised once. - * - */ - -#include <rte_lcore.h> -#ifdef RTE_FORCE_INTRINSICS -#include <rte_common.h> -#endif - -/** - * The rte_spinlock_t type. - */ -typedef struct { - volatile int locked; /**< lock status 0 = unlocked, 1 = locked */ -} rte_spinlock_t; - -/** - * A static spinlock initializer. - */ -#define RTE_SPINLOCK_INITIALIZER { 0 } - -/** - * Initialize the spinlock to an unlocked state. - * - * @param sl - * A pointer to the spinlock. - */ -static inline void -rte_spinlock_init(rte_spinlock_t *sl) -{ - sl->locked = 0; -} - -/** - * Take the spinlock. - * - * @param sl - * A pointer to the spinlock. - */ -static inline void -rte_spinlock_lock(rte_spinlock_t *sl); - -#ifdef RTE_FORCE_INTRINSICS -static inline void -rte_spinlock_lock(rte_spinlock_t *sl) -{ - while (__sync_lock_test_and_set(&sl->locked, 1)) - while(sl->locked) - rte_pause(); -} -#endif - -/** - * Release the spinlock. - * - * @param sl - * A pointer to the spinlock. - */ -static inline void -rte_spinlock_unlock (rte_spinlock_t *sl); - -#ifdef RTE_FORCE_INTRINSICS -static inline void -rte_spinlock_unlock (rte_spinlock_t *sl) -{ - __sync_lock_release(&sl->locked); -} -#endif - -/** - * Try to take the lock. - * - * @param sl - * A pointer to the spinlock. - * @return - * 1 if the lock is successfully taken; 0 otherwise. - */ -static inline int -rte_spinlock_trylock (rte_spinlock_t *sl); - -#ifdef RTE_FORCE_INTRINSICS -static inline int -rte_spinlock_trylock (rte_spinlock_t *sl) -{ - return (__sync_lock_test_and_set(&sl->locked,1) == 0); -} -#endif - -/** - * Test if the lock is taken. - * - * @param sl - * A pointer to the spinlock. - * @return - * 1 if the lock is currently taken; 0 otherwise. - */ -static inline int rte_spinlock_is_locked (rte_spinlock_t *sl) -{ - return sl->locked; -} - -/** - * Test if hardware transactional memory (lock elision) is supported - * - * @return - * 1 if the hardware transactional memory is supported; 0 otherwise. - */ -static inline int rte_tm_supported(void); - -/** - * Try to execute critical section in a hardware memory transaction, - * if it fails or not available take the spinlock. - * - * NOTE: An attempt to perform a HW I/O operation inside a hardware memory - * transaction always aborts the transaction since the CPU is not able to - * roll-back should the transaction fail. Therefore, hardware transactional - * locks are not advised to be used around rte_eth_rx_burst() and - * rte_eth_tx_burst() calls. - * - * @param sl - * A pointer to the spinlock. - */ -static inline void -rte_spinlock_lock_tm(rte_spinlock_t *sl); - -/** - * Commit hardware memory transaction or release the spinlock if - * the spinlock is used as a fall-back - * - * @param sl - * A pointer to the spinlock. - */ -static inline void -rte_spinlock_unlock_tm(rte_spinlock_t *sl); - -/** - * Try to execute critical section in a hardware memory transaction, - * if it fails or not available try to take the lock. - * - * NOTE: An attempt to perform a HW I/O operation inside a hardware memory - * transaction always aborts the transaction since the CPU is not able to - * roll-back should the transaction fail. Therefore, hardware transactional - * locks are not advised to be used around rte_eth_rx_burst() and - * rte_eth_tx_burst() calls. - * - * @param sl - * A pointer to the spinlock. - * @return - * 1 if the hardware memory transaction is successfully started - * or lock is successfully taken; 0 otherwise. - */ -static inline int -rte_spinlock_trylock_tm(rte_spinlock_t *sl); - -/** - * The rte_spinlock_recursive_t type. - */ -typedef struct { - rte_spinlock_t sl; /**< the actual spinlock */ - volatile int user; /**< core id using lock, -1 for unused */ - volatile int count; /**< count of time this lock has been called */ -} rte_spinlock_recursive_t; - -/** - * A static recursive spinlock initializer. - */ -#define RTE_SPINLOCK_RECURSIVE_INITIALIZER {RTE_SPINLOCK_INITIALIZER, -1, 0} - -/** - * Initialize the recursive spinlock to an unlocked state. - * - * @param slr - * A pointer to the recursive spinlock. - */ -static inline void rte_spinlock_recursive_init(rte_spinlock_recursive_t *slr) -{ - rte_spinlock_init(&slr->sl); - slr->user = -1; - slr->count = 0; -} - -/** - * Take the recursive spinlock. - * - * @param slr - * A pointer to the recursive spinlock. - */ -static inline void rte_spinlock_recursive_lock(rte_spinlock_recursive_t *slr) -{ - int id = rte_gettid(); - - if (slr->user != id) { - rte_spinlock_lock(&slr->sl); - slr->user = id; - } - slr->count++; -} -/** - * Release the recursive spinlock. - * - * @param slr - * A pointer to the recursive spinlock. - */ -static inline void rte_spinlock_recursive_unlock(rte_spinlock_recursive_t *slr) -{ - if (--(slr->count) == 0) { - slr->user = -1; - rte_spinlock_unlock(&slr->sl); - } - -} - -/** - * Try to take the recursive lock. - * - * @param slr - * A pointer to the recursive spinlock. - * @return - * 1 if the lock is successfully taken; 0 otherwise. - */ -static inline int rte_spinlock_recursive_trylock(rte_spinlock_recursive_t *slr) -{ - int id = rte_gettid(); - - if (slr->user != id) { - if (rte_spinlock_trylock(&slr->sl) == 0) - return 0; - slr->user = id; - } - slr->count++; - return 1; -} - - -/** - * Try to execute critical section in a hardware memory transaction, - * if it fails or not available take the recursive spinlocks - * - * NOTE: An attempt to perform a HW I/O operation inside a hardware memory - * transaction always aborts the transaction since the CPU is not able to - * roll-back should the transaction fail. Therefore, hardware transactional - * locks are not advised to be used around rte_eth_rx_burst() and - * rte_eth_tx_burst() calls. - * - * @param slr - * A pointer to the recursive spinlock. - */ -static inline void rte_spinlock_recursive_lock_tm( - rte_spinlock_recursive_t *slr); - -/** - * Commit hardware memory transaction or release the recursive spinlock - * if the recursive spinlock is used as a fall-back - * - * @param slr - * A pointer to the recursive spinlock. - */ -static inline void rte_spinlock_recursive_unlock_tm( - rte_spinlock_recursive_t *slr); - -/** - * Try to execute critical section in a hardware memory transaction, - * if it fails or not available try to take the recursive lock - * - * NOTE: An attempt to perform a HW I/O operation inside a hardware memory - * transaction always aborts the transaction since the CPU is not able to - * roll-back should the transaction fail. Therefore, hardware transactional - * locks are not advised to be used around rte_eth_rx_burst() and - * rte_eth_tx_burst() calls. - * - * @param slr - * A pointer to the recursive spinlock. - * @return - * 1 if the hardware memory transaction is successfully started - * or lock is successfully taken; 0 otherwise. - */ -static inline int rte_spinlock_recursive_trylock_tm( - rte_spinlock_recursive_t *slr); - -#endif /* _RTE_SPINLOCK_H_ */ |