sfc: Distinguish queue lookup from test for queue existence
efx_channel_get_{rx,tx}_queue() currently return NULL if the channel isn't used for traffic in that direction. In most cases this is a bug, but some callers rely on it as an existence test. Add existence test functions efx_channel_has_{rx_queue,tx_queues}() and use them as appropriate. Change efx_channel_get_{rx,tx}_queue() to assert that the requested queue exists. Remove now-redundant initialisation from efx_set_channels(). Signed-off-by: Ben Hutchings <bhutchings@solarflare.com>
This commit is contained in:
@@ -1271,21 +1271,8 @@ static void efx_remove_interrupts(struct efx_nic *efx)
|
||||
|
||||
static void efx_set_channels(struct efx_nic *efx)
|
||||
{
|
||||
struct efx_channel *channel;
|
||||
struct efx_tx_queue *tx_queue;
|
||||
|
||||
efx->tx_channel_offset =
|
||||
separate_tx_channels ? efx->n_channels - efx->n_tx_channels : 0;
|
||||
|
||||
/* Channel pointers were set in efx_init_struct() but we now
|
||||
* need to clear them for TX queues in any RX-only channels. */
|
||||
efx_for_each_channel(channel, efx) {
|
||||
if (channel->channel - efx->tx_channel_offset >=
|
||||
efx->n_tx_channels) {
|
||||
efx_for_each_channel_tx_queue(tx_queue, channel)
|
||||
tx_queue->channel = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static int efx_probe_nic(struct efx_nic *efx)
|
||||
@@ -1531,9 +1518,9 @@ void efx_init_irq_moderation(struct efx_nic *efx, int tx_usecs, int rx_usecs,
|
||||
efx->irq_rx_adaptive = rx_adaptive;
|
||||
efx->irq_rx_moderation = rx_ticks;
|
||||
efx_for_each_channel(channel, efx) {
|
||||
if (efx_channel_get_rx_queue(channel))
|
||||
if (efx_channel_has_rx_queue(channel))
|
||||
channel->irq_moderation = rx_ticks;
|
||||
else if (efx_channel_get_tx_queue(channel, 0))
|
||||
else if (efx_channel_has_tx_queues(channel))
|
||||
channel->irq_moderation = tx_ticks;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user