Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 05d00bc9 authored by Stephen Hemminger's avatar Stephen Hemminger Committed by Greg Kroah-Hartman
Browse files

vmbus: eliminate duplicate cached index



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: default avatarStephen Hemminger <sthemmin@microsoft.com>
Signed-off-by: default avatarK. Y. Srinivasan <kys@microsoft.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 8dd45f2a
Loading
Loading
Loading
Loading
+4 −13
Original line number Diff line number Diff line
@@ -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;

@@ -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);

@@ -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;

	/*
@@ -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);
+0 −14
Original line number Diff line number Diff line
@@ -125,7 +125,6 @@ struct hv_ring_buffer_info {

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

/*
@@ -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.