Locks

An API for creating and using a software lock/mutex.

Defines

METAL_LOCK_BACKOFF_CYCLES
METAL_LOCK_BACKOFF_EXPONENT
METAL_LOCK_DECLARE(name)

Declare a lock.

Locks must be declared with METAL_LOCK_DECLARE to ensure that the lock is linked into a memory region which supports atomic memory operations.

Functions

__inline__ int metal_lock_init(struct metal_lock *lock)

Initialize a lock.

If the lock cannot be initialized, attempts to take or give the lock will result in a Store/AMO access fault.

Return

0 if the lock is successfully initialized. A non-zero code indicates failure.

Parameters
  • lock: The handle for a lock

__inline__ int metal_lock_take(struct metal_lock *lock)

Take a lock.

If the lock initialization failed, attempts to take a lock will result in a Store/AMO access fault.

Return

0 if the lock is successfully taken

Parameters
  • lock: The handle for a lock

__inline__ int metal_lock_give(struct metal_lock *lock)

Give back a held lock.

If the lock initialization failed, attempts to give a lock will result in a Store/AMO access fault.

Return

0 if the lock is successfully given

Parameters
  • lock: The handle for a lock

struct metal_lock
#include <lock.h>

A handle for a lock.