aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/hv/ring_buffer.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/drivers/hv/ring_buffer.c b/drivers/hv/ring_buffer.c
index 490e9ea098e6..87799e81af97 100644
--- a/drivers/hv/ring_buffer.c
+++ b/drivers/hv/ring_buffer.c
@@ -112,7 +112,8 @@ hv_get_next_readlocation_withoffset(const struct hv_ring_buffer_info *ring_info,
112 u32 next = ring_info->ring_buffer->read_index; 112 u32 next = ring_info->ring_buffer->read_index;
113 113
114 next += offset; 114 next += offset;
115 next %= ring_info->ring_datasize; 115 if (next >= ring_info->ring_datasize)
116 next -= ring_info->ring_datasize;
116 117
117 return next; 118 return next;
118} 119}
@@ -156,7 +157,8 @@ static u32 hv_copyfrom_ringbuffer(
156 memcpy(dest, ring_buffer + start_read_offset, destlen); 157 memcpy(dest, ring_buffer + start_read_offset, destlen);
157 158
158 start_read_offset += destlen; 159 start_read_offset += destlen;
159 start_read_offset %= ring_buffer_size; 160 if (start_read_offset >= ring_buffer_size)
161 start_read_offset -= ring_buffer_size;
160 162
161 return start_read_offset; 163 return start_read_offset;
162} 164}
@@ -178,7 +180,8 @@ static u32 hv_copyto_ringbuffer(
178 memcpy(ring_buffer + start_write_offset, src, srclen); 180 memcpy(ring_buffer + start_write_offset, src, srclen);
179 181
180 start_write_offset += srclen; 182 start_write_offset += srclen;
181 start_write_offset %= ring_buffer_size; 183 if (start_write_offset >= ring_buffer_size)
184 start_write_offset -= ring_buffer_size;
182 185
183 return start_write_offset; 186 return start_write_offset;
184} 187}