From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1762008AbdAECMR (ORCPT ); Wed, 4 Jan 2017 21:12:17 -0500 Received: from p3plsmtps2ded02.prod.phx3.secureserver.net ([208.109.80.59]:56096 "EHLO p3plsmtps2ded02.prod.phx3.secureserver.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752369AbdAECMP (ORCPT ); Wed, 4 Jan 2017 21:12:15 -0500 x-originating-ip: 72.167.245.219 From: Long Li To: "K. Y. Srinivasan" , Haiyang Zhang Cc: devel@linuxdriverproject.org, linux-kernel@vger.kernel.org, Long Li Subject: [PATCH] hv: use substraction to update ring buffer index Date: Wed, 4 Jan 2017 20:08:22 -0800 Message-Id: <1483589302-27177-1-git-send-email-longli@exchange.microsoft.com> X-Mailer: git-send-email 1.7.4.1 X-CMAE-Envelope: MS4wfL8p+59jIg4UM0MOD/D9SWhYsEHNOnTBSPeeJ4dOP9BRSWZ14BQly8DBhe2Tjo3o3wl99B/vD9bw8/H+aps/f5vOML/gvTBXg8efgVRd7DqfKbwu0BRx uiMkOE+xmgttcUwtByi0mQklG4Ekc3Q9De+a3UNUK/+o6FjWF3aFvUPxWzu3phy3p7ecMeJIjPSs0kvYr0x5aely81CWp2r/Hqd+M1UOWu9YE5NIJTrdvzD2 t6wn8fHQlnW9UY+uakYnvR866wv0zOOwcI8buJo9ebq3jBED4zWP7lrpdP2/S6I1I6lB2uTmLDlALcLG3Wee2QaRVDCJ+1iQ0I4s87h4Dlg= Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Long Li The ring buffer code uses %= to calculate index. For x86/64, %= compiles to div, more than 10 times slower than sub. Replace div with sub for this data heavy code path. Signed-off-by: Long Li --- drivers/hv/ring_buffer.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/drivers/hv/ring_buffer.c b/drivers/hv/ring_buffer.c index cd49cb1..f8eee6e 100644 --- a/drivers/hv/ring_buffer.c +++ b/drivers/hv/ring_buffer.c @@ -135,7 +135,8 @@ hv_get_next_readlocation_withoffset(struct hv_ring_buffer_info *ring_info, u32 next = ring_info->ring_buffer->read_index; next += offset; - next %= ring_info->ring_datasize; + if (next >= ring_info->ring_datasize) + next -= ring_info->ring_datasize; return next; } @@ -179,7 +180,8 @@ static u32 hv_copyfrom_ringbuffer( memcpy(dest, ring_buffer + start_read_offset, destlen); start_read_offset += destlen; - start_read_offset %= ring_buffer_size; + if (start_read_offset >= ring_buffer_size) + start_read_offset -= ring_buffer_size; return start_read_offset; } @@ -201,7 +203,8 @@ static u32 hv_copyto_ringbuffer( memcpy(ring_buffer + start_write_offset, src, srclen); start_write_offset += srclen; - start_write_offset %= ring_buffer_size; + if (start_write_offset >= ring_buffer_size) + start_write_offset -= ring_buffer_size; return start_write_offset; } -- 2.7.4