Commit a5b9e2c1 authored by Andi Kleen's avatar Andi Kleen Committed by Linus Torvalds

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: default avatarAndi Kleen <ak@linux.intel.com>
Acked-by: default avatarStefani 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: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 64ce1037
...@@ -113,6 +113,9 @@ extern unsigned int kfifo_in(struct kfifo *fifo, ...@@ -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) ...@@ -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)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment