Skip to content

Commit

Permalink
vmbus: eliminate duplicate cached index
Browse files Browse the repository at this point in the history
Don't need cached read index anymore now that packet iterator
is used. The iterator has the original read index until the
visible read_index is updated.

Signed-off-by: Stephen Hemminger <sthemmin@microsoft.com>
Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
Stephen Hemminger authored and Greg Kroah-Hartman committed Jul 17, 2017
1 parent 8dd45f2 commit 05d00bc
Show file tree
Hide file tree
Showing 2 changed files with 4 additions and 27 deletions.
17 changes: 4 additions & 13 deletions drivers/hv/ring_buffer.c
Original file line number Diff line number Diff line change
Expand Up @@ -358,9 +358,6 @@ struct vmpacket_descriptor *hv_pkt_iter_first(struct vmbus_channel *channel)
{
struct hv_ring_buffer_info *rbi = &channel->inbound;

/* set state for later hv_pkt_iter_close */
rbi->cached_read_index = rbi->ring_buffer->read_index;

if (hv_pkt_iter_avail(rbi) < sizeof(struct vmpacket_descriptor))
return NULL;

Expand Down Expand Up @@ -388,10 +385,7 @@ __hv_pkt_iter_next(struct vmbus_channel *channel,
rbi->priv_read_index -= dsize;

/* more data? */
if (hv_pkt_iter_avail(rbi) < sizeof(struct vmpacket_descriptor))
return NULL;
else
return hv_get_ring_buffer(rbi) + rbi->priv_read_index;
return hv_pkt_iter_first(channel);
}
EXPORT_SYMBOL_GPL(__hv_pkt_iter_next);

Expand All @@ -401,7 +395,7 @@ EXPORT_SYMBOL_GPL(__hv_pkt_iter_next);
void hv_pkt_iter_close(struct vmbus_channel *channel)
{
struct hv_ring_buffer_info *rbi = &channel->inbound;
u32 cur_write_sz, cached_write_sz;
u32 orig_write_sz = hv_get_bytes_to_write(rbi);
u32 pending_sz;

/*
Expand Down Expand Up @@ -430,13 +424,10 @@ void hv_pkt_iter_close(struct vmbus_channel *channel)
if (pending_sz == 0)
return;

cur_write_sz = hv_get_bytes_to_write(rbi);

if (cur_write_sz < pending_sz)
if (hv_get_bytes_to_write(rbi) < pending_sz)
return;

cached_write_sz = hv_get_cached_bytes_to_write(rbi);
if (cached_write_sz < pending_sz)
if (orig_write_sz < pending_sz)
vmbus_setevent(channel);
}
EXPORT_SYMBOL_GPL(hv_pkt_iter_close);
14 changes: 0 additions & 14 deletions include/linux/hyperv.h
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,6 @@ struct hv_ring_buffer_info {

u32 ring_datasize; /* < ring_size */
u32 priv_read_index;
u32 cached_read_index;
};

/*
Expand Down Expand Up @@ -178,19 +177,6 @@ static inline u32 hv_get_bytes_to_write(const struct hv_ring_buffer_info *rbi)
return write;
}

static inline u32 hv_get_cached_bytes_to_write(
const struct hv_ring_buffer_info *rbi)
{
u32 read_loc, write_loc, dsize, write;

dsize = rbi->ring_datasize;
read_loc = rbi->cached_read_index;
write_loc = rbi->ring_buffer->write_index;

write = write_loc >= read_loc ? dsize - (write_loc - read_loc) :
read_loc - write_loc;
return write;
}
/*
* VMBUS version is 32 bit entity broken up into
* two 16 bit quantities: major_number. minor_number.
Expand Down

0 comments on commit 05d00bc

Please sign in to comment.