Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1475043

[PATCH 3/7] Drivers: hv: ring_buffer: use wrap around mappings in hv_copy{from,to}_ringbuffer()

From kys@exchange.microsoft.com
Newsgroups linux.kernel
Subject [PATCH 3/7] Drivers: hv: ring_buffer: use wrap around mappings in hv_copy{from,to}_ringbuffer()
Date 2016-09-02 13:20 +0200
Message-ID <scUFP-7eK-3@gated-at.bofh.it> (permalink)
References <scUw9-7bm-3@gated-at.bofh.it> <scUFP-7eK-5@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


From: Vitaly Kuznetsov <vkuznets@redhat.com>

With wrap around mappings for ring buffers we can always use a single
memcpy() to do the job.

Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com>
Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
Tested-by: Dexuan Cui <decui@microsoft.com>
---
 drivers/hv/ring_buffer.c |   24 +++---------------------
 1 files changed, 3 insertions(+), 21 deletions(-)

diff --git a/drivers/hv/ring_buffer.c b/drivers/hv/ring_buffer.c
index 7e21c2c..08043da 100644
--- a/drivers/hv/ring_buffer.c
+++ b/drivers/hv/ring_buffer.c
@@ -172,18 +172,7 @@ static u32 hv_copyfrom_ringbuffer(
 	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);
-
+	memcpy(dest, ring_buffer + start_read_offset, destlen);
 
 	start_read_offset += destlen;
 	start_read_offset %= ring_buffer_size;
@@ -204,15 +193,8 @@ static u32 hv_copyto_ringbuffer(
 {
 	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! */
-	if (srclen > ring_buffer_size - start_write_offset) {
-		frag_len = ring_buffer_size - start_write_offset;
-		memcpy(ring_buffer + start_write_offset, src, frag_len);
-		memcpy(ring_buffer, src + frag_len, srclen - frag_len);
-	} else
-		memcpy(ring_buffer + start_write_offset, src, srclen);
+
+	memcpy(ring_buffer + start_write_offset, src, srclen);
 
 	start_write_offset += srclen;
 	start_write_offset %= ring_buffer_size;
-- 
1.7.4.1

Back to linux.kernel | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

[PATCH 0/7] Drivers: hv: Some miscellaneous fixes  kys@exchange.microsoft.com - 2016-09-02 13:10 +0200
  [PATCH 3/7] Drivers: hv: ring_buffer: use wrap around mappings in hv_copy{from,to}_ringbuffer() kys@exchange.microsoft.com - 2016-09-02 13:20 +0200
  [PATCH 6/7] Drivers: hv: utils: Continue to poll VSS channel after handling requests. kys@exchange.microsoft.com - 2016-09-02 13:20 +0200
  [PATCH 5/7] Drivers: hv: Introduce a policy for controlling channel affinity kys@exchange.microsoft.com - 2016-09-02 13:20 +0200
  [PATCH 7/7] Drivers: hv: utils: Check VSS daemon is listening before a hot backup kys@exchange.microsoft.com - 2016-09-02 13:20 +0200
  [PATCH 1/7] Drivers: hv: cleanup vmbus_open() for wrap around mappings kys@exchange.microsoft.com - 2016-09-02 13:20 +0200
    [PATCH 4/7] Drivers: hv: ring_buffer: count on wrap around mappings in get_next_pkt_raw() kys@exchange.microsoft.com - 2016-09-02 13:20 +0200
    [PATCH 2/7] Drivers: hv: ring_buffer: wrap around mappings for ring buffers kys@exchange.microsoft.com - 2016-09-02 13:20 +0200

csiph-web