diff options
-rw-r--r-- | drivers/hv/ring_buffer.c | 9 |
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 | } |