|  | // 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__ */ |