From 0a42bb7d236be27e9067fb5d9c70a9333493d262 Mon Sep 17 00:00:00 2001 From: "K. Y. Srinivasan" Date: Tue, 10 May 2011 07:55:31 -0700 Subject: [PATCH] --- yaml --- r: 249547 b: refs/heads/master c: 8f1136aeb474b14db8f420d4919759b46993830b h: refs/heads/master i: 249545: 22fb5cac4765471cdbd5975c7a153b94c7b8ba17 249543: a51158fc820ea18fbde40dec0d51d89dd0b0a2c1 v: v3 --- [refs] | 2 +- trunk/drivers/staging/hv/ring_buffer.c | 83 ++++++++++++-------------- 2 files changed, 38 insertions(+), 47 deletions(-) diff --git a/[refs] b/[refs] index cf7e9489f609..2ed6f14463ad 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: b2a5a58551d74f46b70ab9b7c4801b19fee66e9f +refs/heads/master: 8f1136aeb474b14db8f420d4919759b46993830b diff --git a/trunk/drivers/staging/hv/ring_buffer.c b/trunk/drivers/staging/hv/ring_buffer.c index 8544516a7127..56521fd3c890 100644 --- a/trunk/drivers/staging/hv/ring_buffer.c +++ b/trunk/drivers/staging/hv/ring_buffer.c @@ -199,6 +199,43 @@ void hv_dump_ring_info(struct hv_ring_buffer_info *ring_info, char *prefix) } +/* + * + * hv_copyfrom_ringbuffer() + * + * Helper routine to copy to source from ring buffer. + * Assume there is enough room. Handles wrap-around in src case only!! + * + */ +static u32 hv_copyfrom_ringbuffer( + struct hv_ring_buffer_info *ring_info, + void *dest, + u32 destlen, + u32 start_read_offset) +{ + void *ring_buffer = hv_get_ring_buffer(ring_info); + u32 ring_buffer_size = hv_get_ring_buffersize(ring_info); + + u32 frag_len; + + /* wrap-around detected at the src */ + if (destlen > ring_buffer_size - start_read_offset) { + frag_len = ring_buffer_size - start_read_offset; + + memcpy(dest, ring_buffer + start_read_offset, frag_len); + memcpy(dest + frag_len, ring_buffer, destlen - frag_len); + } else + + memcpy(dest, ring_buffer + start_read_offset, destlen); + + + start_read_offset += destlen; + start_read_offset %= ring_buffer_size; + + return start_read_offset; +} + + static u32 hv_copyto_ringbuffer( @@ -207,14 +244,6 @@ hv_copyto_ringbuffer( void *src, u32 srclen); -static u32 -hv_copyfrom_ringbuffer( - struct hv_ring_buffer_info *ring_info, - void *dest, - u32 destlen, - u32 start_read_offset); - - /* * @@ -504,41 +533,3 @@ hv_copyto_ringbuffer( return start_write_offset; } - -/* - * - * hv_copyfrom_ringbuffer() - * - * Helper routine to copy to source from ring buffer. - * Assume there is enough room. Handles wrap-around in src case only!! - * - */ -static u32 -hv_copyfrom_ringbuffer( - struct hv_ring_buffer_info *ring_info, - void *dest, - u32 destlen, - u32 start_read_offset) -{ - void *ring_buffer = hv_get_ring_buffer(ring_info); - u32 ring_buffer_size = hv_get_ring_buffersize(ring_info); - - u32 frag_len; - - /* wrap-around detected at the src */ - if (destlen > ring_buffer_size - start_read_offset) { - frag_len = ring_buffer_size - start_read_offset; - - memcpy(dest, ring_buffer + start_read_offset, frag_len); - memcpy(dest + frag_len, ring_buffer, destlen - frag_len); - } else - - memcpy(dest, ring_buffer + start_read_offset, destlen); - - - start_read_offset += destlen; - start_read_offset %= ring_buffer_size; - - return start_read_offset; -} -