Commit d9ab7007 authored by Ben Hutchings's avatar Ben Hutchings
Browse files

sfc: Skip RX end-of-batch work on channels without an RX queue



The code in efx_process_channel() to update the RX queue after each
batch of RX completions works out as a no-op on a TX-only channel
where the RX queue structure is set to all-zeroes, but
(1) efx_channel_get_rx_queue() will BUG() if DEBUG is defined, and
(2) it's a waste of time.

Signed-off-by: default avatarBen Hutchings <bhutchings@solarflare.com>
parent 7280f5ae
Loading
Loading
Loading
Loading
+11 −10
Original line number Diff line number Diff line
@@ -224,8 +224,9 @@ static int efx_process_channel(struct efx_channel *channel, int budget)
		return 0;

	spent = efx_nic_process_eventq(channel, budget);
	if (spent == 0)
		return 0;
	if (spent && efx_channel_has_rx_queue(channel)) {
		struct efx_rx_queue *rx_queue =
			efx_channel_get_rx_queue(channel);

		/* Deliver last RX packet. */
		if (channel->rx_pkt) {
@@ -234,8 +235,8 @@ static int efx_process_channel(struct efx_channel *channel, int budget)
		}

		efx_rx_strategy(channel);

	efx_fast_push_rx_descriptors(efx_channel_get_rx_queue(channel));
		efx_fast_push_rx_descriptors(rx_queue);
	}

	return spent;
}