mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-24 12:30:53 +07:00
kfifo: add kfifo_out_peek
In some upcoming code it's useful to peek into a FIFO without permanentely removing data. This patch implements a new kfifo_out_peek() to do this. Signed-off-by: Andi Kleen <ak@linux.intel.com> Acked-by: Stefani Seibold <stefani@seibold.net> Cc: Roland Dreier <rdreier@cisco.com> Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com> Cc: Andy Walls <awalls@radix.net> Cc: Vikram Dhillon <dhillonv10@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
64ce1037c5
commit
a5b9e2c106
@ -113,6 +113,9 @@ extern unsigned int kfifo_in(struct kfifo *fifo,
|
|||||||
const void *from, unsigned int len);
|
const void *from, unsigned int len);
|
||||||
extern __must_check unsigned int kfifo_out(struct kfifo *fifo,
|
extern __must_check unsigned int kfifo_out(struct kfifo *fifo,
|
||||||
void *to, unsigned int len);
|
void *to, unsigned int len);
|
||||||
|
extern __must_check unsigned int kfifo_out_peek(struct kfifo *fifo,
|
||||||
|
void *to, unsigned int len, unsigned offset);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* kfifo_reset - removes the entire FIFO contents
|
* kfifo_reset - removes the entire FIFO contents
|
||||||
|
@ -302,6 +302,27 @@ unsigned int kfifo_out(struct kfifo *fifo, void *to, unsigned int len)
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL(kfifo_out);
|
EXPORT_SYMBOL(kfifo_out);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* kfifo_out_peek - copy some data from the FIFO, but do not remove it
|
||||||
|
* @fifo: the fifo to be used.
|
||||||
|
* @to: where the data must be copied.
|
||||||
|
* @len: the size of the destination buffer.
|
||||||
|
* @offset: offset into the fifo
|
||||||
|
*
|
||||||
|
* This function copies at most @len bytes at @offset from the FIFO
|
||||||
|
* into the @to buffer and returns the number of copied bytes.
|
||||||
|
* The data is not removed from the FIFO.
|
||||||
|
*/
|
||||||
|
unsigned int kfifo_out_peek(struct kfifo *fifo, void *to, unsigned int len,
|
||||||
|
unsigned offset)
|
||||||
|
{
|
||||||
|
len = min(kfifo_len(fifo), len + offset);
|
||||||
|
|
||||||
|
__kfifo_out_data(fifo, to, len, offset);
|
||||||
|
return len;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(kfifo_out_peek);
|
||||||
|
|
||||||
unsigned int __kfifo_out_generic(struct kfifo *fifo,
|
unsigned int __kfifo_out_generic(struct kfifo *fifo,
|
||||||
void *to, unsigned int len, unsigned int recsize,
|
void *to, unsigned int len, unsigned int recsize,
|
||||||
unsigned int *total)
|
unsigned int *total)
|
||||||
|
Loading…
Reference in New Issue
Block a user