• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // SPDX-License-Identifier: GPL-2.0-only
2 /****************************************************************************
3  * Driver for Solarflare network controllers and boards
4  * Copyright 2018 Solarflare Communications Inc.
5  *
6  * This program is free software; you can redistribute it and/or modify it
7  * under the terms of the GNU General Public License version 2 as published
8  * by the Free Software Foundation, incorporated herein by reference.
9  */
10 
11 #include "net_driver.h"
12 #include <linux/module.h>
13 #include <linux/filter.h>
14 #include "efx_channels.h"
15 #include "efx.h"
16 #include "efx_common.h"
17 #include "tx_common.h"
18 #include "rx_common.h"
19 #include "nic.h"
20 #include "sriov.h"
21 #include "workarounds.h"
22 
23 /* This is the first interrupt mode to try out of:
24  * 0 => MSI-X
25  * 1 => MSI
26  * 2 => legacy
27  */
28 unsigned int efx_siena_interrupt_mode = EFX_INT_MODE_MSIX;
29 
30 /* This is the requested number of CPUs to use for Receive-Side Scaling (RSS),
31  * i.e. the number of CPUs among which we may distribute simultaneous
32  * interrupt handling.
33  *
34  * Cards without MSI-X will only target one CPU via legacy or MSI interrupt.
35  * The default (0) means to assign an interrupt to each core.
36  */
37 unsigned int efx_siena_rss_cpus;
38 
39 static unsigned int irq_adapt_low_thresh = 8000;
40 module_param(irq_adapt_low_thresh, uint, 0644);
41 MODULE_PARM_DESC(irq_adapt_low_thresh,
42 		 "Threshold score for reducing IRQ moderation");
43 
44 static unsigned int irq_adapt_high_thresh = 16000;
45 module_param(irq_adapt_high_thresh, uint, 0644);
46 MODULE_PARM_DESC(irq_adapt_high_thresh,
47 		 "Threshold score for increasing IRQ moderation");
48 
49 static const struct efx_channel_type efx_default_channel_type;
50 
51 /*************
52  * INTERRUPTS
53  *************/
54 
count_online_cores(struct efx_nic * efx,bool local_node)55 static unsigned int count_online_cores(struct efx_nic *efx, bool local_node)
56 {
57 	cpumask_var_t filter_mask;
58 	unsigned int count;
59 	int cpu;
60 
61 	if (unlikely(!zalloc_cpumask_var(&filter_mask, GFP_KERNEL))) {
62 		netif_warn(efx, probe, efx->net_dev,
63 			   "RSS disabled due to allocation failure\n");
64 		return 1;
65 	}
66 
67 	cpumask_copy(filter_mask, cpu_online_mask);
68 	if (local_node)
69 		cpumask_and(filter_mask, filter_mask,
70 			    cpumask_of_pcibus(efx->pci_dev->bus));
71 
72 	count = 0;
73 	for_each_cpu(cpu, filter_mask) {
74 		++count;
75 		cpumask_andnot(filter_mask, filter_mask, topology_sibling_cpumask(cpu));
76 	}
77 
78 	free_cpumask_var(filter_mask);
79 
80 	return count;
81 }
82 
efx_wanted_parallelism(struct efx_nic * efx)83 static unsigned int efx_wanted_parallelism(struct efx_nic *efx)
84 {
85 	unsigned int count;
86 
87 	if (efx_siena_rss_cpus) {
88 		count = efx_siena_rss_cpus;
89 	} else {
90 		count = count_online_cores(efx, true);
91 
92 		/* If no online CPUs in local node, fallback to any online CPUs */
93 		if (count == 0)
94 			count = count_online_cores(efx, false);
95 	}
96 
97 	if (count > EFX_MAX_RX_QUEUES) {
98 		netif_cond_dbg(efx, probe, efx->net_dev, !efx_siena_rss_cpus,
99 			       warn,
100 			       "Reducing number of rx queues from %u to %u.\n",
101 			       count, EFX_MAX_RX_QUEUES);
102 		count = EFX_MAX_RX_QUEUES;
103 	}
104 
105 	/* If RSS is requested for the PF *and* VFs then we can't write RSS
106 	 * table entries that are inaccessible to VFs
107 	 */
108 #ifdef CONFIG_SFC_SIENA_SRIOV
109 	if (efx->type->sriov_wanted) {
110 		if (efx->type->sriov_wanted(efx) && efx_vf_size(efx) > 1 &&
111 		    count > efx_vf_size(efx)) {
112 			netif_warn(efx, probe, efx->net_dev,
113 				   "Reducing number of RSS channels from %u to %u for "
114 				   "VF support. Increase vf-msix-limit to use more "
115 				   "channels on the PF.\n",
116 				   count, efx_vf_size(efx));
117 			count = efx_vf_size(efx);
118 		}
119 	}
120 #endif
121 
122 	return count;
123 }
124 
efx_allocate_msix_channels(struct efx_nic * efx,unsigned int max_channels,unsigned int extra_channels,unsigned int parallelism)125 static int efx_allocate_msix_channels(struct efx_nic *efx,
126 				      unsigned int max_channels,
127 				      unsigned int extra_channels,
128 				      unsigned int parallelism)
129 {
130 	unsigned int n_channels = parallelism;
131 	int vec_count;
132 	int tx_per_ev;
133 	int n_xdp_tx;
134 	int n_xdp_ev;
135 
136 	if (efx_siena_separate_tx_channels)
137 		n_channels *= 2;
138 	n_channels += extra_channels;
139 
140 	/* To allow XDP transmit to happen from arbitrary NAPI contexts
141 	 * we allocate a TX queue per CPU. We share event queues across
142 	 * multiple tx queues, assuming tx and ev queues are both
143 	 * maximum size.
144 	 */
145 	tx_per_ev = EFX_MAX_EVQ_SIZE / EFX_TXQ_MAX_ENT(efx);
146 	tx_per_ev = min(tx_per_ev, EFX_MAX_TXQ_PER_CHANNEL);
147 	n_xdp_tx = num_possible_cpus();
148 	n_xdp_ev = DIV_ROUND_UP(n_xdp_tx, tx_per_ev);
149 
150 	vec_count = pci_msix_vec_count(efx->pci_dev);
151 	if (vec_count < 0)
152 		return vec_count;
153 
154 	max_channels = min_t(unsigned int, vec_count, max_channels);
155 
156 	/* Check resources.
157 	 * We need a channel per event queue, plus a VI per tx queue.
158 	 * This may be more pessimistic than it needs to be.
159 	 */
160 	if (n_channels >= max_channels) {
161 		efx->xdp_txq_queues_mode = EFX_XDP_TX_QUEUES_BORROWED;
162 		netif_warn(efx, drv, efx->net_dev,
163 			   "Insufficient resources for %d XDP event queues (%d other channels, max %d)\n",
164 			   n_xdp_ev, n_channels, max_channels);
165 		netif_warn(efx, drv, efx->net_dev,
166 			   "XDP_TX and XDP_REDIRECT might decrease device's performance\n");
167 	} else if (n_channels + n_xdp_tx > efx->max_vis) {
168 		efx->xdp_txq_queues_mode = EFX_XDP_TX_QUEUES_BORROWED;
169 		netif_warn(efx, drv, efx->net_dev,
170 			   "Insufficient resources for %d XDP TX queues (%d other channels, max VIs %d)\n",
171 			   n_xdp_tx, n_channels, efx->max_vis);
172 		netif_warn(efx, drv, efx->net_dev,
173 			   "XDP_TX and XDP_REDIRECT might decrease device's performance\n");
174 	} else if (n_channels + n_xdp_ev > max_channels) {
175 		efx->xdp_txq_queues_mode = EFX_XDP_TX_QUEUES_SHARED;
176 		netif_warn(efx, drv, efx->net_dev,
177 			   "Insufficient resources for %d XDP event queues (%d other channels, max %d)\n",
178 			   n_xdp_ev, n_channels, max_channels);
179 
180 		n_xdp_ev = max_channels - n_channels;
181 		netif_warn(efx, drv, efx->net_dev,
182 			   "XDP_TX and XDP_REDIRECT will work with reduced performance (%d cpus/tx_queue)\n",
183 			   DIV_ROUND_UP(n_xdp_tx, tx_per_ev * n_xdp_ev));
184 	} else {
185 		efx->xdp_txq_queues_mode = EFX_XDP_TX_QUEUES_DEDICATED;
186 	}
187 
188 	if (efx->xdp_txq_queues_mode != EFX_XDP_TX_QUEUES_BORROWED) {
189 		efx->n_xdp_channels = n_xdp_ev;
190 		efx->xdp_tx_per_channel = tx_per_ev;
191 		efx->xdp_tx_queue_count = n_xdp_tx;
192 		n_channels += n_xdp_ev;
193 		netif_dbg(efx, drv, efx->net_dev,
194 			  "Allocating %d TX and %d event queues for XDP\n",
195 			  n_xdp_ev * tx_per_ev, n_xdp_ev);
196 	} else {
197 		efx->n_xdp_channels = 0;
198 		efx->xdp_tx_per_channel = 0;
199 		efx->xdp_tx_queue_count = n_xdp_tx;
200 	}
201 
202 	if (vec_count < n_channels) {
203 		netif_err(efx, drv, efx->net_dev,
204 			  "WARNING: Insufficient MSI-X vectors available (%d < %u).\n",
205 			  vec_count, n_channels);
206 		netif_err(efx, drv, efx->net_dev,
207 			  "WARNING: Performance may be reduced.\n");
208 		n_channels = vec_count;
209 	}
210 
211 	n_channels = min(n_channels, max_channels);
212 
213 	efx->n_channels = n_channels;
214 
215 	/* Ignore XDP tx channels when creating rx channels. */
216 	n_channels -= efx->n_xdp_channels;
217 
218 	if (efx_siena_separate_tx_channels) {
219 		efx->n_tx_channels =
220 			min(max(n_channels / 2, 1U),
221 			    efx->max_tx_channels);
222 		efx->tx_channel_offset =
223 			n_channels - efx->n_tx_channels;
224 		efx->n_rx_channels =
225 			max(n_channels -
226 			    efx->n_tx_channels, 1U);
227 	} else {
228 		efx->n_tx_channels = min(n_channels, efx->max_tx_channels);
229 		efx->tx_channel_offset = 0;
230 		efx->n_rx_channels = n_channels;
231 	}
232 
233 	efx->n_rx_channels = min(efx->n_rx_channels, parallelism);
234 	efx->n_tx_channels = min(efx->n_tx_channels, parallelism);
235 
236 	efx->xdp_channel_offset = n_channels;
237 
238 	netif_dbg(efx, drv, efx->net_dev,
239 		  "Allocating %u RX channels\n",
240 		  efx->n_rx_channels);
241 
242 	return efx->n_channels;
243 }
244 
245 /* Probe the number and type of interrupts we are able to obtain, and
246  * the resulting numbers of channels and RX queues.
247  */
efx_siena_probe_interrupts(struct efx_nic * efx)248 int efx_siena_probe_interrupts(struct efx_nic *efx)
249 {
250 	unsigned int extra_channels = 0;
251 	unsigned int rss_spread;
252 	unsigned int i, j;
253 	int rc;
254 
255 	for (i = 0; i < EFX_MAX_EXTRA_CHANNELS; i++)
256 		if (efx->extra_channel_type[i])
257 			++extra_channels;
258 
259 	if (efx->interrupt_mode == EFX_INT_MODE_MSIX) {
260 		unsigned int parallelism = efx_wanted_parallelism(efx);
261 		struct msix_entry xentries[EFX_MAX_CHANNELS];
262 		unsigned int n_channels;
263 
264 		rc = efx_allocate_msix_channels(efx, efx->max_channels,
265 						extra_channels, parallelism);
266 		if (rc >= 0) {
267 			n_channels = rc;
268 			for (i = 0; i < n_channels; i++)
269 				xentries[i].entry = i;
270 			rc = pci_enable_msix_range(efx->pci_dev, xentries, 1,
271 						   n_channels);
272 		}
273 		if (rc < 0) {
274 			/* Fall back to single channel MSI */
275 			netif_err(efx, drv, efx->net_dev,
276 				  "could not enable MSI-X\n");
277 			if (efx->type->min_interrupt_mode >= EFX_INT_MODE_MSI)
278 				efx->interrupt_mode = EFX_INT_MODE_MSI;
279 			else
280 				return rc;
281 		} else if (rc < n_channels) {
282 			netif_err(efx, drv, efx->net_dev,
283 				  "WARNING: Insufficient MSI-X vectors"
284 				  " available (%d < %u).\n", rc, n_channels);
285 			netif_err(efx, drv, efx->net_dev,
286 				  "WARNING: Performance may be reduced.\n");
287 			n_channels = rc;
288 		}
289 
290 		if (rc > 0) {
291 			for (i = 0; i < efx->n_channels; i++)
292 				efx_get_channel(efx, i)->irq =
293 					xentries[i].vector;
294 		}
295 	}
296 
297 	/* Try single interrupt MSI */
298 	if (efx->interrupt_mode == EFX_INT_MODE_MSI) {
299 		efx->n_channels = 1;
300 		efx->n_rx_channels = 1;
301 		efx->n_tx_channels = 1;
302 		efx->tx_channel_offset = 0;
303 		efx->n_xdp_channels = 0;
304 		efx->xdp_channel_offset = efx->n_channels;
305 		efx->xdp_txq_queues_mode = EFX_XDP_TX_QUEUES_BORROWED;
306 		rc = pci_enable_msi(efx->pci_dev);
307 		if (rc == 0) {
308 			efx_get_channel(efx, 0)->irq = efx->pci_dev->irq;
309 		} else {
310 			netif_err(efx, drv, efx->net_dev,
311 				  "could not enable MSI\n");
312 			if (efx->type->min_interrupt_mode >= EFX_INT_MODE_LEGACY)
313 				efx->interrupt_mode = EFX_INT_MODE_LEGACY;
314 			else
315 				return rc;
316 		}
317 	}
318 
319 	/* Assume legacy interrupts */
320 	if (efx->interrupt_mode == EFX_INT_MODE_LEGACY) {
321 		efx->n_channels = 1 + (efx_siena_separate_tx_channels ? 1 : 0);
322 		efx->n_rx_channels = 1;
323 		efx->n_tx_channels = 1;
324 		efx->tx_channel_offset = efx_siena_separate_tx_channels ? 1 : 0;
325 		efx->n_xdp_channels = 0;
326 		efx->xdp_channel_offset = efx->n_channels;
327 		efx->xdp_txq_queues_mode = EFX_XDP_TX_QUEUES_BORROWED;
328 		efx->legacy_irq = efx->pci_dev->irq;
329 	}
330 
331 	/* Assign extra channels if possible, before XDP channels */
332 	efx->n_extra_tx_channels = 0;
333 	j = efx->xdp_channel_offset;
334 	for (i = 0; i < EFX_MAX_EXTRA_CHANNELS; i++) {
335 		if (!efx->extra_channel_type[i])
336 			continue;
337 		if (j <= efx->tx_channel_offset + efx->n_tx_channels) {
338 			efx->extra_channel_type[i]->handle_no_channel(efx);
339 		} else {
340 			--j;
341 			efx_get_channel(efx, j)->type =
342 				efx->extra_channel_type[i];
343 			if (efx_channel_has_tx_queues(efx_get_channel(efx, j)))
344 				efx->n_extra_tx_channels++;
345 		}
346 	}
347 
348 	rss_spread = efx->n_rx_channels;
349 	/* RSS might be usable on VFs even if it is disabled on the PF */
350 #ifdef CONFIG_SFC_SIENA_SRIOV
351 	if (efx->type->sriov_wanted) {
352 		efx->rss_spread = ((rss_spread > 1 ||
353 				    !efx->type->sriov_wanted(efx)) ?
354 				   rss_spread : efx_vf_size(efx));
355 		return 0;
356 	}
357 #endif
358 	efx->rss_spread = rss_spread;
359 
360 	return 0;
361 }
362 
363 #if defined(CONFIG_SMP)
efx_siena_set_interrupt_affinity(struct efx_nic * efx)364 void efx_siena_set_interrupt_affinity(struct efx_nic *efx)
365 {
366 	const struct cpumask *numa_mask = cpumask_of_pcibus(efx->pci_dev->bus);
367 	struct efx_channel *channel;
368 	unsigned int cpu;
369 
370 	/* If no online CPUs in local node, fallback to any online CPU */
371 	if (cpumask_first_and(cpu_online_mask, numa_mask) >= nr_cpu_ids)
372 		numa_mask = cpu_online_mask;
373 
374 	cpu = -1;
375 	efx_for_each_channel(channel, efx) {
376 		cpu = cpumask_next_and(cpu, cpu_online_mask, numa_mask);
377 		if (cpu >= nr_cpu_ids)
378 			cpu = cpumask_first_and(cpu_online_mask, numa_mask);
379 		irq_set_affinity_hint(channel->irq, cpumask_of(cpu));
380 	}
381 }
382 
efx_siena_clear_interrupt_affinity(struct efx_nic * efx)383 void efx_siena_clear_interrupt_affinity(struct efx_nic *efx)
384 {
385 	struct efx_channel *channel;
386 
387 	efx_for_each_channel(channel, efx)
388 		irq_set_affinity_hint(channel->irq, NULL);
389 }
390 #else
391 void
efx_siena_set_interrupt_affinity(struct efx_nic * efx __always_unused)392 efx_siena_set_interrupt_affinity(struct efx_nic *efx __always_unused)
393 {
394 }
395 
396 void
efx_siena_clear_interrupt_affinity(struct efx_nic * efx __always_unused)397 efx_siena_clear_interrupt_affinity(struct efx_nic *efx __always_unused)
398 {
399 }
400 #endif /* CONFIG_SMP */
401 
efx_siena_remove_interrupts(struct efx_nic * efx)402 void efx_siena_remove_interrupts(struct efx_nic *efx)
403 {
404 	struct efx_channel *channel;
405 
406 	/* Remove MSI/MSI-X interrupts */
407 	efx_for_each_channel(channel, efx)
408 		channel->irq = 0;
409 	pci_disable_msi(efx->pci_dev);
410 	pci_disable_msix(efx->pci_dev);
411 
412 	/* Remove legacy interrupt */
413 	efx->legacy_irq = 0;
414 }
415 
416 /***************
417  * EVENT QUEUES
418  ***************/
419 
420 /* Create event queue
421  * Event queue memory allocations are done only once.  If the channel
422  * is reset, the memory buffer will be reused; this guards against
423  * errors during channel reset and also simplifies interrupt handling.
424  */
efx_probe_eventq(struct efx_channel * channel)425 static int efx_probe_eventq(struct efx_channel *channel)
426 {
427 	struct efx_nic *efx = channel->efx;
428 	unsigned long entries;
429 
430 	netif_dbg(efx, probe, efx->net_dev,
431 		  "chan %d create event queue\n", channel->channel);
432 
433 	/* Build an event queue with room for one event per tx and rx buffer,
434 	 * plus some extra for link state events and MCDI completions.
435 	 */
436 	entries = roundup_pow_of_two(efx->rxq_entries + efx->txq_entries + 128);
437 	EFX_WARN_ON_PARANOID(entries > EFX_MAX_EVQ_SIZE);
438 	channel->eventq_mask = max(entries, EFX_MIN_EVQ_SIZE) - 1;
439 
440 	return efx_nic_probe_eventq(channel);
441 }
442 
443 /* Prepare channel's event queue */
efx_init_eventq(struct efx_channel * channel)444 static int efx_init_eventq(struct efx_channel *channel)
445 {
446 	struct efx_nic *efx = channel->efx;
447 	int rc;
448 
449 	EFX_WARN_ON_PARANOID(channel->eventq_init);
450 
451 	netif_dbg(efx, drv, efx->net_dev,
452 		  "chan %d init event queue\n", channel->channel);
453 
454 	rc = efx_nic_init_eventq(channel);
455 	if (rc == 0) {
456 		efx->type->push_irq_moderation(channel);
457 		channel->eventq_read_ptr = 0;
458 		channel->eventq_init = true;
459 	}
460 	return rc;
461 }
462 
463 /* Enable event queue processing and NAPI */
efx_siena_start_eventq(struct efx_channel * channel)464 void efx_siena_start_eventq(struct efx_channel *channel)
465 {
466 	netif_dbg(channel->efx, ifup, channel->efx->net_dev,
467 		  "chan %d start event queue\n", channel->channel);
468 
469 	/* Make sure the NAPI handler sees the enabled flag set */
470 	channel->enabled = true;
471 	smp_wmb();
472 
473 	napi_enable(&channel->napi_str);
474 	efx_nic_eventq_read_ack(channel);
475 }
476 
477 /* Disable event queue processing and NAPI */
efx_siena_stop_eventq(struct efx_channel * channel)478 void efx_siena_stop_eventq(struct efx_channel *channel)
479 {
480 	if (!channel->enabled)
481 		return;
482 
483 	napi_disable(&channel->napi_str);
484 	channel->enabled = false;
485 }
486 
efx_fini_eventq(struct efx_channel * channel)487 static void efx_fini_eventq(struct efx_channel *channel)
488 {
489 	if (!channel->eventq_init)
490 		return;
491 
492 	netif_dbg(channel->efx, drv, channel->efx->net_dev,
493 		  "chan %d fini event queue\n", channel->channel);
494 
495 	efx_nic_fini_eventq(channel);
496 	channel->eventq_init = false;
497 }
498 
efx_remove_eventq(struct efx_channel * channel)499 static void efx_remove_eventq(struct efx_channel *channel)
500 {
501 	netif_dbg(channel->efx, drv, channel->efx->net_dev,
502 		  "chan %d remove event queue\n", channel->channel);
503 
504 	efx_nic_remove_eventq(channel);
505 }
506 
507 /**************************************************************************
508  *
509  * Channel handling
510  *
511  *************************************************************************/
512 
513 #ifdef CONFIG_RFS_ACCEL
efx_filter_rfs_expire(struct work_struct * data)514 static void efx_filter_rfs_expire(struct work_struct *data)
515 {
516 	struct delayed_work *dwork = to_delayed_work(data);
517 	struct efx_channel *channel;
518 	unsigned int time, quota;
519 
520 	channel = container_of(dwork, struct efx_channel, filter_work);
521 	time = jiffies - channel->rfs_last_expiry;
522 	quota = channel->rfs_filter_count * time / (30 * HZ);
523 	if (quota >= 20 && __efx_siena_filter_rfs_expire(channel,
524 					min(channel->rfs_filter_count, quota)))
525 		channel->rfs_last_expiry += time;
526 	/* Ensure we do more work eventually even if NAPI poll is not happening */
527 	schedule_delayed_work(dwork, 30 * HZ);
528 }
529 #endif
530 
531 /* Allocate and initialise a channel structure. */
efx_alloc_channel(struct efx_nic * efx,int i)532 static struct efx_channel *efx_alloc_channel(struct efx_nic *efx, int i)
533 {
534 	struct efx_rx_queue *rx_queue;
535 	struct efx_tx_queue *tx_queue;
536 	struct efx_channel *channel;
537 	int j;
538 
539 	channel = kzalloc(sizeof(*channel), GFP_KERNEL);
540 	if (!channel)
541 		return NULL;
542 
543 	channel->efx = efx;
544 	channel->channel = i;
545 	channel->type = &efx_default_channel_type;
546 
547 	for (j = 0; j < EFX_MAX_TXQ_PER_CHANNEL; j++) {
548 		tx_queue = &channel->tx_queue[j];
549 		tx_queue->efx = efx;
550 		tx_queue->queue = -1;
551 		tx_queue->label = j;
552 		tx_queue->channel = channel;
553 	}
554 
555 #ifdef CONFIG_RFS_ACCEL
556 	INIT_DELAYED_WORK(&channel->filter_work, efx_filter_rfs_expire);
557 #endif
558 
559 	rx_queue = &channel->rx_queue;
560 	rx_queue->efx = efx;
561 	timer_setup(&rx_queue->slow_fill, efx_siena_rx_slow_fill, 0);
562 
563 	return channel;
564 }
565 
efx_siena_init_channels(struct efx_nic * efx)566 int efx_siena_init_channels(struct efx_nic *efx)
567 {
568 	unsigned int i;
569 
570 	for (i = 0; i < EFX_MAX_CHANNELS; i++) {
571 		efx->channel[i] = efx_alloc_channel(efx, i);
572 		if (!efx->channel[i])
573 			return -ENOMEM;
574 		efx->msi_context[i].efx = efx;
575 		efx->msi_context[i].index = i;
576 	}
577 
578 	/* Higher numbered interrupt modes are less capable! */
579 	efx->interrupt_mode = min(efx->type->min_interrupt_mode,
580 				  efx_siena_interrupt_mode);
581 
582 	efx->max_channels = EFX_MAX_CHANNELS;
583 	efx->max_tx_channels = EFX_MAX_CHANNELS;
584 
585 	return 0;
586 }
587 
efx_siena_fini_channels(struct efx_nic * efx)588 void efx_siena_fini_channels(struct efx_nic *efx)
589 {
590 	unsigned int i;
591 
592 	for (i = 0; i < EFX_MAX_CHANNELS; i++)
593 		if (efx->channel[i]) {
594 			kfree(efx->channel[i]);
595 			efx->channel[i] = NULL;
596 		}
597 }
598 
599 /* Allocate and initialise a channel structure, copying parameters
600  * (but not resources) from an old channel structure.
601  */
602 static
efx_copy_channel(const struct efx_channel * old_channel)603 struct efx_channel *efx_copy_channel(const struct efx_channel *old_channel)
604 {
605 	struct efx_rx_queue *rx_queue;
606 	struct efx_tx_queue *tx_queue;
607 	struct efx_channel *channel;
608 	int j;
609 
610 	channel = kmalloc(sizeof(*channel), GFP_KERNEL);
611 	if (!channel)
612 		return NULL;
613 
614 	*channel = *old_channel;
615 
616 	channel->napi_dev = NULL;
617 	INIT_HLIST_NODE(&channel->napi_str.napi_hash_node);
618 	channel->napi_str.napi_id = 0;
619 	channel->napi_str.state = 0;
620 	memset(&channel->eventq, 0, sizeof(channel->eventq));
621 
622 	for (j = 0; j < EFX_MAX_TXQ_PER_CHANNEL; j++) {
623 		tx_queue = &channel->tx_queue[j];
624 		if (tx_queue->channel)
625 			tx_queue->channel = channel;
626 		tx_queue->buffer = NULL;
627 		tx_queue->cb_page = NULL;
628 		memset(&tx_queue->txd, 0, sizeof(tx_queue->txd));
629 	}
630 
631 	rx_queue = &channel->rx_queue;
632 	rx_queue->buffer = NULL;
633 	memset(&rx_queue->rxd, 0, sizeof(rx_queue->rxd));
634 	timer_setup(&rx_queue->slow_fill, efx_siena_rx_slow_fill, 0);
635 #ifdef CONFIG_RFS_ACCEL
636 	INIT_DELAYED_WORK(&channel->filter_work, efx_filter_rfs_expire);
637 #endif
638 
639 	return channel;
640 }
641 
efx_probe_channel(struct efx_channel * channel)642 static int efx_probe_channel(struct efx_channel *channel)
643 {
644 	struct efx_tx_queue *tx_queue;
645 	struct efx_rx_queue *rx_queue;
646 	int rc;
647 
648 	netif_dbg(channel->efx, probe, channel->efx->net_dev,
649 		  "creating channel %d\n", channel->channel);
650 
651 	rc = channel->type->pre_probe(channel);
652 	if (rc)
653 		goto fail;
654 
655 	rc = efx_probe_eventq(channel);
656 	if (rc)
657 		goto fail;
658 
659 	efx_for_each_channel_tx_queue(tx_queue, channel) {
660 		rc = efx_siena_probe_tx_queue(tx_queue);
661 		if (rc)
662 			goto fail;
663 	}
664 
665 	efx_for_each_channel_rx_queue(rx_queue, channel) {
666 		rc = efx_siena_probe_rx_queue(rx_queue);
667 		if (rc)
668 			goto fail;
669 	}
670 
671 	channel->rx_list = NULL;
672 
673 	return 0;
674 
675 fail:
676 	efx_siena_remove_channel(channel);
677 	return rc;
678 }
679 
efx_get_channel_name(struct efx_channel * channel,char * buf,size_t len)680 static void efx_get_channel_name(struct efx_channel *channel, char *buf,
681 				 size_t len)
682 {
683 	struct efx_nic *efx = channel->efx;
684 	const char *type;
685 	int number;
686 
687 	number = channel->channel;
688 
689 	if (number >= efx->xdp_channel_offset &&
690 	    !WARN_ON_ONCE(!efx->n_xdp_channels)) {
691 		type = "-xdp";
692 		number -= efx->xdp_channel_offset;
693 	} else if (efx->tx_channel_offset == 0) {
694 		type = "";
695 	} else if (number < efx->tx_channel_offset) {
696 		type = "-rx";
697 	} else {
698 		type = "-tx";
699 		number -= efx->tx_channel_offset;
700 	}
701 	snprintf(buf, len, "%s%s-%d", efx->name, type, number);
702 }
703 
efx_siena_set_channel_names(struct efx_nic * efx)704 void efx_siena_set_channel_names(struct efx_nic *efx)
705 {
706 	struct efx_channel *channel;
707 
708 	efx_for_each_channel(channel, efx)
709 		channel->type->get_name(channel,
710 					efx->msi_context[channel->channel].name,
711 					sizeof(efx->msi_context[0].name));
712 }
713 
efx_siena_probe_channels(struct efx_nic * efx)714 int efx_siena_probe_channels(struct efx_nic *efx)
715 {
716 	struct efx_channel *channel;
717 	int rc;
718 
719 	/* Restart special buffer allocation */
720 	efx->next_buffer_table = 0;
721 
722 	/* Probe channels in reverse, so that any 'extra' channels
723 	 * use the start of the buffer table. This allows the traffic
724 	 * channels to be resized without moving them or wasting the
725 	 * entries before them.
726 	 */
727 	efx_for_each_channel_rev(channel, efx) {
728 		rc = efx_probe_channel(channel);
729 		if (rc) {
730 			netif_err(efx, probe, efx->net_dev,
731 				  "failed to create channel %d\n",
732 				  channel->channel);
733 			goto fail;
734 		}
735 	}
736 	efx_siena_set_channel_names(efx);
737 
738 	return 0;
739 
740 fail:
741 	efx_siena_remove_channels(efx);
742 	return rc;
743 }
744 
efx_siena_remove_channel(struct efx_channel * channel)745 void efx_siena_remove_channel(struct efx_channel *channel)
746 {
747 	struct efx_tx_queue *tx_queue;
748 	struct efx_rx_queue *rx_queue;
749 
750 	netif_dbg(channel->efx, drv, channel->efx->net_dev,
751 		  "destroy chan %d\n", channel->channel);
752 
753 	efx_for_each_channel_rx_queue(rx_queue, channel)
754 		efx_siena_remove_rx_queue(rx_queue);
755 	efx_for_each_channel_tx_queue(tx_queue, channel)
756 		efx_siena_remove_tx_queue(tx_queue);
757 	efx_remove_eventq(channel);
758 	channel->type->post_remove(channel);
759 }
760 
efx_siena_remove_channels(struct efx_nic * efx)761 void efx_siena_remove_channels(struct efx_nic *efx)
762 {
763 	struct efx_channel *channel;
764 
765 	efx_for_each_channel(channel, efx)
766 		efx_siena_remove_channel(channel);
767 
768 	kfree(efx->xdp_tx_queues);
769 }
770 
efx_set_xdp_tx_queue(struct efx_nic * efx,int xdp_queue_number,struct efx_tx_queue * tx_queue)771 static int efx_set_xdp_tx_queue(struct efx_nic *efx, int xdp_queue_number,
772 				struct efx_tx_queue *tx_queue)
773 {
774 	if (xdp_queue_number >= efx->xdp_tx_queue_count)
775 		return -EINVAL;
776 
777 	netif_dbg(efx, drv, efx->net_dev,
778 		  "Channel %u TXQ %u is XDP %u, HW %u\n",
779 		  tx_queue->channel->channel, tx_queue->label,
780 		  xdp_queue_number, tx_queue->queue);
781 	efx->xdp_tx_queues[xdp_queue_number] = tx_queue;
782 	return 0;
783 }
784 
efx_set_xdp_channels(struct efx_nic * efx)785 static void efx_set_xdp_channels(struct efx_nic *efx)
786 {
787 	struct efx_tx_queue *tx_queue;
788 	struct efx_channel *channel;
789 	unsigned int next_queue = 0;
790 	int xdp_queue_number = 0;
791 	int rc;
792 
793 	/* We need to mark which channels really have RX and TX
794 	 * queues, and adjust the TX queue numbers if we have separate
795 	 * RX-only and TX-only channels.
796 	 */
797 	efx_for_each_channel(channel, efx) {
798 		if (channel->channel < efx->tx_channel_offset)
799 			continue;
800 
801 		if (efx_channel_is_xdp_tx(channel)) {
802 			efx_for_each_channel_tx_queue(tx_queue, channel) {
803 				tx_queue->queue = next_queue++;
804 				rc = efx_set_xdp_tx_queue(efx, xdp_queue_number,
805 							  tx_queue);
806 				if (rc == 0)
807 					xdp_queue_number++;
808 			}
809 		} else {
810 			efx_for_each_channel_tx_queue(tx_queue, channel) {
811 				tx_queue->queue = next_queue++;
812 				netif_dbg(efx, drv, efx->net_dev,
813 					  "Channel %u TXQ %u is HW %u\n",
814 					  channel->channel, tx_queue->label,
815 					  tx_queue->queue);
816 			}
817 
818 			/* If XDP is borrowing queues from net stack, it must
819 			 * use the queue with no csum offload, which is the
820 			 * first one of the channel
821 			 * (note: tx_queue_by_type is not initialized yet)
822 			 */
823 			if (efx->xdp_txq_queues_mode ==
824 			    EFX_XDP_TX_QUEUES_BORROWED) {
825 				tx_queue = &channel->tx_queue[0];
826 				rc = efx_set_xdp_tx_queue(efx, xdp_queue_number,
827 							  tx_queue);
828 				if (rc == 0)
829 					xdp_queue_number++;
830 			}
831 		}
832 	}
833 	WARN_ON(efx->xdp_txq_queues_mode == EFX_XDP_TX_QUEUES_DEDICATED &&
834 		xdp_queue_number != efx->xdp_tx_queue_count);
835 	WARN_ON(efx->xdp_txq_queues_mode != EFX_XDP_TX_QUEUES_DEDICATED &&
836 		xdp_queue_number > efx->xdp_tx_queue_count);
837 
838 	/* If we have more CPUs than assigned XDP TX queues, assign the already
839 	 * existing queues to the exceeding CPUs
840 	 */
841 	next_queue = 0;
842 	while (xdp_queue_number < efx->xdp_tx_queue_count) {
843 		tx_queue = efx->xdp_tx_queues[next_queue++];
844 		rc = efx_set_xdp_tx_queue(efx, xdp_queue_number, tx_queue);
845 		if (rc == 0)
846 			xdp_queue_number++;
847 	}
848 }
849 
850 static int efx_soft_enable_interrupts(struct efx_nic *efx);
851 static void efx_soft_disable_interrupts(struct efx_nic *efx);
852 static void efx_init_napi_channel(struct efx_channel *channel);
853 static void efx_fini_napi_channel(struct efx_channel *channel);
854 
efx_siena_realloc_channels(struct efx_nic * efx,u32 rxq_entries,u32 txq_entries)855 int efx_siena_realloc_channels(struct efx_nic *efx, u32 rxq_entries,
856 			       u32 txq_entries)
857 {
858 	struct efx_channel *other_channel[EFX_MAX_CHANNELS], *channel;
859 	unsigned int i, next_buffer_table = 0;
860 	u32 old_rxq_entries, old_txq_entries;
861 	int rc, rc2;
862 
863 	rc = efx_check_disabled(efx);
864 	if (rc)
865 		return rc;
866 
867 	/* Not all channels should be reallocated. We must avoid
868 	 * reallocating their buffer table entries.
869 	 */
870 	efx_for_each_channel(channel, efx) {
871 		struct efx_rx_queue *rx_queue;
872 		struct efx_tx_queue *tx_queue;
873 
874 		if (channel->type->copy)
875 			continue;
876 		next_buffer_table = max(next_buffer_table,
877 					channel->eventq.index +
878 					channel->eventq.entries);
879 		efx_for_each_channel_rx_queue(rx_queue, channel)
880 			next_buffer_table = max(next_buffer_table,
881 						rx_queue->rxd.index +
882 						rx_queue->rxd.entries);
883 		efx_for_each_channel_tx_queue(tx_queue, channel)
884 			next_buffer_table = max(next_buffer_table,
885 						tx_queue->txd.index +
886 						tx_queue->txd.entries);
887 	}
888 
889 	efx_device_detach_sync(efx);
890 	efx_siena_stop_all(efx);
891 	efx_soft_disable_interrupts(efx);
892 
893 	/* Clone channels (where possible) */
894 	memset(other_channel, 0, sizeof(other_channel));
895 	for (i = 0; i < efx->n_channels; i++) {
896 		channel = efx->channel[i];
897 		if (channel->type->copy)
898 			channel = channel->type->copy(channel);
899 		if (!channel) {
900 			rc = -ENOMEM;
901 			goto out;
902 		}
903 		other_channel[i] = channel;
904 	}
905 
906 	/* Swap entry counts and channel pointers */
907 	old_rxq_entries = efx->rxq_entries;
908 	old_txq_entries = efx->txq_entries;
909 	efx->rxq_entries = rxq_entries;
910 	efx->txq_entries = txq_entries;
911 	for (i = 0; i < efx->n_channels; i++)
912 		swap(efx->channel[i], other_channel[i]);
913 
914 	/* Restart buffer table allocation */
915 	efx->next_buffer_table = next_buffer_table;
916 
917 	for (i = 0; i < efx->n_channels; i++) {
918 		channel = efx->channel[i];
919 		if (!channel->type->copy)
920 			continue;
921 		rc = efx_probe_channel(channel);
922 		if (rc)
923 			goto rollback;
924 		efx_init_napi_channel(efx->channel[i]);
925 	}
926 
927 	efx_set_xdp_channels(efx);
928 out:
929 	/* Destroy unused channel structures */
930 	for (i = 0; i < efx->n_channels; i++) {
931 		channel = other_channel[i];
932 		if (channel && channel->type->copy) {
933 			efx_fini_napi_channel(channel);
934 			efx_siena_remove_channel(channel);
935 			kfree(channel);
936 		}
937 	}
938 
939 	rc2 = efx_soft_enable_interrupts(efx);
940 	if (rc2) {
941 		rc = rc ? rc : rc2;
942 		netif_err(efx, drv, efx->net_dev,
943 			  "unable to restart interrupts on channel reallocation\n");
944 		efx_siena_schedule_reset(efx, RESET_TYPE_DISABLE);
945 	} else {
946 		efx_siena_start_all(efx);
947 		efx_device_attach_if_not_resetting(efx);
948 	}
949 	return rc;
950 
951 rollback:
952 	/* Swap back */
953 	efx->rxq_entries = old_rxq_entries;
954 	efx->txq_entries = old_txq_entries;
955 	for (i = 0; i < efx->n_channels; i++)
956 		swap(efx->channel[i], other_channel[i]);
957 	goto out;
958 }
959 
efx_siena_set_channels(struct efx_nic * efx)960 int efx_siena_set_channels(struct efx_nic *efx)
961 {
962 	struct efx_channel *channel;
963 	int rc;
964 
965 	if (efx->xdp_tx_queue_count) {
966 		EFX_WARN_ON_PARANOID(efx->xdp_tx_queues);
967 
968 		/* Allocate array for XDP TX queue lookup. */
969 		efx->xdp_tx_queues = kcalloc(efx->xdp_tx_queue_count,
970 					     sizeof(*efx->xdp_tx_queues),
971 					     GFP_KERNEL);
972 		if (!efx->xdp_tx_queues)
973 			return -ENOMEM;
974 	}
975 
976 	efx_for_each_channel(channel, efx) {
977 		if (channel->channel < efx->n_rx_channels)
978 			channel->rx_queue.core_index = channel->channel;
979 		else
980 			channel->rx_queue.core_index = -1;
981 	}
982 
983 	efx_set_xdp_channels(efx);
984 
985 	rc = netif_set_real_num_tx_queues(efx->net_dev, efx->n_tx_channels);
986 	if (rc)
987 		return rc;
988 	return netif_set_real_num_rx_queues(efx->net_dev, efx->n_rx_channels);
989 }
990 
efx_default_channel_want_txqs(struct efx_channel * channel)991 static bool efx_default_channel_want_txqs(struct efx_channel *channel)
992 {
993 	return channel->channel - channel->efx->tx_channel_offset <
994 		channel->efx->n_tx_channels;
995 }
996 
997 /*************
998  * START/STOP
999  *************/
1000 
efx_soft_enable_interrupts(struct efx_nic * efx)1001 static int efx_soft_enable_interrupts(struct efx_nic *efx)
1002 {
1003 	struct efx_channel *channel, *end_channel;
1004 	int rc;
1005 
1006 	BUG_ON(efx->state == STATE_DISABLED);
1007 
1008 	efx->irq_soft_enabled = true;
1009 	smp_wmb();
1010 
1011 	efx_for_each_channel(channel, efx) {
1012 		if (!channel->type->keep_eventq) {
1013 			rc = efx_init_eventq(channel);
1014 			if (rc)
1015 				goto fail;
1016 		}
1017 		efx_siena_start_eventq(channel);
1018 	}
1019 
1020 	efx_siena_mcdi_mode_event(efx);
1021 
1022 	return 0;
1023 fail:
1024 	end_channel = channel;
1025 	efx_for_each_channel(channel, efx) {
1026 		if (channel == end_channel)
1027 			break;
1028 		efx_siena_stop_eventq(channel);
1029 		if (!channel->type->keep_eventq)
1030 			efx_fini_eventq(channel);
1031 	}
1032 
1033 	return rc;
1034 }
1035 
efx_soft_disable_interrupts(struct efx_nic * efx)1036 static void efx_soft_disable_interrupts(struct efx_nic *efx)
1037 {
1038 	struct efx_channel *channel;
1039 
1040 	if (efx->state == STATE_DISABLED)
1041 		return;
1042 
1043 	efx_siena_mcdi_mode_poll(efx);
1044 
1045 	efx->irq_soft_enabled = false;
1046 	smp_wmb();
1047 
1048 	if (efx->legacy_irq)
1049 		synchronize_irq(efx->legacy_irq);
1050 
1051 	efx_for_each_channel(channel, efx) {
1052 		if (channel->irq)
1053 			synchronize_irq(channel->irq);
1054 
1055 		efx_siena_stop_eventq(channel);
1056 		if (!channel->type->keep_eventq)
1057 			efx_fini_eventq(channel);
1058 	}
1059 
1060 	/* Flush the asynchronous MCDI request queue */
1061 	efx_siena_mcdi_flush_async(efx);
1062 }
1063 
efx_siena_enable_interrupts(struct efx_nic * efx)1064 int efx_siena_enable_interrupts(struct efx_nic *efx)
1065 {
1066 	struct efx_channel *channel, *end_channel;
1067 	int rc;
1068 
1069 	/* TODO: Is this really a bug? */
1070 	BUG_ON(efx->state == STATE_DISABLED);
1071 
1072 	if (efx->eeh_disabled_legacy_irq) {
1073 		enable_irq(efx->legacy_irq);
1074 		efx->eeh_disabled_legacy_irq = false;
1075 	}
1076 
1077 	efx->type->irq_enable_master(efx);
1078 
1079 	efx_for_each_channel(channel, efx) {
1080 		if (channel->type->keep_eventq) {
1081 			rc = efx_init_eventq(channel);
1082 			if (rc)
1083 				goto fail;
1084 		}
1085 	}
1086 
1087 	rc = efx_soft_enable_interrupts(efx);
1088 	if (rc)
1089 		goto fail;
1090 
1091 	return 0;
1092 
1093 fail:
1094 	end_channel = channel;
1095 	efx_for_each_channel(channel, efx) {
1096 		if (channel == end_channel)
1097 			break;
1098 		if (channel->type->keep_eventq)
1099 			efx_fini_eventq(channel);
1100 	}
1101 
1102 	efx->type->irq_disable_non_ev(efx);
1103 
1104 	return rc;
1105 }
1106 
efx_siena_disable_interrupts(struct efx_nic * efx)1107 void efx_siena_disable_interrupts(struct efx_nic *efx)
1108 {
1109 	struct efx_channel *channel;
1110 
1111 	efx_soft_disable_interrupts(efx);
1112 
1113 	efx_for_each_channel(channel, efx) {
1114 		if (channel->type->keep_eventq)
1115 			efx_fini_eventq(channel);
1116 	}
1117 
1118 	efx->type->irq_disable_non_ev(efx);
1119 }
1120 
efx_siena_start_channels(struct efx_nic * efx)1121 void efx_siena_start_channels(struct efx_nic *efx)
1122 {
1123 	struct efx_tx_queue *tx_queue;
1124 	struct efx_rx_queue *rx_queue;
1125 	struct efx_channel *channel;
1126 
1127 	efx_for_each_channel_rev(channel, efx) {
1128 		efx_for_each_channel_tx_queue(tx_queue, channel) {
1129 			efx_siena_init_tx_queue(tx_queue);
1130 			atomic_inc(&efx->active_queues);
1131 		}
1132 
1133 		efx_for_each_channel_rx_queue(rx_queue, channel) {
1134 			efx_siena_init_rx_queue(rx_queue);
1135 			atomic_inc(&efx->active_queues);
1136 			efx_siena_stop_eventq(channel);
1137 			efx_siena_fast_push_rx_descriptors(rx_queue, false);
1138 			efx_siena_start_eventq(channel);
1139 		}
1140 
1141 		WARN_ON(channel->rx_pkt_n_frags);
1142 	}
1143 }
1144 
efx_siena_stop_channels(struct efx_nic * efx)1145 void efx_siena_stop_channels(struct efx_nic *efx)
1146 {
1147 	struct efx_tx_queue *tx_queue;
1148 	struct efx_rx_queue *rx_queue;
1149 	struct efx_channel *channel;
1150 	int rc = 0;
1151 
1152 	/* Stop RX refill */
1153 	efx_for_each_channel(channel, efx) {
1154 		efx_for_each_channel_rx_queue(rx_queue, channel)
1155 			rx_queue->refill_enabled = false;
1156 	}
1157 
1158 	efx_for_each_channel(channel, efx) {
1159 		/* RX packet processing is pipelined, so wait for the
1160 		 * NAPI handler to complete.  At least event queue 0
1161 		 * might be kept active by non-data events, so don't
1162 		 * use napi_synchronize() but actually disable NAPI
1163 		 * temporarily.
1164 		 */
1165 		if (efx_channel_has_rx_queue(channel)) {
1166 			efx_siena_stop_eventq(channel);
1167 			efx_siena_start_eventq(channel);
1168 		}
1169 	}
1170 
1171 	if (efx->type->fini_dmaq)
1172 		rc = efx->type->fini_dmaq(efx);
1173 
1174 	if (rc) {
1175 		netif_err(efx, drv, efx->net_dev, "failed to flush queues\n");
1176 	} else {
1177 		netif_dbg(efx, drv, efx->net_dev,
1178 			  "successfully flushed all queues\n");
1179 	}
1180 
1181 	efx_for_each_channel(channel, efx) {
1182 		efx_for_each_channel_rx_queue(rx_queue, channel)
1183 			efx_siena_fini_rx_queue(rx_queue);
1184 		efx_for_each_channel_tx_queue(tx_queue, channel)
1185 			efx_siena_fini_tx_queue(tx_queue);
1186 	}
1187 }
1188 
1189 /**************************************************************************
1190  *
1191  * NAPI interface
1192  *
1193  *************************************************************************/
1194 
1195 /* Process channel's event queue
1196  *
1197  * This function is responsible for processing the event queue of a
1198  * single channel.  The caller must guarantee that this function will
1199  * never be concurrently called more than once on the same channel,
1200  * though different channels may be being processed concurrently.
1201  */
efx_process_channel(struct efx_channel * channel,int budget)1202 static int efx_process_channel(struct efx_channel *channel, int budget)
1203 {
1204 	struct efx_tx_queue *tx_queue;
1205 	struct list_head rx_list;
1206 	int spent;
1207 
1208 	if (unlikely(!channel->enabled))
1209 		return 0;
1210 
1211 	/* Prepare the batch receive list */
1212 	EFX_WARN_ON_PARANOID(channel->rx_list != NULL);
1213 	INIT_LIST_HEAD(&rx_list);
1214 	channel->rx_list = &rx_list;
1215 
1216 	efx_for_each_channel_tx_queue(tx_queue, channel) {
1217 		tx_queue->pkts_compl = 0;
1218 		tx_queue->bytes_compl = 0;
1219 	}
1220 
1221 	spent = efx_nic_process_eventq(channel, budget);
1222 	if (spent && efx_channel_has_rx_queue(channel)) {
1223 		struct efx_rx_queue *rx_queue =
1224 			efx_channel_get_rx_queue(channel);
1225 
1226 		efx_rx_flush_packet(channel);
1227 		efx_siena_fast_push_rx_descriptors(rx_queue, true);
1228 	}
1229 
1230 	/* Update BQL */
1231 	efx_for_each_channel_tx_queue(tx_queue, channel) {
1232 		if (tx_queue->bytes_compl) {
1233 			netdev_tx_completed_queue(tx_queue->core_txq,
1234 						  tx_queue->pkts_compl,
1235 						  tx_queue->bytes_compl);
1236 		}
1237 	}
1238 
1239 	/* Receive any packets we queued up */
1240 	netif_receive_skb_list(channel->rx_list);
1241 	channel->rx_list = NULL;
1242 
1243 	return spent;
1244 }
1245 
efx_update_irq_mod(struct efx_nic * efx,struct efx_channel * channel)1246 static void efx_update_irq_mod(struct efx_nic *efx, struct efx_channel *channel)
1247 {
1248 	int step = efx->irq_mod_step_us;
1249 
1250 	if (channel->irq_mod_score < irq_adapt_low_thresh) {
1251 		if (channel->irq_moderation_us > step) {
1252 			channel->irq_moderation_us -= step;
1253 			efx->type->push_irq_moderation(channel);
1254 		}
1255 	} else if (channel->irq_mod_score > irq_adapt_high_thresh) {
1256 		if (channel->irq_moderation_us <
1257 		    efx->irq_rx_moderation_us) {
1258 			channel->irq_moderation_us += step;
1259 			efx->type->push_irq_moderation(channel);
1260 		}
1261 	}
1262 
1263 	channel->irq_count = 0;
1264 	channel->irq_mod_score = 0;
1265 }
1266 
1267 /* NAPI poll handler
1268  *
1269  * NAPI guarantees serialisation of polls of the same device, which
1270  * provides the guarantee required by efx_process_channel().
1271  */
efx_poll(struct napi_struct * napi,int budget)1272 static int efx_poll(struct napi_struct *napi, int budget)
1273 {
1274 	struct efx_channel *channel =
1275 		container_of(napi, struct efx_channel, napi_str);
1276 	struct efx_nic *efx = channel->efx;
1277 #ifdef CONFIG_RFS_ACCEL
1278 	unsigned int time;
1279 #endif
1280 	int spent;
1281 
1282 	netif_vdbg(efx, intr, efx->net_dev,
1283 		   "channel %d NAPI poll executing on CPU %d\n",
1284 		   channel->channel, raw_smp_processor_id());
1285 
1286 	spent = efx_process_channel(channel, budget);
1287 
1288 	xdp_do_flush_map();
1289 
1290 	if (spent < budget) {
1291 		if (efx_channel_has_rx_queue(channel) &&
1292 		    efx->irq_rx_adaptive &&
1293 		    unlikely(++channel->irq_count == 1000)) {
1294 			efx_update_irq_mod(efx, channel);
1295 		}
1296 
1297 #ifdef CONFIG_RFS_ACCEL
1298 		/* Perhaps expire some ARFS filters */
1299 		time = jiffies - channel->rfs_last_expiry;
1300 		/* Would our quota be >= 20? */
1301 		if (channel->rfs_filter_count * time >= 600 * HZ)
1302 			mod_delayed_work(system_wq, &channel->filter_work, 0);
1303 #endif
1304 
1305 		/* There is no race here; although napi_disable() will
1306 		 * only wait for napi_complete(), this isn't a problem
1307 		 * since efx_nic_eventq_read_ack() will have no effect if
1308 		 * interrupts have already been disabled.
1309 		 */
1310 		if (napi_complete_done(napi, spent))
1311 			efx_nic_eventq_read_ack(channel);
1312 	}
1313 
1314 	return spent;
1315 }
1316 
efx_init_napi_channel(struct efx_channel * channel)1317 static void efx_init_napi_channel(struct efx_channel *channel)
1318 {
1319 	struct efx_nic *efx = channel->efx;
1320 
1321 	channel->napi_dev = efx->net_dev;
1322 	netif_napi_add(channel->napi_dev, &channel->napi_str, efx_poll);
1323 }
1324 
efx_siena_init_napi(struct efx_nic * efx)1325 void efx_siena_init_napi(struct efx_nic *efx)
1326 {
1327 	struct efx_channel *channel;
1328 
1329 	efx_for_each_channel(channel, efx)
1330 		efx_init_napi_channel(channel);
1331 }
1332 
efx_fini_napi_channel(struct efx_channel * channel)1333 static void efx_fini_napi_channel(struct efx_channel *channel)
1334 {
1335 	if (channel->napi_dev)
1336 		netif_napi_del(&channel->napi_str);
1337 
1338 	channel->napi_dev = NULL;
1339 }
1340 
efx_siena_fini_napi(struct efx_nic * efx)1341 void efx_siena_fini_napi(struct efx_nic *efx)
1342 {
1343 	struct efx_channel *channel;
1344 
1345 	efx_for_each_channel(channel, efx)
1346 		efx_fini_napi_channel(channel);
1347 }
1348 
1349 /***************
1350  * Housekeeping
1351  ***************/
1352 
efx_channel_dummy_op_int(struct efx_channel * channel)1353 static int efx_channel_dummy_op_int(struct efx_channel *channel)
1354 {
1355 	return 0;
1356 }
1357 
efx_siena_channel_dummy_op_void(struct efx_channel * channel)1358 void efx_siena_channel_dummy_op_void(struct efx_channel *channel)
1359 {
1360 }
1361 
1362 static const struct efx_channel_type efx_default_channel_type = {
1363 	.pre_probe		= efx_channel_dummy_op_int,
1364 	.post_remove		= efx_siena_channel_dummy_op_void,
1365 	.get_name		= efx_get_channel_name,
1366 	.copy			= efx_copy_channel,
1367 	.want_txqs		= efx_default_channel_want_txqs,
1368 	.keep_eventq		= false,
1369 	.want_pio		= true,
1370 };
1371