> From: devel [mailto:driverdev-devel-bounces@xxxxxxxxxxxxxxxxxxxxxx] On > Behalf Of Long Li > Sent: Thursday, January 5, 2017 12:08 > To: KY Srinivasan <kys@xxxxxxxxxxxxx>; Haiyang Zhang > <haiyangz@xxxxxxxxxxxxx> > Cc: devel@xxxxxxxxxxxxxxxxxxxxxx; linux-kernel@xxxxxxxxxxxxxxx > Subject: [PATCH] hv: use substraction to update ring buffer index > > From: Long Li <longli@xxxxxxxxxxxxx> > > 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 <longli@xxxxxxxxxxxxx> > --- > 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; > } Hi Long, I guess you want to fix put_pkt_raw() too. :-) Thanks, -- Dexuan _______________________________________________ devel mailing list devel@xxxxxxxxxxxxxxxxxxxxxx http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel