forked from Minki/linux
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: Ben Hutchings <bhutchings@solarflare.com>
This commit is contained in:
parent
7280f5ae0d
commit
d9ab70079a
@ -224,19 +224,20 @@ 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) {
|
||||
__efx_rx_packet(channel, channel->rx_pkt);
|
||||
channel->rx_pkt = NULL;
|
||||
/* Deliver last RX packet. */
|
||||
if (channel->rx_pkt) {
|
||||
__efx_rx_packet(channel, channel->rx_pkt);
|
||||
channel->rx_pkt = NULL;
|
||||
}
|
||||
|
||||
efx_rx_strategy(channel);
|
||||
efx_fast_push_rx_descriptors(rx_queue);
|
||||
}
|
||||
|
||||
efx_rx_strategy(channel);
|
||||
|
||||
efx_fast_push_rx_descriptors(efx_channel_get_rx_queue(channel));
|
||||
|
||||
return spent;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user