Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
rte_rwlock.h(3)			     DPDK		       rte_rwlock.h(3)

NAME
       rte_rwlock.h

SYNOPSIS
       #include	<errno.h>
       #include	<stdbool.h>
       #include	<rte_branch_prediction.h>
       #include	<rte_common.h>
       #include	<rte_lock_annotations.h>
       #include	<rte_pause.h>
       #include	<rte_stdatomic.h>

   Macros
       #define RTE_RWLOCK_WAIT	 0x1 /*	Writer is waiting */
       #define RTE_RWLOCK_INITIALIZER	{ 0 }

   Functions
       static void rte_rwlock_init (rte_rwlock_t *rwl)
       static void rte_rwlock_read_lock	(rte_rwlock_t *rwl)
	   __rte_no_thread_safety_analysis
       static int rte_rwlock_read_trylock (rte_rwlock_t	*rwl) rwl)
	   __rte_no_thread_safety_analysis
       static void rte_rwlock_read_unlock (rte_rwlock_t	*rwl)
	   __rte_no_thread_safety_analysis
       static int rte_rwlock_write_trylock (rte_rwlock_t *rwl) rwl)
	   __rte_no_thread_safety_analysis
       static void rte_rwlock_write_lock (rte_rwlock_t *rwl)
	   __rte_no_thread_safety_analysis
       static void rte_rwlock_write_unlock (rte_rwlock_t *rwl)
	   __rte_no_thread_safety_analysis
       static int rte_rwlock_write_is_locked (rte_rwlock_t *rwl)
       static void rte_rwlock_read_lock_tm (rte_rwlock_t *rwl)
       static void rte_rwlock_read_unlock_tm (rte_rwlock_t *rwl)
       static void rte_rwlock_write_lock_tm (rte_rwlock_t *rwl)
       static void rte_rwlock_write_unlock_tm (rte_rwlock_t *rwl)

Detailed Description
       RTE Read-Write Locks

       This file defines an API	for read-write locks. The lock is used to
       protect data that allows	multiple readers in parallel, but only one
       writer. All readers are blocked until the writer	is finished writing.

       This version does not give preference to	readers	or writers and does
       not starve either readers or writers.

       See also: https://locklessinc.com/articles/locks/

       Definition in file rte_rwlock.h.

Macro Definition Documentation
   #define RTE_RWLOCK_WAIT   0x1 /* Writer is waiting */
       The rte_rwlock_t	type.

       Readers increment the counter by	RTE_RWLOCK_READ	(4) Writers set	the
       RTE_RWLOCK_WRITE	bit when lock is held and set the RTE_RWLOCK_WAIT bit
       while waiting.

       31 2 1 0	+-------------------+-+-+ | readers | |	|
       +-------------------+-+-+ ^ ^ | | WRITE:	lock held ----/	| WAIT:	writer
       pending --/

       Definition at line 55 of	file rte_rwlock.h.

   #define RTE_RWLOCK_INITIALIZER   { 0	}
       A static	rwlock initializer.

       Definition at line 68 of	file rte_rwlock.h.

Function Documentation
   static void rte_rwlock_init (rte_rwlock_t * rwl) [inline],  [static]
       Initialize the rwlock to	an unlocked state.

       Parameters
	   rwl A pointer to the	rwlock structure.

       Definition at line 77 of	file rte_rwlock.h.

   static void rte_rwlock_read_lock (rte_rwlock_t * rwl) [inline],  [static]
       Take a read lock. Loop until the	lock is	held.

       Note
	   The RW lock isn't recursive,	so calling this	function on the	same
	   lock	twice without releasing	it could potentially result in a
	   deadlock scenario when a write lock is involved.

       Parameters
	   rwl A pointer to a rwlock structure.

       Definition at line 93 of	file rte_rwlock.h.

   static int rte_rwlock_read_trylock (rte_rwlock_t * rwl) [inline],  [static]

       Try to take a read lock.

       Parameters
	   rwl A pointer to a rwlock structure.

       Returns

	    zero if the lock is successfully taken

	    -EBUSY if lock could not be acquired for reading because a	writer
	     holds the lock

       Definition at line 130 of file rte_rwlock.h.

   static void rte_rwlock_read_unlock (rte_rwlock_t * rwl) [inline],  [static]

       Release a read lock.

       Parameters
	   rwl A pointer to the	rwlock structure.

       Definition at line 163 of file rte_rwlock.h.

   static   int	  rte_rwlock_write_trylock   (rte_rwlock_t  *  rwl)  [inline],
       [static]
       Try to take a write lock.

       Parameters
	   rwl A pointer to a rwlock structure.

       Returns

	    zero if the lock is successfully taken

	    -EBUSY if lock could not be acquired for writing because  it  was
	     already locked for	reading	or writing

       Definition at line 181 of file rte_rwlock.h.

   static void rte_rwlock_write_lock (rte_rwlock_t * rwl) [inline],  [static]
       Take a write lock. Loop until the lock is held.

       Parameters
	   rwl A pointer to a rwlock structure.

       Definition at line 203 of file rte_rwlock.h.

   static   void   rte_rwlock_write_unlock   (rte_rwlock_t  *  rwl)  [inline],
       [static]
       Release a write lock.

       Parameters
	   rwl A pointer to a rwlock structure.

       Definition at line 241 of file rte_rwlock.h.

   static  int	rte_rwlock_write_is_locked  (rte_rwlock_t  *  rwl)   [inline],
       [static]
       Test if the write lock is taken.

       Parameters
	   rwl A pointer to a rwlock structure.

       Returns
	   1 if	the write lock is currently taken; 0 otherwise.

       Definition at line 257 of file rte_rwlock.h.

   static   void   rte_rwlock_read_lock_tm   (rte_rwlock_t  *  rwl)  [inline],
       [static]
       Try to execute critical section in a hardware memory transaction, if it
       fails or	not available take a read 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
	   rwl A pointer to a rwlock structure.

   static   void  rte_rwlock_read_unlock_tm  (rte_rwlock_t  *  rwl)  [inline],
       [static]
       Commit hardware memory transaction or release the read lock if the lock
       is used as a fall-back

       Parameters
	   rwl A pointer to the	rwlock structure.

   static  void	 rte_rwlock_write_lock_tm  (rte_rwlock_t  *   rwl)   [inline],
       [static]
       Try to execute critical section in a hardware memory transaction, if it
       fails or	not available take a write 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
	   rwl A pointer to a rwlock structure.

   static  void	 rte_rwlock_write_unlock_tm  (rte_rwlock_t  *  rwl)  [inline],
       [static]
       Commit  hardware	 memory	 transaction  or release the write lock	if the
       lock is used as a fall-back

       Parameters
	   rwl A pointer to a rwlock structure.

Author
       Generated automatically by Doxygen for DPDK from	the source code.

Version	25.11.0			Thu Jun	11 2026		       rte_rwlock.h(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=RTE_RWLOCK_INITIALIZER&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help