Patch in kfifo add lock (#60)

* 对加锁进行了修改

* bugfix: 解决指针错误的问题

Co-authored-by: longjin <longjin@RinGoTek.cn>
This commit is contained in:
DaJiYuQia 2022-10-15 20:50:47 +08:00 committed by GitHub
parent 39f11c5b4b
commit af37e98979
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,6 +1,7 @@
#pragma once
#include <stdint.h>
#include <common/spinlock.h>
struct kfifo_t
{
@ -76,7 +77,7 @@ int kfifo_alloc(struct kfifo_t *fifo, uint32_t size, uint64_t reserved);
*
* @param fifo fifo队列结构体
*/
void kfifo_free_alloc(struct kfifo_t* fifo);
void kfifo_free_alloc(struct kfifo_t *fifo);
/**
* @brief 使kfifo缓冲队列
@ -116,3 +117,37 @@ uint32_t kfifo_out(struct kfifo_t *fifo, void *to, uint32_t size);
* @return uint32_t
*/
uint32_t kfifo_out_peek(struct kfifo_t *fifo, void *to, uint32_t size);
/**
* @brief kfifo缓冲区推入指定大小的数据并在过程加锁
*
* @param fifo
* @param from
* @param size
* @param lock
* @return uint32_t
*/
uint32_t __always_inline kfifo_in_lockd(struct kfifo_t *fifo, const void *from, uint32_t size, spinlock_t *lock)
{
spin_lock(lock);
uint32_t retval = kfifo_in(&fifo, &from, size);
spin_unlock(lock);
return retval;
}
/**
* @brief kfifo缓冲区取出数据
*
* @param fifo
* @param to
* @param size
* @param lock
* @return uint32_t
*/
uint32_t __always_inline kfifo_out_lockd(struct kfifo_t *fifo, void *to, uint32_t size, spinlock_t *lock)
{
spin_lock(lock);
uint32_t retval = kfifo_out(&fifo, &to, size);
spin_unlock(lock);
return retval;
}