diff options
Diffstat (limited to 'drivers/net/sfc/efx.c')
| -rw-r--r-- | drivers/net/sfc/efx.c | 18 |
1 files changed, 6 insertions, 12 deletions
diff --git a/drivers/net/sfc/efx.c b/drivers/net/sfc/efx.c index 711449c6e675..002bac743843 100644 --- a/drivers/net/sfc/efx.c +++ b/drivers/net/sfc/efx.c | |||
| @@ -1153,6 +1153,9 @@ static int efx_wanted_channels(void) | |||
| 1153 | int count; | 1153 | int count; |
| 1154 | int cpu; | 1154 | int cpu; |
| 1155 | 1155 | ||
| 1156 | if (rss_cpus) | ||
| 1157 | return rss_cpus; | ||
| 1158 | |||
| 1156 | if (unlikely(!zalloc_cpumask_var(&core_mask, GFP_KERNEL))) { | 1159 | if (unlikely(!zalloc_cpumask_var(&core_mask, GFP_KERNEL))) { |
| 1157 | printk(KERN_WARNING | 1160 | printk(KERN_WARNING |
| 1158 | "sfc: RSS disabled due to allocation failure\n"); | 1161 | "sfc: RSS disabled due to allocation failure\n"); |
| @@ -1266,27 +1269,18 @@ static void efx_remove_interrupts(struct efx_nic *efx) | |||
| 1266 | efx->legacy_irq = 0; | 1269 | efx->legacy_irq = 0; |
| 1267 | } | 1270 | } |
| 1268 | 1271 | ||
| 1269 | struct efx_tx_queue * | ||
| 1270 | efx_get_tx_queue(struct efx_nic *efx, unsigned index, unsigned type) | ||
| 1271 | { | ||
| 1272 | unsigned tx_channel_offset = | ||
| 1273 | separate_tx_channels ? efx->n_channels - efx->n_tx_channels : 0; | ||
| 1274 | EFX_BUG_ON_PARANOID(index >= efx->n_tx_channels || | ||
| 1275 | type >= EFX_TXQ_TYPES); | ||
| 1276 | return &efx->channel[tx_channel_offset + index]->tx_queue[type]; | ||
| 1277 | } | ||
| 1278 | |||
| 1279 | static void efx_set_channels(struct efx_nic *efx) | 1272 | static void efx_set_channels(struct efx_nic *efx) |
| 1280 | { | 1273 | { |
| 1281 | struct efx_channel *channel; | 1274 | struct efx_channel *channel; |
| 1282 | struct efx_tx_queue *tx_queue; | 1275 | struct efx_tx_queue *tx_queue; |
| 1283 | unsigned tx_channel_offset = | 1276 | |
| 1277 | efx->tx_channel_offset = | ||
| 1284 | separate_tx_channels ? efx->n_channels - efx->n_tx_channels : 0; | 1278 | separate_tx_channels ? efx->n_channels - efx->n_tx_channels : 0; |
| 1285 | 1279 | ||
| 1286 | /* Channel pointers were set in efx_init_struct() but we now | 1280 | /* Channel pointers were set in efx_init_struct() but we now |
| 1287 | * need to clear them for TX queues in any RX-only channels. */ | 1281 | * need to clear them for TX queues in any RX-only channels. */ |
| 1288 | efx_for_each_channel(channel, efx) { | 1282 | efx_for_each_channel(channel, efx) { |
| 1289 | if (channel->channel - tx_channel_offset >= | 1283 | if (channel->channel - efx->tx_channel_offset >= |
| 1290 | efx->n_tx_channels) { | 1284 | efx->n_tx_channels) { |
| 1291 | efx_for_each_channel_tx_queue(tx_queue, channel) | 1285 | efx_for_each_channel_tx_queue(tx_queue, channel) |
| 1292 | tx_queue->channel = NULL; | 1286 | tx_queue->channel = NULL; |
