blob: 82973726b101335a717800b6de087169539ae98f [file] [log] [blame]
// SPDX-License-Identifier: GPL-2.0
/*
* Copyright (c) 2019-20 RedHat, Inc.
* All Rights Reserved.
*/
#ifndef __LIBXFS_SPINLOCK_H__
#define __LIBXFS_SPINLOCK_H__
/*
* This implements kernel compatible spinlock exclusion semantics. These,
* however, are not spinlocks, as spinlocks cannot be reliably implemented in
* userspace without using realtime scheduling task contexts. Hence this
* interface is implemented with pthread mutexes and so can block, but this is
* no different to the kernel RT build which replaces spinlocks with mutexes.
* Hence we know it works.
*/
typedef pthread_mutex_t spinlock_t;
#define spin_lock_init(l) pthread_mutex_init(l, NULL)
#define spin_lock(l) pthread_mutex_lock(l)
#define spin_trylock(l) (pthread_mutex_trylock(l) != EBUSY)
#define spin_unlock(l) pthread_mutex_unlock(l)
#endif /* __LIBXFS_SPINLOCK_H__ */