Commit e0e3406c authored by Alex Elder's avatar Alex Elder Committed by David S. Miller
Browse files

net: ipa: update channel in gsi_channel_trans_complete()



Have gsi_channel_trans_complete() update the known state from
hardware rather than doing so in gsi_channel_poll_one().

Signed-off-by: default avatarAlex Elder <elder@linaro.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent d338ae28
Loading
Loading
Loading
Loading
+1 −4
Original line number Diff line number Diff line
@@ -1475,7 +1475,7 @@ void gsi_channel_doorbell(struct gsi_channel *channel)
}

/* Consult hardware, move any newly completed transactions to completed list */
static struct gsi_trans *gsi_channel_update(struct gsi_channel *channel)
struct gsi_trans *gsi_channel_update(struct gsi_channel *channel)
{
	u32 evt_ring_id = channel->evt_ring_id;
	struct gsi *gsi = channel->gsi;
@@ -1529,9 +1529,6 @@ static struct gsi_trans *gsi_channel_poll_one(struct gsi_channel *channel)

	/* Get the first transaction from the completed list */
	trans = gsi_channel_trans_complete(channel);
	if (!trans)	/* List is empty; see if there's more to do */
		trans = gsi_channel_update(channel);

	if (trans)
		gsi_trans_move_polled(trans);

+8 −0
Original line number Diff line number Diff line
@@ -94,6 +94,14 @@ void gsi_channel_trans_exit(struct gsi_channel *channel);
 */
void gsi_channel_doorbell(struct gsi_channel *channel);

/* gsi_channel_update() - Update knowledge of channel hardware state
 * @channel:	Channel whose doorbell should be rung
 *
 * Consult hardware, move any newly completed transactions to a
 * channel's completed list
 */
struct gsi_trans *gsi_channel_update(struct gsi_channel *channel);

/**
 * gsi_ring_virt() - Return virtual address for a ring entry
 * @ring:	Ring whose address is to be translated
+1 −1
Original line number Diff line number Diff line
@@ -241,7 +241,7 @@ struct gsi_trans *gsi_channel_trans_complete(struct gsi_channel *channel)
	u16 trans_id = trans_info->completed_id;

	if (trans_id == trans_info->pending_id)
		return NULL;
		return gsi_channel_update(channel);

	return &trans_info->trans[trans_id %= channel->tre_count];
}