mirror of
https://github.com/torvalds/linux.git
synced 2024-11-17 01:22:07 +00:00
kfifo: provide noirqsave variants of spinlocked in and out helpers
Provide variants of spinlocked kfifo_in() and kfifo_out() routines which don't disable interrupts. Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com> Acked-by: Stefani Seibold <stefani@seibold.net>
This commit is contained in:
parent
47203198ed
commit
3f2e4c11e1
@ -517,6 +517,26 @@ __kfifo_uint_must_check_helper( \
|
||||
__ret; \
|
||||
})
|
||||
|
||||
/**
|
||||
* kfifo_in_spinlocked_noirqsave - put data into fifo using a spinlock for
|
||||
* locking, don't disable interrupts
|
||||
* @fifo: address of the fifo to be used
|
||||
* @buf: the data to be added
|
||||
* @n: number of elements to be added
|
||||
* @lock: pointer to the spinlock to use for locking
|
||||
*
|
||||
* This is a variant of kfifo_in_spinlocked() but uses spin_lock/unlock()
|
||||
* for locking and doesn't disable interrupts.
|
||||
*/
|
||||
#define kfifo_in_spinlocked_noirqsave(fifo, buf, n, lock) \
|
||||
({ \
|
||||
unsigned int __ret; \
|
||||
spin_lock(lock); \
|
||||
__ret = kfifo_in(fifo, buf, n); \
|
||||
spin_unlock(lock); \
|
||||
__ret; \
|
||||
})
|
||||
|
||||
/* alias for kfifo_in_spinlocked, will be removed in a future release */
|
||||
#define kfifo_in_locked(fifo, buf, n, lock) \
|
||||
kfifo_in_spinlocked(fifo, buf, n, lock)
|
||||
@ -569,6 +589,28 @@ __kfifo_uint_must_check_helper( \
|
||||
}) \
|
||||
)
|
||||
|
||||
/**
|
||||
* kfifo_out_spinlocked_noirqsave - get data from the fifo using a spinlock
|
||||
* for locking, don't disable interrupts
|
||||
* @fifo: address of the fifo to be used
|
||||
* @buf: pointer to the storage buffer
|
||||
* @n: max. number of elements to get
|
||||
* @lock: pointer to the spinlock to use for locking
|
||||
*
|
||||
* This is a variant of kfifo_out_spinlocked() which uses spin_lock/unlock()
|
||||
* for locking and doesn't disable interrupts.
|
||||
*/
|
||||
#define kfifo_out_spinlocked_noirqsave(fifo, buf, n, lock) \
|
||||
__kfifo_uint_must_check_helper( \
|
||||
({ \
|
||||
unsigned int __ret; \
|
||||
spin_lock(lock); \
|
||||
__ret = kfifo_out(fifo, buf, n); \
|
||||
spin_unlock(lock); \
|
||||
__ret; \
|
||||
}) \
|
||||
)
|
||||
|
||||
/* alias for kfifo_out_spinlocked, will be removed in a future release */
|
||||
#define kfifo_out_locked(fifo, buf, n, lock) \
|
||||
kfifo_out_spinlocked(fifo, buf, n, lock)
|
||||
|
Loading…
Reference in New Issue
Block a user