DPDK  24.07.0
Data Structures | Macros | Functions
rte_spinlock.h File Reference
#include <rte_lcore.h>
#include <rte_lock_annotations.h>
#include <rte_pause.h>
#include <rte_stdatomic.h>

Go to the source code of this file.

Data Structures

struct  rte_spinlock_t
 
struct  rte_spinlock_recursive_t
 

Macros

#define RTE_SPINLOCK_INITIALIZER   { 0 }
 
#define RTE_SPINLOCK_RECURSIVE_INITIALIZER   {RTE_SPINLOCK_INITIALIZER, -1, 0}
 

Functions

static void rte_spinlock_init (rte_spinlock_t *sl)
 
static void rte_spinlock_lock (rte_spinlock_t *sl)
 
static void rte_spinlock_unlock (rte_spinlock_t *sl)
 
static __rte_warn_unused_result int rte_spinlock_trylock (rte_spinlock_t *sl) sl)
 
static int rte_spinlock_is_locked (rte_spinlock_t *sl)
 
static int rte_tm_supported (void)
 
static void rte_spinlock_lock_tm (rte_spinlock_t *sl)
 
static void rte_spinlock_unlock_tm (rte_spinlock_t *sl)
 
static __rte_warn_unused_result int rte_spinlock_trylock_tm (rte_spinlock_t *sl) sl)
 
static void rte_spinlock_recursive_init (rte_spinlock_recursive_t *slr)
 
static void rte_spinlock_recursive_lock (rte_spinlock_recursive_t *slr) __rte_no_thread_safety_analysis
 
static void rte_spinlock_recursive_unlock (rte_spinlock_recursive_t *slr) __rte_no_thread_safety_analysis
 
static __rte_warn_unused_result int rte_spinlock_recursive_trylock (rte_spinlock_recursive_t *slr) __rte_no_thread_safety_analysis
 
static void rte_spinlock_recursive_lock_tm (rte_spinlock_recursive_t *slr)
 
static void rte_spinlock_recursive_unlock_tm (rte_spinlock_recursive_t *slr)
 
static __rte_warn_unused_result int rte_spinlock_recursive_trylock_tm (rte_spinlock_recursive_t *slr)
 

Detailed Description

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.

Definition in file rte_spinlock.h.

Macro Definition Documentation

◆ RTE_SPINLOCK_INITIALIZER

#define RTE_SPINLOCK_INITIALIZER   { 0 }

A static spinlock initializer.

Definition at line 38 of file rte_spinlock.h.

◆ RTE_SPINLOCK_RECURSIVE_INITIALIZER

#define RTE_SPINLOCK_RECURSIVE_INITIALIZER   {RTE_SPINLOCK_INITIALIZER, -1, 0}

A static recursive spinlock initializer.

Definition at line 203 of file rte_spinlock.h.

Function Documentation

◆ rte_spinlock_init()

static void rte_spinlock_init ( rte_spinlock_t sl)
inlinestatic

◆ rte_spinlock_lock()

static void rte_spinlock_lock ( rte_spinlock_t sl)
inlinestatic

◆ rte_spinlock_unlock()

static void rte_spinlock_unlock ( rte_spinlock_t sl)
inlinestatic

◆ rte_spinlock_trylock()

static __rte_warn_unused_result int rte_spinlock_trylock ( rte_spinlock_t sl)
inlinestatic

Try to take the lock.

Parameters
slA pointer to the spinlock.
Returns
1 if the lock is successfully taken; 0 otherwise.
Examples:
examples/bond/main.c, and examples/ethtool/ethtool-app/main.c.

◆ rte_spinlock_is_locked()

static int rte_spinlock_is_locked ( rte_spinlock_t sl)
inlinestatic

Test if the lock is taken.

Parameters
slA pointer to the spinlock.
Returns
1 if the lock is currently taken; 0 otherwise.

Definition at line 129 of file rte_spinlock.h.

◆ rte_tm_supported()

static int rte_tm_supported ( void  )
inlinestatic

Test if hardware transactional memory (lock elision) is supported

Returns
1 if the hardware transactional memory is supported; 0 otherwise.

◆ rte_spinlock_lock_tm()

static void rte_spinlock_lock_tm ( rte_spinlock_t sl)
inlinestatic

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.

Parameters
slA pointer to the spinlock.

◆ rte_spinlock_unlock_tm()

static void rte_spinlock_unlock_tm ( rte_spinlock_t sl)
inlinestatic

Commit hardware memory transaction or release the spinlock if the spinlock is used as a fall-back

Parameters
slA pointer to the spinlock.

◆ rte_spinlock_trylock_tm()

static __rte_warn_unused_result int rte_spinlock_trylock_tm ( rte_spinlock_t sl)
inlinestatic

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.

Parameters
slA pointer to the spinlock.
Returns
1 if the hardware memory transaction is successfully started or lock is successfully taken; 0 otherwise.

◆ rte_spinlock_recursive_init()

static void rte_spinlock_recursive_init ( rte_spinlock_recursive_t slr)
inlinestatic

Initialize the recursive spinlock to an unlocked state.

Parameters
slrA pointer to the recursive spinlock.

Definition at line 211 of file rte_spinlock.h.

◆ rte_spinlock_recursive_lock()

static void rte_spinlock_recursive_lock ( rte_spinlock_recursive_t slr)
inlinestatic

Take the recursive spinlock.

Parameters
slrA pointer to the recursive spinlock.

Definition at line 224 of file rte_spinlock.h.

◆ rte_spinlock_recursive_unlock()

static void rte_spinlock_recursive_unlock ( rte_spinlock_recursive_t slr)
inlinestatic

Release the recursive spinlock.

Parameters
slrA pointer to the recursive spinlock.

Definition at line 241 of file rte_spinlock.h.

◆ rte_spinlock_recursive_trylock()

static __rte_warn_unused_result int rte_spinlock_recursive_trylock ( rte_spinlock_recursive_t slr)
inlinestatic

Try to take the recursive lock.

Parameters
slrA pointer to the recursive spinlock.
Returns
1 if the lock is successfully taken; 0 otherwise.

Definition at line 260 of file rte_spinlock.h.

◆ rte_spinlock_recursive_lock_tm()

static void rte_spinlock_recursive_lock_tm ( rte_spinlock_recursive_t slr)
inlinestatic

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.

Parameters
slrA pointer to the recursive spinlock.

◆ rte_spinlock_recursive_unlock_tm()

static void rte_spinlock_recursive_unlock_tm ( rte_spinlock_recursive_t slr)
inlinestatic

Commit hardware memory transaction or release the recursive spinlock if the recursive spinlock is used as a fall-back

Parameters
slrA pointer to the recursive spinlock.

◆ rte_spinlock_recursive_trylock_tm()

static __rte_warn_unused_result int rte_spinlock_recursive_trylock_tm ( rte_spinlock_recursive_t slr)
inlinestatic

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.

Parameters
slrA pointer to the recursive spinlock.
Returns
1 if the hardware memory transaction is successfully started or lock is successfully taken; 0 otherwise.