aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/sfc/efx.c
diff options
context:
space:
mode:
authorBen Hutchings <bhutchings@solarflare.com>2011-02-07 18:04:38 -0500
committerBen Hutchings <bhutchings@solarflare.com>2011-02-15 14:45:34 -0500
commit525da9072c28df815bff64bf00f3b11ab88face8 (patch)
tree0649a1fff4d110796dd7f22168c9413cd8eb5caa /drivers/net/sfc/efx.c
parent60031fcc17057e21566ed34ba23e93fffda1aa27 (diff)
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>
Diffstat (limited to 'drivers/net/sfc/efx.c')
-rw-r--r--drivers/net/sfc/efx.c17
1 files changed, 2 insertions, 15 deletions
diff --git a/drivers/net/sfc/efx.c b/drivers/net/sfc/efx.c
index c559bc372fc1..6189d3066018 100644
--- a/drivers/net/sfc/efx.c
+++ b/drivers/net/sfc/efx.c
@@ -1271,21 +1271,8 @@ static void efx_remove_interrupts(struct efx_nic *efx)
1271 1271
1272static void efx_set_channels(struct efx_nic *efx) 1272static void efx_set_channels(struct efx_nic *efx)
1273{ 1273{
1274 struct efx_channel *channel;
1275 struct efx_tx_queue *tx_queue;
1276
1277 efx->tx_channel_offset = 1274 efx->tx_channel_offset =
1278 separate_tx_channels ? efx->n_channels - efx->n_tx_channels : 0; 1275 separate_tx_channels ? efx->n_channels - efx->n_tx_channels : 0;
1279
1280 /* Channel pointers were set in efx_init_struct() but we now
1281 * need to clear them for TX queues in any RX-only channels. */
1282 efx_for_each_channel(channel, efx) {
1283 if (channel->channel - efx->tx_channel_offset >=
1284 efx->n_tx_channels) {
1285 efx_for_each_channel_tx_queue(tx_queue, channel)
1286 tx_queue->channel = NULL;
1287 }
1288 }
1289} 1276}
1290 1277
1291static int efx_probe_nic(struct efx_nic *efx) 1278static 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,
1531 efx->irq_rx_adaptive = rx_adaptive; 1518 efx->irq_rx_adaptive = rx_adaptive;
1532 efx->irq_rx_moderation = rx_ticks; 1519 efx->irq_rx_moderation = rx_ticks;
1533 efx_for_each_channel(channel, efx) { 1520 efx_for_each_channel(channel, efx) {
1534 if (efx_channel_get_rx_queue(channel)) 1521 if (efx_channel_has_rx_queue(channel))
1535 channel->irq_moderation = rx_ticks; 1522 channel->irq_moderation = rx_ticks;
1536 else if (efx_channel_get_tx_queue(channel, 0)) 1523 else if (efx_channel_has_tx_queues(channel))
1537 channel->irq_moderation = tx_ticks; 1524 channel->irq_moderation = tx_ticks;
1538 } 1525 }
1539} 1526}