xref: /linux/drivers/net/ethernet/pensando/ionic/ionic_txrx.c (revision c36461825469a9ceee2346a2e89286c522525da7)
1 // SPDX-License-Identifier: GPL-2.0
2 /* Copyright(c) 2017 - 2019 Pensando Systems, Inc */
3 
4 #include <linux/ip.h>
5 #include <linux/ipv6.h>
6 #include <linux/if_vlan.h>
7 #include <net/ip6_checksum.h>
8 #include <net/netdev_queues.h>
9 #include <net/page_pool/helpers.h>
10 
11 #include "ionic.h"
12 #include "ionic_lif.h"
13 #include "ionic_txrx.h"
14 
15 static dma_addr_t ionic_tx_map_single(struct ionic_queue *q,
16 				      void *data, size_t len);
17 
18 static dma_addr_t ionic_tx_map_frag(struct ionic_queue *q,
19 				    const skb_frag_t *frag,
20 				    size_t offset, size_t len);
21 
22 static void ionic_tx_desc_unmap_bufs(struct ionic_queue *q,
23 				     struct ionic_tx_desc_info *desc_info);
24 
25 static void ionic_tx_clean(struct ionic_queue *q,
26 			   struct ionic_tx_desc_info *desc_info,
27 			   struct ionic_txq_comp *comp,
28 			   bool in_napi);
29 
30 static inline void ionic_txq_post(struct ionic_queue *q, bool ring_dbell)
31 {
32 	/* Ensure TX descriptor writes reach memory before NIC reads them.
33 	 * Prevents device from fetching stale descriptors.
34 	 */
35 	dma_wmb();
36 	ionic_q_post(q, ring_dbell);
37 }
38 
39 static inline void ionic_rxq_post(struct ionic_queue *q, bool ring_dbell)
40 {
41 	ionic_q_post(q, ring_dbell);
42 }
43 
44 bool ionic_txq_poke_doorbell(struct ionic_queue *q)
45 {
46 	struct netdev_queue *netdev_txq;
47 	unsigned long now, then, dif;
48 	struct net_device *netdev;
49 
50 	netdev = q->lif->netdev;
51 	netdev_txq = netdev_get_tx_queue(netdev, q->index);
52 
53 	HARD_TX_LOCK(netdev, netdev_txq, smp_processor_id());
54 
55 	if (q->tail_idx == q->head_idx) {
56 		HARD_TX_UNLOCK(netdev, netdev_txq);
57 		return false;
58 	}
59 
60 	now = READ_ONCE(jiffies);
61 	then = q->dbell_jiffies;
62 	dif = now - then;
63 
64 	if (dif > q->dbell_deadline) {
65 		ionic_dbell_ring(q->lif->kern_dbpage, q->hw_type,
66 				 q->dbval | q->head_idx);
67 
68 		q->dbell_jiffies = now;
69 	}
70 
71 	HARD_TX_UNLOCK(netdev, netdev_txq);
72 
73 	return true;
74 }
75 
76 bool ionic_rxq_poke_doorbell(struct ionic_queue *q)
77 {
78 	unsigned long now, then, dif;
79 
80 	/* no lock, called from rx napi or txrx napi, nothing else can fill */
81 
82 	if (q->tail_idx == q->head_idx)
83 		return false;
84 
85 	now = READ_ONCE(jiffies);
86 	then = q->dbell_jiffies;
87 	dif = now - then;
88 
89 	if (dif > q->dbell_deadline) {
90 		ionic_dbell_ring(q->lif->kern_dbpage, q->hw_type,
91 				 q->dbval | q->head_idx);
92 
93 		q->dbell_jiffies = now;
94 
95 		dif = 2 * q->dbell_deadline;
96 		if (dif > IONIC_RX_MAX_DOORBELL_DEADLINE)
97 			dif = IONIC_RX_MAX_DOORBELL_DEADLINE;
98 
99 		q->dbell_deadline = dif;
100 	}
101 
102 	return true;
103 }
104 
105 static inline struct ionic_txq_sg_elem *ionic_tx_sg_elems(struct ionic_queue *q)
106 {
107 	if (likely(q->sg_desc_size == sizeof(struct ionic_txq_sg_desc_v1)))
108 		return q->txq_sgl_v1[q->head_idx].elems;
109 	else
110 		return q->txq_sgl[q->head_idx].elems;
111 }
112 
113 static inline struct netdev_queue *q_to_ndq(struct net_device *netdev,
114 					    struct ionic_queue *q)
115 {
116 	return netdev_get_tx_queue(netdev, q->index);
117 }
118 
119 static void *ionic_rx_buf_va(struct ionic_buf_info *buf_info)
120 {
121 	return page_address(buf_info->page) + buf_info->page_offset;
122 }
123 
124 static dma_addr_t ionic_rx_buf_pa(struct ionic_buf_info *buf_info)
125 {
126 	return page_pool_get_dma_addr(buf_info->page) + buf_info->page_offset;
127 }
128 
129 static void __ionic_rx_put_buf(struct ionic_queue *q,
130 			       struct ionic_buf_info *buf_info,
131 			       bool recycle_direct)
132 {
133 	if (!buf_info->page)
134 		return;
135 
136 	page_pool_put_full_page(q->page_pool, buf_info->page, recycle_direct);
137 	buf_info->page = NULL;
138 	buf_info->len = 0;
139 	buf_info->page_offset = 0;
140 }
141 
142 
143 static void ionic_rx_put_buf(struct ionic_queue *q,
144 			     struct ionic_buf_info *buf_info)
145 {
146 	__ionic_rx_put_buf(q, buf_info, false);
147 }
148 
149 static void ionic_rx_put_buf_direct(struct ionic_queue *q,
150 				    struct ionic_buf_info *buf_info)
151 {
152 	__ionic_rx_put_buf(q, buf_info, true);
153 }
154 
155 static void ionic_rx_add_skb_frag(struct ionic_queue *q,
156 				  struct sk_buff *skb,
157 				  struct ionic_buf_info *buf_info,
158 				  u32 headroom, u32 len,
159 				  bool synced)
160 {
161 	if (!synced)
162 		page_pool_dma_sync_for_cpu(q->page_pool,
163 					   buf_info->page,
164 					   buf_info->page_offset + headroom,
165 					   len);
166 
167 	skb_add_rx_frag(skb, skb_shinfo(skb)->nr_frags,
168 			buf_info->page, buf_info->page_offset + headroom,
169 			len, buf_info->len);
170 
171 	/* napi_gro_frags() will release/recycle the
172 	 * page_pool buffers from the frags list
173 	 */
174 	buf_info->page = NULL;
175 	buf_info->len = 0;
176 	buf_info->page_offset = 0;
177 }
178 
179 static struct sk_buff *ionic_rx_build_skb(struct ionic_queue *q,
180 					  struct ionic_rx_desc_info *desc_info,
181 					  unsigned int headroom,
182 					  unsigned int len,
183 					  unsigned int num_sg_elems,
184 					  bool synced)
185 {
186 	struct ionic_buf_info *buf_info;
187 	struct sk_buff *skb;
188 	unsigned int i;
189 	u16 frag_len;
190 
191 	buf_info = &desc_info->bufs[0];
192 	prefetchw(buf_info->page);
193 
194 	skb = napi_get_frags(&q_to_qcq(q)->napi);
195 	if (unlikely(!skb)) {
196 		net_warn_ratelimited("%s: SKB alloc failed on %s!\n",
197 				     dev_name(q->dev), q->name);
198 		q_to_rx_stats(q)->alloc_err++;
199 		return NULL;
200 	}
201 	skb_mark_for_recycle(skb);
202 
203 	if (headroom)
204 		frag_len = min_t(u16, len,
205 				 IONIC_XDP_MAX_LINEAR_MTU + VLAN_ETH_HLEN);
206 	else
207 		frag_len = min_t(u16, len, IONIC_PAGE_SIZE);
208 
209 	if (unlikely(!buf_info->page))
210 		goto err_bad_buf_page;
211 	ionic_rx_add_skb_frag(q, skb, buf_info, headroom, frag_len, synced);
212 	len -= frag_len;
213 	buf_info++;
214 
215 	for (i = 0; i < num_sg_elems; i++, buf_info++) {
216 		if (unlikely(!buf_info->page))
217 			goto err_bad_buf_page;
218 		frag_len = min_t(u16, len, buf_info->len);
219 		ionic_rx_add_skb_frag(q, skb, buf_info, 0, frag_len, synced);
220 		len -= frag_len;
221 	}
222 
223 	return skb;
224 
225 err_bad_buf_page:
226 	dev_kfree_skb(skb);
227 	return NULL;
228 }
229 
230 static struct sk_buff *ionic_rx_copybreak(struct net_device *netdev,
231 					  struct ionic_queue *q,
232 					  struct ionic_rx_desc_info *desc_info,
233 					  unsigned int headroom,
234 					  unsigned int len,
235 					  unsigned int num_sg_elems,
236 					  bool synced)
237 {
238 	struct ionic_buf_info *buf_info;
239 	struct device *dev = q->dev;
240 	struct sk_buff *skb;
241 	int i;
242 
243 	buf_info = &desc_info->bufs[0];
244 
245 	skb = napi_alloc_skb(&q_to_qcq(q)->napi, len);
246 	if (unlikely(!skb)) {
247 		net_warn_ratelimited("%s: SKB alloc failed on %s!\n",
248 				     dev_name(dev), q->name);
249 		q_to_rx_stats(q)->alloc_err++;
250 		return NULL;
251 	}
252 	skb_mark_for_recycle(skb);
253 
254 	if (!synced)
255 		page_pool_dma_sync_for_cpu(q->page_pool,
256 					   buf_info->page,
257 					   buf_info->page_offset + headroom,
258 					   len);
259 
260 	skb_copy_to_linear_data(skb, ionic_rx_buf_va(buf_info) + headroom, len);
261 
262 	skb_put(skb, len);
263 	skb->protocol = eth_type_trans(skb, netdev);
264 
265 	/* recycle the Rx buffer now that we're done with it */
266 	ionic_rx_put_buf_direct(q, buf_info);
267 	buf_info++;
268 	for (i = 0; i < num_sg_elems; i++, buf_info++)
269 		ionic_rx_put_buf_direct(q, buf_info);
270 
271 	return skb;
272 }
273 
274 static void ionic_xdp_tx_desc_clean(struct ionic_queue *q,
275 				    struct ionic_tx_desc_info *desc_info,
276 				    bool in_napi)
277 {
278 	struct xdp_frame_bulk bq;
279 
280 	if (!desc_info->nbufs)
281 		return;
282 
283 	xdp_frame_bulk_init(&bq);
284 	rcu_read_lock(); /* need for xdp_return_frame_bulk */
285 
286 	if (desc_info->act == XDP_TX) {
287 		if (likely(in_napi))
288 			xdp_return_frame_rx_napi(desc_info->xdpf);
289 		else
290 			xdp_return_frame(desc_info->xdpf);
291 	} else if (desc_info->act == XDP_REDIRECT) {
292 		ionic_tx_desc_unmap_bufs(q, desc_info);
293 		xdp_return_frame_bulk(desc_info->xdpf, &bq);
294 	}
295 
296 	xdp_flush_frame_bulk(&bq);
297 	rcu_read_unlock();
298 
299 	desc_info->nbufs = 0;
300 	desc_info->xdpf = NULL;
301 	desc_info->act = 0;
302 }
303 
304 static int ionic_xdp_post_frame(struct ionic_queue *q, struct xdp_frame *frame,
305 				enum xdp_action act, struct page *page, int off,
306 				bool ring_doorbell)
307 {
308 	struct ionic_tx_desc_info *desc_info;
309 	struct ionic_buf_info *buf_info;
310 	struct ionic_tx_stats *stats;
311 	struct ionic_txq_desc *desc;
312 	size_t len = frame->len;
313 	dma_addr_t dma_addr;
314 	u64 cmd;
315 
316 	desc_info = &q->tx_info[q->head_idx];
317 	desc = &q->txq[q->head_idx];
318 	buf_info = desc_info->bufs;
319 	stats = q_to_tx_stats(q);
320 
321 	if (act == XDP_TX) {
322 		dma_addr = page_pool_get_dma_addr(page) +
323 			   off + XDP_PACKET_HEADROOM;
324 		dma_sync_single_for_device(q->dev, dma_addr,
325 					   len, DMA_TO_DEVICE);
326 	} else /* XDP_REDIRECT */ {
327 		dma_addr = ionic_tx_map_single(q, frame->data, len);
328 		if (dma_addr == DMA_MAPPING_ERROR)
329 			return -EIO;
330 	}
331 
332 	buf_info->dma_addr = dma_addr;
333 	buf_info->len = len;
334 	buf_info->page = page;
335 	buf_info->page_offset = off;
336 
337 	desc_info->nbufs = 1;
338 	desc_info->xdpf = frame;
339 	desc_info->act = act;
340 
341 	if (xdp_frame_has_frags(frame)) {
342 		struct ionic_txq_sg_elem *elem;
343 		struct skb_shared_info *sinfo;
344 		struct ionic_buf_info *bi;
345 		skb_frag_t *frag;
346 		int i;
347 
348 		bi = &buf_info[1];
349 		sinfo = xdp_get_shared_info_from_frame(frame);
350 		frag = sinfo->frags;
351 		elem = ionic_tx_sg_elems(q);
352 		for (i = 0; i < sinfo->nr_frags; i++, frag++, bi++) {
353 			if (act == XDP_TX) {
354 				struct page *pg = skb_frag_page(frag);
355 
356 				dma_addr = page_pool_get_dma_addr(pg) +
357 					   skb_frag_off(frag);
358 				dma_sync_single_for_device(q->dev, dma_addr,
359 							   skb_frag_size(frag),
360 							   DMA_TO_DEVICE);
361 			} else {
362 				dma_addr = ionic_tx_map_frag(q, frag, 0,
363 							     skb_frag_size(frag));
364 				if (dma_addr == DMA_MAPPING_ERROR) {
365 					ionic_tx_desc_unmap_bufs(q, desc_info);
366 					return -EIO;
367 				}
368 			}
369 			bi->dma_addr = dma_addr;
370 			bi->len = skb_frag_size(frag);
371 			bi->page = skb_frag_page(frag);
372 
373 			elem->addr = cpu_to_le64(bi->dma_addr);
374 			elem->len = cpu_to_le16(bi->len);
375 			elem++;
376 
377 			desc_info->nbufs++;
378 		}
379 	}
380 
381 	cmd = encode_txq_desc_cmd(IONIC_TXQ_DESC_OPCODE_CSUM_NONE,
382 				  0, (desc_info->nbufs - 1), buf_info->dma_addr);
383 	desc->cmd = cpu_to_le64(cmd);
384 	desc->len = cpu_to_le16(len);
385 	desc->csum_start = 0;
386 	desc->csum_offset = 0;
387 
388 	stats->xdp_frames++;
389 	stats->pkts++;
390 	stats->bytes += len;
391 
392 	ionic_txq_post(q, ring_doorbell);
393 
394 	return 0;
395 }
396 
397 int ionic_xdp_xmit(struct net_device *netdev, int n,
398 		   struct xdp_frame **xdp_frames, u32 flags)
399 {
400 	struct ionic_lif *lif = netdev_priv(netdev);
401 	struct ionic_queue *txq;
402 	struct netdev_queue *nq;
403 	int nxmit;
404 	int space;
405 	int cpu;
406 	int qi;
407 
408 	if (unlikely(!test_bit(IONIC_LIF_F_UP, lif->state)))
409 		return -ENETDOWN;
410 
411 	if (unlikely(flags & ~XDP_XMIT_FLAGS_MASK))
412 		return -EINVAL;
413 
414 	/* AdminQ is assumed on cpu 0, while we attempt to affinitize the
415 	 * TxRx queue pairs 0..n-1 on cpus 1..n.  We try to keep with that
416 	 * affinitization here, but of course irqbalance and friends might
417 	 * have juggled things anyway, so we have to check for the 0 case.
418 	 */
419 	cpu = smp_processor_id();
420 	qi = cpu ? (cpu - 1) % lif->nxqs : cpu;
421 
422 	txq = &lif->txqcqs[qi]->q;
423 	nq = netdev_get_tx_queue(netdev, txq->index);
424 	__netif_tx_lock(nq, cpu);
425 	txq_trans_cond_update(nq);
426 
427 	if (netif_tx_queue_stopped(nq) ||
428 	    !netif_txq_maybe_stop(q_to_ndq(netdev, txq),
429 				  ionic_q_space_avail(txq),
430 				  1, 1)) {
431 		__netif_tx_unlock(nq);
432 		return -EIO;
433 	}
434 
435 	space = min_t(int, n, ionic_q_space_avail(txq));
436 	for (nxmit = 0; nxmit < space ; nxmit++) {
437 		if (ionic_xdp_post_frame(txq, xdp_frames[nxmit],
438 					 XDP_REDIRECT,
439 					 virt_to_page(xdp_frames[nxmit]->data),
440 					 0, false)) {
441 			nxmit--;
442 			break;
443 		}
444 	}
445 
446 	if (flags & XDP_XMIT_FLUSH)
447 		ionic_dbell_ring(lif->kern_dbpage, txq->hw_type,
448 				 txq->dbval | txq->head_idx);
449 
450 	netif_txq_maybe_stop(q_to_ndq(netdev, txq),
451 			     ionic_q_space_avail(txq),
452 			     4, 4);
453 	__netif_tx_unlock(nq);
454 
455 	return nxmit;
456 }
457 
458 static void ionic_xdp_rx_unlink_bufs(struct ionic_queue *q,
459 				     struct ionic_buf_info *buf_info,
460 				     int nbufs)
461 {
462 	int i;
463 
464 	for (i = 0; i < nbufs; i++) {
465 		buf_info->page = NULL;
466 		buf_info++;
467 	}
468 }
469 
470 static bool ionic_run_xdp(struct ionic_rx_stats *stats,
471 			  struct net_device *netdev,
472 			  struct bpf_prog *xdp_prog,
473 			  struct ionic_queue *rxq,
474 			  struct ionic_buf_info *buf_info,
475 			  int len)
476 {
477 	u32 xdp_action = XDP_ABORTED;
478 	struct xdp_buff xdp_buf;
479 	struct ionic_queue *txq;
480 	struct netdev_queue *nq;
481 	struct xdp_frame *xdpf;
482 	int remain_len;
483 	int nbufs = 1;
484 	int frag_len;
485 	int err = 0;
486 
487 	xdp_init_buff(&xdp_buf, IONIC_PAGE_SIZE, rxq->xdp_rxq_info);
488 	frag_len = min_t(u16, len, IONIC_XDP_MAX_LINEAR_MTU + VLAN_ETH_HLEN);
489 	xdp_prepare_buff(&xdp_buf, ionic_rx_buf_va(buf_info),
490 			 XDP_PACKET_HEADROOM, frag_len, false);
491 	page_pool_dma_sync_for_cpu(rxq->page_pool, buf_info->page,
492 				   buf_info->page_offset + XDP_PACKET_HEADROOM,
493 				   frag_len);
494 	prefetchw(&xdp_buf.data_hard_start);
495 
496 	/*  We limit MTU size to one buffer if !xdp_has_frags, so
497 	 *  if the recv len is bigger than one buffer
498 	 *     then we know we have frag info to gather
499 	 */
500 	remain_len = len - frag_len;
501 	if (remain_len) {
502 		struct skb_shared_info *sinfo;
503 		struct ionic_buf_info *bi;
504 		skb_frag_t *frag;
505 
506 		bi = buf_info;
507 		sinfo = xdp_get_shared_info_from_buff(&xdp_buf);
508 		sinfo->nr_frags = 0;
509 		sinfo->xdp_frags_size = 0;
510 		xdp_buff_set_frags_flag(&xdp_buf);
511 
512 		do {
513 			if (unlikely(sinfo->nr_frags >= MAX_SKB_FRAGS)) {
514 				err = -ENOSPC;
515 				break;
516 			}
517 
518 			frag = &sinfo->frags[sinfo->nr_frags];
519 			sinfo->nr_frags++;
520 			bi++;
521 			frag_len = min_t(u16, remain_len, bi->len);
522 			page_pool_dma_sync_for_cpu(rxq->page_pool, bi->page,
523 						   buf_info->page_offset,
524 						   frag_len);
525 			skb_frag_fill_page_desc(frag, bi->page, 0, frag_len);
526 			sinfo->xdp_frags_size += frag_len;
527 			remain_len -= frag_len;
528 
529 			if (page_is_pfmemalloc(bi->page))
530 				xdp_buff_set_frag_pfmemalloc(&xdp_buf);
531 		} while (remain_len > 0);
532 		nbufs += sinfo->nr_frags;
533 	}
534 
535 	xdp_action = bpf_prog_run_xdp(xdp_prog, &xdp_buf);
536 
537 	switch (xdp_action) {
538 	case XDP_PASS:
539 		stats->xdp_pass++;
540 		return false;  /* false = we didn't consume the packet */
541 
542 	case XDP_DROP:
543 		ionic_rx_put_buf_direct(rxq, buf_info);
544 		stats->xdp_drop++;
545 		break;
546 
547 	case XDP_TX:
548 		txq = rxq->partner;
549 		if (unlikely(!txq)) {
550 			err = -EIO;
551 			break;
552 		}
553 
554 		xdpf = xdp_convert_buff_to_frame(&xdp_buf);
555 		if (!xdpf) {
556 			err = -ENOSPC;
557 			break;
558 		}
559 
560 		nq = netdev_get_tx_queue(netdev, txq->index);
561 		__netif_tx_lock(nq, smp_processor_id());
562 		txq_trans_cond_update(nq);
563 
564 		if (netif_tx_queue_stopped(nq) ||
565 		    !netif_txq_maybe_stop(q_to_ndq(netdev, txq),
566 					  ionic_q_space_avail(txq),
567 					  1, 1)) {
568 			__netif_tx_unlock(nq);
569 			err = -EIO;
570 			break;
571 		}
572 
573 		err = ionic_xdp_post_frame(txq, xdpf, XDP_TX,
574 					   buf_info->page,
575 					   buf_info->page_offset,
576 					   true);
577 		__netif_tx_unlock(nq);
578 		if (unlikely(err)) {
579 			netdev_dbg(netdev, "tx ionic_xdp_post_frame err %d\n", err);
580 			break;
581 		}
582 		ionic_xdp_rx_unlink_bufs(rxq, buf_info, nbufs);
583 		stats->xdp_tx++;
584 		break;
585 
586 	case XDP_REDIRECT:
587 		err = xdp_do_redirect(netdev, &xdp_buf, xdp_prog);
588 		if (unlikely(err)) {
589 			netdev_dbg(netdev, "xdp_do_redirect err %d\n", err);
590 			break;
591 		}
592 		ionic_xdp_rx_unlink_bufs(rxq, buf_info, nbufs);
593 		rxq->xdp_flush = true;
594 		stats->xdp_redirect++;
595 		break;
596 
597 	case XDP_ABORTED:
598 	default:
599 		err = -EIO;
600 		break;
601 	}
602 
603 	if (err) {
604 		ionic_rx_put_buf_direct(rxq, buf_info);
605 		trace_xdp_exception(netdev, xdp_prog, xdp_action);
606 		stats->xdp_aborted++;
607 	}
608 
609 	return true;
610 }
611 
612 static void ionic_rx_clean(struct ionic_queue *q,
613 			   struct ionic_rx_desc_info *desc_info,
614 			   struct ionic_rxq_comp *comp,
615 			   struct bpf_prog *xdp_prog)
616 {
617 	struct net_device *netdev = q->lif->netdev;
618 	struct ionic_qcq *qcq = q_to_qcq(q);
619 	struct ionic_rx_stats *stats;
620 	unsigned int headroom = 0;
621 	struct sk_buff *skb;
622 	bool synced = false;
623 	bool use_copybreak;
624 	u16 len;
625 
626 	stats = q_to_rx_stats(q);
627 
628 	if (unlikely(comp->status)) {
629 		/* Most likely status==2 and the pkt received was bigger
630 		 * than the buffer available: comp->len will show the
631 		 * pkt size received that didn't fit the advertised desc.len
632 		 */
633 		dev_dbg(q->dev, "q%d drop comp->status %d comp->len %d desc->len %d\n",
634 			q->index, comp->status, comp->len, q->rxq[q->head_idx].len);
635 
636 		stats->dropped++;
637 		return;
638 	}
639 
640 	len = le16_to_cpu(comp->len);
641 	stats->pkts++;
642 	stats->bytes += len;
643 
644 	if (xdp_prog) {
645 		if (ionic_run_xdp(stats, netdev, xdp_prog, q, desc_info->bufs, len))
646 			return;
647 		synced = true;
648 		headroom = XDP_PACKET_HEADROOM;
649 	}
650 
651 	use_copybreak = len <= q->lif->rx_copybreak;
652 	if (use_copybreak)
653 		skb = ionic_rx_copybreak(netdev, q, desc_info,
654 					 headroom, len,
655 					 comp->num_sg_elems, synced);
656 	else
657 		skb = ionic_rx_build_skb(q, desc_info, headroom, len,
658 					 comp->num_sg_elems, synced);
659 
660 	if (unlikely(!skb)) {
661 		stats->dropped++;
662 		return;
663 	}
664 
665 	skb_record_rx_queue(skb, q->index);
666 
667 	if (likely(netdev->features & NETIF_F_RXHASH)) {
668 		switch (comp->pkt_type_color & IONIC_RXQ_COMP_PKT_TYPE_MASK) {
669 		case IONIC_PKT_TYPE_IPV4:
670 		case IONIC_PKT_TYPE_IPV6:
671 			skb_set_hash(skb, le32_to_cpu(comp->rss_hash),
672 				     PKT_HASH_TYPE_L3);
673 			break;
674 		case IONIC_PKT_TYPE_IPV4_TCP:
675 		case IONIC_PKT_TYPE_IPV6_TCP:
676 		case IONIC_PKT_TYPE_IPV4_UDP:
677 		case IONIC_PKT_TYPE_IPV6_UDP:
678 			skb_set_hash(skb, le32_to_cpu(comp->rss_hash),
679 				     PKT_HASH_TYPE_L4);
680 			break;
681 		}
682 	}
683 
684 	if (likely(netdev->features & NETIF_F_RXCSUM) &&
685 	    (comp->csum_flags & IONIC_RXQ_COMP_CSUM_F_CALC)) {
686 		skb->ip_summed = CHECKSUM_COMPLETE;
687 		skb->csum = (__force __wsum)le16_to_cpu(comp->csum);
688 		stats->csum_complete++;
689 	} else {
690 		stats->csum_none++;
691 	}
692 
693 	if (unlikely((comp->csum_flags & IONIC_RXQ_COMP_CSUM_F_TCP_BAD) ||
694 		     (comp->csum_flags & IONIC_RXQ_COMP_CSUM_F_UDP_BAD) ||
695 		     (comp->csum_flags & IONIC_RXQ_COMP_CSUM_F_IP_BAD)))
696 		stats->csum_error++;
697 
698 	if (likely(netdev->features & NETIF_F_HW_VLAN_CTAG_RX) &&
699 	    (comp->csum_flags & IONIC_RXQ_COMP_CSUM_F_VLAN)) {
700 		__vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q),
701 				       le16_to_cpu(comp->vlan_tci));
702 		stats->vlan_stripped++;
703 	}
704 
705 	if (unlikely(q->features & IONIC_RXQ_F_HWSTAMP)) {
706 		__le64 *cq_desc_hwstamp;
707 		u64 hwstamp;
708 
709 		cq_desc_hwstamp =
710 			(void *)comp +
711 			qcq->cq.desc_size -
712 			sizeof(struct ionic_rxq_comp) -
713 			IONIC_HWSTAMP_CQ_NEGOFFSET;
714 
715 		hwstamp = le64_to_cpu(*cq_desc_hwstamp);
716 
717 		if (hwstamp != IONIC_HWSTAMP_INVALID) {
718 			skb_hwtstamps(skb)->hwtstamp = ionic_lif_phc_ktime(q->lif, hwstamp);
719 			stats->hwstamp_valid++;
720 		} else {
721 			stats->hwstamp_invalid++;
722 		}
723 	}
724 
725 	if (use_copybreak)
726 		napi_gro_receive(&qcq->napi, skb);
727 	else
728 		napi_gro_frags(&qcq->napi);
729 }
730 
731 static bool __ionic_rx_service(struct ionic_cq *cq, struct bpf_prog *xdp_prog)
732 {
733 	struct ionic_rx_desc_info *desc_info;
734 	struct ionic_queue *q = cq->bound_q;
735 	struct ionic_rxq_comp *comp;
736 
737 	comp = &((struct ionic_rxq_comp *)cq->base)[cq->tail_idx];
738 
739 	if (!color_match(comp->pkt_type_color, cq->done_color))
740 		return false;
741 
742 	/* check for empty queue */
743 	if (q->tail_idx == q->head_idx)
744 		return false;
745 
746 	if (q->tail_idx != le16_to_cpu(comp->comp_index))
747 		return false;
748 
749 	desc_info = &q->rx_info[q->tail_idx];
750 	q->tail_idx = (q->tail_idx + 1) & (q->num_descs - 1);
751 
752 	/* clean the related q entry, only one per qc completion */
753 	ionic_rx_clean(q, desc_info, comp, xdp_prog);
754 
755 	return true;
756 }
757 
758 bool ionic_rx_service(struct ionic_cq *cq)
759 {
760 	return __ionic_rx_service(cq, NULL);
761 }
762 
763 static inline void ionic_write_cmb_desc(struct ionic_queue *q,
764 					void *desc)
765 {
766 	/* Since Rx and Tx descriptors are the same size, we can
767 	 * save an instruction or two and skip the qtype check.
768 	 */
769 	if (unlikely(q_to_qcq(q)->flags & IONIC_QCQ_F_CMB_RINGS))
770 		memcpy_toio(&q->cmb_txq[q->head_idx], desc, sizeof(q->cmb_txq[0]));
771 }
772 
773 void ionic_rx_fill(struct ionic_queue *q, struct bpf_prog *xdp_prog)
774 {
775 	struct net_device *netdev = q->lif->netdev;
776 	struct ionic_rx_desc_info *desc_info;
777 	struct ionic_rxq_sg_elem *sg_elem;
778 	struct ionic_buf_info *buf_info;
779 	unsigned int fill_threshold;
780 	struct ionic_rxq_desc *desc;
781 	unsigned int first_frag_len;
782 	unsigned int first_buf_len;
783 	unsigned int headroom = 0;
784 	unsigned int remain_len;
785 	unsigned int frag_len;
786 	unsigned int nfrags;
787 	unsigned int n_fill;
788 	unsigned int len;
789 	unsigned int i;
790 	unsigned int j;
791 
792 	n_fill = ionic_q_space_avail(q);
793 
794 	fill_threshold = min_t(unsigned int, IONIC_RX_FILL_THRESHOLD,
795 			       q->num_descs / IONIC_RX_FILL_DIV);
796 	if (n_fill < fill_threshold)
797 		return;
798 
799 	len = netdev->mtu + VLAN_ETH_HLEN;
800 
801 	if (xdp_prog) {
802 		/* Always alloc the full size buffer, but only need
803 		 * the actual frag_len in the descriptor
804 		 * XDP uses space in the first buffer, so account for
805 		 * head room, tail room, and ip header in the first frag size.
806 		 */
807 		headroom = XDP_PACKET_HEADROOM;
808 		first_buf_len = IONIC_XDP_MAX_LINEAR_MTU + VLAN_ETH_HLEN + headroom;
809 		first_frag_len = min_t(u16, len + headroom, first_buf_len);
810 	} else {
811 		/* Use MTU size if smaller than max buffer size */
812 		first_frag_len = min_t(u16, len, IONIC_PAGE_SIZE);
813 		first_buf_len = first_frag_len;
814 	}
815 
816 	for (i = n_fill; i; i--) {
817 		/* fill main descriptor - buf[0] */
818 		nfrags = 0;
819 		remain_len = len;
820 		desc = &q->rxq[q->head_idx];
821 		desc_info = &q->rx_info[q->head_idx];
822 		buf_info = &desc_info->bufs[0];
823 
824 		buf_info->len = first_buf_len;
825 		frag_len = first_frag_len - headroom;
826 
827 		/* get a new buffer if we can't reuse one */
828 		if (!buf_info->page)
829 			buf_info->page = page_pool_alloc(q->page_pool,
830 							 &buf_info->page_offset,
831 							 &buf_info->len,
832 							 GFP_ATOMIC);
833 		if (unlikely(!buf_info->page)) {
834 			buf_info->len = 0;
835 			return;
836 		}
837 
838 		desc->addr = cpu_to_le64(ionic_rx_buf_pa(buf_info) + headroom);
839 		desc->len = cpu_to_le16(frag_len);
840 		remain_len -= frag_len;
841 		buf_info++;
842 		nfrags++;
843 
844 		/* fill sg descriptors - buf[1..n] */
845 		sg_elem = q->rxq_sgl[q->head_idx].elems;
846 		for (j = 0; remain_len > 0 && j < q->max_sg_elems; j++, sg_elem++) {
847 			frag_len = min_t(u16, remain_len, IONIC_PAGE_SIZE);
848 
849 			/* Recycle any leftover buffers that are too small to reuse */
850 			if (unlikely(buf_info->page && buf_info->len < frag_len))
851 				ionic_rx_put_buf_direct(q, buf_info);
852 
853 			/* Get new buffer if needed */
854 			if (!buf_info->page) {
855 				buf_info->len = frag_len;
856 				buf_info->page = page_pool_alloc(q->page_pool,
857 								 &buf_info->page_offset,
858 								 &buf_info->len,
859 								 GFP_ATOMIC);
860 				if (unlikely(!buf_info->page)) {
861 					buf_info->len = 0;
862 					return;
863 				}
864 			}
865 
866 			sg_elem->addr = cpu_to_le64(ionic_rx_buf_pa(buf_info));
867 			sg_elem->len = cpu_to_le16(frag_len);
868 			remain_len -= frag_len;
869 			buf_info++;
870 			nfrags++;
871 		}
872 
873 		/* clear end sg element as a sentinel */
874 		if (j < q->max_sg_elems)
875 			memset(sg_elem, 0, sizeof(*sg_elem));
876 
877 		desc->opcode = (nfrags > 1) ? IONIC_RXQ_DESC_OPCODE_SG :
878 					      IONIC_RXQ_DESC_OPCODE_SIMPLE;
879 		desc_info->nbufs = nfrags;
880 
881 		ionic_write_cmb_desc(q, desc);
882 
883 		ionic_rxq_post(q, false);
884 	}
885 
886 	ionic_dbell_ring(q->lif->kern_dbpage, q->hw_type,
887 			 q->dbval | q->head_idx);
888 
889 	q->dbell_deadline = IONIC_RX_MIN_DOORBELL_DEADLINE;
890 	q->dbell_jiffies = jiffies;
891 }
892 
893 void ionic_rx_empty(struct ionic_queue *q)
894 {
895 	struct ionic_rx_desc_info *desc_info;
896 	unsigned int i, j;
897 
898 	for (i = 0; i < q->num_descs; i++) {
899 		desc_info = &q->rx_info[i];
900 		for (j = 0; j < ARRAY_SIZE(desc_info->bufs); j++)
901 			ionic_rx_put_buf(q, &desc_info->bufs[j]);
902 		desc_info->nbufs = 0;
903 	}
904 
905 	q->head_idx = 0;
906 	q->tail_idx = 0;
907 }
908 
909 static void ionic_dim_update(struct ionic_qcq *qcq, int napi_mode)
910 {
911 	struct dim_sample dim_sample;
912 	struct ionic_lif *lif;
913 	unsigned int qi;
914 	u64 pkts, bytes;
915 
916 	if (!qcq->intr.dim_coal_hw)
917 		return;
918 
919 	lif = qcq->q.lif;
920 	qi = qcq->cq.bound_q->index;
921 
922 	switch (napi_mode) {
923 	case IONIC_LIF_F_TX_DIM_INTR:
924 		pkts = lif->txqstats[qi].pkts;
925 		bytes = lif->txqstats[qi].bytes;
926 		break;
927 	case IONIC_LIF_F_RX_DIM_INTR:
928 		pkts = lif->rxqstats[qi].pkts;
929 		bytes = lif->rxqstats[qi].bytes;
930 		break;
931 	default:
932 		pkts = lif->txqstats[qi].pkts + lif->rxqstats[qi].pkts;
933 		bytes = lif->txqstats[qi].bytes + lif->rxqstats[qi].bytes;
934 		break;
935 	}
936 
937 	dim_update_sample(qcq->cq.bound_intr->rearm_count,
938 			  pkts, bytes, &dim_sample);
939 
940 	net_dim(&qcq->dim, &dim_sample);
941 }
942 
943 int ionic_tx_napi(struct napi_struct *napi, int budget)
944 {
945 	struct ionic_qcq *qcq = napi_to_qcq(napi);
946 	struct ionic_cq *cq = napi_to_cq(napi);
947 	u32 work_done = 0;
948 	u32 flags = 0;
949 
950 	work_done = ionic_tx_cq_service(cq, budget, !!budget);
951 
952 	if (unlikely(!budget))
953 		return budget;
954 
955 	if (work_done < budget && napi_complete_done(napi, work_done)) {
956 		ionic_dim_update(qcq, IONIC_LIF_F_TX_DIM_INTR);
957 		flags |= IONIC_INTR_CRED_UNMASK;
958 		cq->bound_intr->rearm_count++;
959 	}
960 
961 	if (work_done || flags) {
962 		flags |= IONIC_INTR_CRED_RESET_COALESCE;
963 		ionic_intr_credits(cq->idev->intr_ctrl,
964 				   cq->bound_intr->index,
965 				   work_done, flags);
966 	}
967 
968 	if (!work_done && cq->bound_q->lif->doorbell_wa)
969 		ionic_txq_poke_doorbell(&qcq->q);
970 
971 	return work_done;
972 }
973 
974 static void ionic_xdp_do_flush(struct ionic_cq *cq)
975 {
976 	if (cq->bound_q->xdp_flush) {
977 		xdp_do_flush();
978 		cq->bound_q->xdp_flush = false;
979 	}
980 }
981 
982 static unsigned int ionic_rx_cq_service(struct ionic_cq *cq,
983 					unsigned int work_to_do)
984 {
985 	struct ionic_queue *q = cq->bound_q;
986 	unsigned int work_done = 0;
987 	struct bpf_prog *xdp_prog;
988 
989 	if (work_to_do == 0)
990 		return 0;
991 
992 	xdp_prog = READ_ONCE(q->xdp_prog);
993 	while (__ionic_rx_service(cq, xdp_prog)) {
994 		if (cq->tail_idx == cq->num_descs - 1)
995 			cq->done_color = !cq->done_color;
996 
997 		cq->tail_idx = (cq->tail_idx + 1) & (cq->num_descs - 1);
998 
999 		if (++work_done >= work_to_do)
1000 			break;
1001 	}
1002 	ionic_rx_fill(q, xdp_prog);
1003 	ionic_xdp_do_flush(cq);
1004 
1005 	return work_done;
1006 }
1007 
1008 int ionic_rx_napi(struct napi_struct *napi, int budget)
1009 {
1010 	struct ionic_qcq *qcq = napi_to_qcq(napi);
1011 	struct ionic_cq *cq = napi_to_cq(napi);
1012 	u32 work_done = 0;
1013 	u32 flags = 0;
1014 
1015 	if (unlikely(!budget))
1016 		return budget;
1017 
1018 	work_done = ionic_rx_cq_service(cq, budget);
1019 
1020 	if (work_done < budget && napi_complete_done(napi, work_done)) {
1021 		ionic_dim_update(qcq, IONIC_LIF_F_RX_DIM_INTR);
1022 		flags |= IONIC_INTR_CRED_UNMASK;
1023 		cq->bound_intr->rearm_count++;
1024 	}
1025 
1026 	if (work_done || flags) {
1027 		flags |= IONIC_INTR_CRED_RESET_COALESCE;
1028 		ionic_intr_credits(cq->idev->intr_ctrl,
1029 				   cq->bound_intr->index,
1030 				   work_done, flags);
1031 	}
1032 
1033 	if (!work_done && cq->bound_q->lif->doorbell_wa)
1034 		ionic_rxq_poke_doorbell(&qcq->q);
1035 
1036 	return work_done;
1037 }
1038 
1039 int ionic_txrx_napi(struct napi_struct *napi, int budget)
1040 {
1041 	struct ionic_qcq *rxqcq = napi_to_qcq(napi);
1042 	struct ionic_cq *rxcq = napi_to_cq(napi);
1043 	unsigned int qi = rxcq->bound_q->index;
1044 	struct ionic_qcq *txqcq;
1045 	struct ionic_lif *lif;
1046 	struct ionic_cq *txcq;
1047 	u32 rx_work_done = 0;
1048 	u32 tx_work_done = 0;
1049 	u32 flags = 0;
1050 
1051 	lif = rxcq->bound_q->lif;
1052 	txqcq = lif->txqcqs[qi];
1053 	txcq = &lif->txqcqs[qi]->cq;
1054 
1055 	tx_work_done = ionic_tx_cq_service(txcq, IONIC_TX_BUDGET_DEFAULT, !!budget);
1056 
1057 	if (unlikely(!budget))
1058 		return budget;
1059 
1060 	rx_work_done = ionic_rx_cq_service(rxcq, budget);
1061 
1062 	if (rx_work_done < budget && napi_complete_done(napi, rx_work_done)) {
1063 		ionic_dim_update(rxqcq, 0);
1064 		flags |= IONIC_INTR_CRED_UNMASK;
1065 		rxcq->bound_intr->rearm_count++;
1066 	}
1067 
1068 	if (rx_work_done || flags) {
1069 		flags |= IONIC_INTR_CRED_RESET_COALESCE;
1070 		ionic_intr_credits(rxcq->idev->intr_ctrl, rxcq->bound_intr->index,
1071 				   tx_work_done + rx_work_done, flags);
1072 	}
1073 
1074 	if (lif->doorbell_wa) {
1075 		if (!rx_work_done)
1076 			ionic_rxq_poke_doorbell(&rxqcq->q);
1077 		if (!tx_work_done)
1078 			ionic_txq_poke_doorbell(&txqcq->q);
1079 	}
1080 
1081 	return rx_work_done;
1082 }
1083 
1084 static dma_addr_t ionic_tx_map_single(struct ionic_queue *q,
1085 				      void *data, size_t len)
1086 {
1087 	struct device *dev = q->dev;
1088 	dma_addr_t dma_addr;
1089 
1090 	dma_addr = dma_map_single(dev, data, len, DMA_TO_DEVICE);
1091 	if (unlikely(dma_mapping_error(dev, dma_addr))) {
1092 		net_warn_ratelimited("%s: DMA single map failed on %s!\n",
1093 				     dev_name(dev), q->name);
1094 		q_to_tx_stats(q)->dma_map_err++;
1095 		return DMA_MAPPING_ERROR;
1096 	}
1097 	return dma_addr;
1098 }
1099 
1100 static dma_addr_t ionic_tx_map_frag(struct ionic_queue *q,
1101 				    const skb_frag_t *frag,
1102 				    size_t offset, size_t len)
1103 {
1104 	struct device *dev = q->dev;
1105 	dma_addr_t dma_addr;
1106 
1107 	dma_addr = skb_frag_dma_map(dev, frag, offset, len, DMA_TO_DEVICE);
1108 	if (unlikely(dma_mapping_error(dev, dma_addr))) {
1109 		net_warn_ratelimited("%s: DMA frag map failed on %s!\n",
1110 				     dev_name(dev), q->name);
1111 		q_to_tx_stats(q)->dma_map_err++;
1112 		return DMA_MAPPING_ERROR;
1113 	}
1114 	return dma_addr;
1115 }
1116 
1117 static int ionic_tx_map_skb(struct ionic_queue *q, struct sk_buff *skb,
1118 			    struct ionic_tx_desc_info *desc_info)
1119 {
1120 	struct ionic_buf_info *buf_info = desc_info->bufs;
1121 	struct device *dev = q->dev;
1122 	dma_addr_t dma_addr;
1123 	unsigned int nfrags;
1124 	skb_frag_t *frag;
1125 	int frag_idx;
1126 
1127 	dma_addr = ionic_tx_map_single(q, skb->data, skb_headlen(skb));
1128 	if (dma_addr == DMA_MAPPING_ERROR)
1129 		return -EIO;
1130 	buf_info->dma_addr = dma_addr;
1131 	buf_info->len = skb_headlen(skb);
1132 	buf_info++;
1133 
1134 	frag = skb_shinfo(skb)->frags;
1135 	nfrags = skb_shinfo(skb)->nr_frags;
1136 	for (frag_idx = 0; frag_idx < nfrags; frag_idx++, frag++) {
1137 		dma_addr = ionic_tx_map_frag(q, frag, 0, skb_frag_size(frag));
1138 		if (dma_addr == DMA_MAPPING_ERROR)
1139 			goto dma_fail;
1140 		buf_info->dma_addr = dma_addr;
1141 		buf_info->len = skb_frag_size(frag);
1142 		buf_info++;
1143 	}
1144 
1145 	desc_info->nbufs = 1 + nfrags;
1146 
1147 	return 0;
1148 
1149 dma_fail:
1150 	/* unwind the frag mappings and the head mapping */
1151 	while (frag_idx > 0) {
1152 		frag_idx--;
1153 		buf_info--;
1154 		dma_unmap_page(dev, buf_info->dma_addr,
1155 			       buf_info->len, DMA_TO_DEVICE);
1156 	}
1157 	dma_unmap_single(dev, desc_info->bufs[0].dma_addr,
1158 			 desc_info->bufs[0].len, DMA_TO_DEVICE);
1159 	return -EIO;
1160 }
1161 
1162 static void ionic_tx_desc_unmap_bufs(struct ionic_queue *q,
1163 				     struct ionic_tx_desc_info *desc_info)
1164 {
1165 	struct ionic_buf_info *buf_info = desc_info->bufs;
1166 	struct device *dev = q->dev;
1167 	unsigned int i;
1168 
1169 	if (!desc_info->nbufs)
1170 		return;
1171 
1172 	dma_unmap_single(dev, buf_info->dma_addr,
1173 			 buf_info->len, DMA_TO_DEVICE);
1174 	buf_info++;
1175 	for (i = 1; i < desc_info->nbufs; i++, buf_info++)
1176 		dma_unmap_page(dev, buf_info->dma_addr,
1177 			       buf_info->len, DMA_TO_DEVICE);
1178 
1179 	desc_info->nbufs = 0;
1180 }
1181 
1182 static void ionic_tx_clean(struct ionic_queue *q,
1183 			   struct ionic_tx_desc_info *desc_info,
1184 			   struct ionic_txq_comp *comp,
1185 			   bool in_napi)
1186 {
1187 	struct ionic_tx_stats *stats = q_to_tx_stats(q);
1188 	struct ionic_qcq *qcq = q_to_qcq(q);
1189 	struct sk_buff *skb;
1190 
1191 	if (desc_info->xdpf) {
1192 		ionic_xdp_tx_desc_clean(q->partner, desc_info, in_napi);
1193 		stats->clean++;
1194 
1195 		if (unlikely(__netif_subqueue_stopped(q->lif->netdev, q->index)))
1196 			netif_wake_subqueue(q->lif->netdev, q->index);
1197 
1198 		return;
1199 	}
1200 
1201 	ionic_tx_desc_unmap_bufs(q, desc_info);
1202 
1203 	skb = desc_info->skb;
1204 	if (!skb)
1205 		return;
1206 
1207 	if (unlikely(ionic_txq_hwstamp_enabled(q))) {
1208 		if (comp) {
1209 			struct skb_shared_hwtstamps hwts = {};
1210 			__le64 *cq_desc_hwstamp;
1211 			u64 hwstamp;
1212 
1213 			cq_desc_hwstamp =
1214 				(void *)comp +
1215 				qcq->cq.desc_size -
1216 				sizeof(struct ionic_txq_comp) -
1217 				IONIC_HWSTAMP_CQ_NEGOFFSET;
1218 
1219 			hwstamp = le64_to_cpu(*cq_desc_hwstamp);
1220 
1221 			if (hwstamp != IONIC_HWSTAMP_INVALID) {
1222 				hwts.hwtstamp = ionic_lif_phc_ktime(q->lif, hwstamp);
1223 
1224 				skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS;
1225 				skb_tstamp_tx(skb, &hwts);
1226 
1227 				stats->hwstamp_valid++;
1228 			} else {
1229 				stats->hwstamp_invalid++;
1230 			}
1231 		}
1232 	}
1233 
1234 	desc_info->bytes = skb->len;
1235 	stats->clean++;
1236 
1237 	napi_consume_skb(skb, likely(in_napi) ? 1 : 0);
1238 }
1239 
1240 static bool ionic_tx_service(struct ionic_cq *cq,
1241 			     unsigned int *total_pkts,
1242 			     unsigned int *total_bytes,
1243 			     bool in_napi)
1244 {
1245 	struct ionic_tx_desc_info *desc_info;
1246 	struct ionic_queue *q = cq->bound_q;
1247 	struct ionic_txq_comp *comp;
1248 	unsigned int bytes = 0;
1249 	unsigned int pkts = 0;
1250 	u16 index;
1251 
1252 	comp = &((struct ionic_txq_comp *)cq->base)[cq->tail_idx];
1253 
1254 	if (!color_match(comp->color, cq->done_color))
1255 		return false;
1256 
1257 	/* clean the related q entries, there could be
1258 	 * several q entries completed for each cq completion
1259 	 */
1260 	do {
1261 		desc_info = &q->tx_info[q->tail_idx];
1262 		desc_info->bytes = 0;
1263 		index = q->tail_idx;
1264 		q->tail_idx = (q->tail_idx + 1) & (q->num_descs - 1);
1265 		ionic_tx_clean(q, desc_info, comp, in_napi);
1266 		if (desc_info->skb) {
1267 			pkts++;
1268 			bytes += desc_info->bytes;
1269 			desc_info->skb = NULL;
1270 		}
1271 	} while (index != le16_to_cpu(comp->comp_index));
1272 
1273 	(*total_pkts) += pkts;
1274 	(*total_bytes) += bytes;
1275 
1276 	return true;
1277 }
1278 
1279 unsigned int ionic_tx_cq_service(struct ionic_cq *cq,
1280 				 unsigned int work_to_do,
1281 				 bool in_napi)
1282 {
1283 	unsigned int work_done = 0;
1284 	unsigned int bytes = 0;
1285 	unsigned int pkts = 0;
1286 
1287 	if (work_to_do == 0)
1288 		return 0;
1289 
1290 	while (ionic_tx_service(cq, &pkts, &bytes, in_napi)) {
1291 		if (cq->tail_idx == cq->num_descs - 1)
1292 			cq->done_color = !cq->done_color;
1293 		cq->tail_idx = (cq->tail_idx + 1) & (cq->num_descs - 1);
1294 
1295 		if (++work_done >= work_to_do)
1296 			break;
1297 	}
1298 
1299 	if (work_done) {
1300 		struct ionic_queue *q = cq->bound_q;
1301 
1302 		if (likely(!ionic_txq_hwstamp_enabled(q)))
1303 			netif_txq_completed_wake(q_to_ndq(q->lif->netdev, q),
1304 						 pkts, bytes,
1305 						 ionic_q_space_avail(q),
1306 						 IONIC_TSO_DESCS_NEEDED);
1307 	}
1308 
1309 	return work_done;
1310 }
1311 
1312 void ionic_tx_flush(struct ionic_cq *cq)
1313 {
1314 	u32 work_done;
1315 
1316 	work_done = ionic_tx_cq_service(cq, cq->num_descs, false);
1317 	if (work_done)
1318 		ionic_intr_credits(cq->idev->intr_ctrl, cq->bound_intr->index,
1319 				   work_done, IONIC_INTR_CRED_RESET_COALESCE);
1320 }
1321 
1322 void ionic_tx_empty(struct ionic_queue *q)
1323 {
1324 	struct ionic_tx_desc_info *desc_info;
1325 	int bytes = 0;
1326 	int pkts = 0;
1327 
1328 	/* walk the not completed tx entries, if any */
1329 	while (q->head_idx != q->tail_idx) {
1330 		desc_info = &q->tx_info[q->tail_idx];
1331 		desc_info->bytes = 0;
1332 		q->tail_idx = (q->tail_idx + 1) & (q->num_descs - 1);
1333 		ionic_tx_clean(q, desc_info, NULL, false);
1334 		if (desc_info->skb) {
1335 			pkts++;
1336 			bytes += desc_info->bytes;
1337 			desc_info->skb = NULL;
1338 		}
1339 	}
1340 
1341 	if (likely(!ionic_txq_hwstamp_enabled(q))) {
1342 		struct netdev_queue *ndq = q_to_ndq(q->lif->netdev, q);
1343 
1344 		netdev_tx_completed_queue(ndq, pkts, bytes);
1345 		netdev_tx_reset_queue(ndq);
1346 	}
1347 }
1348 
1349 static int ionic_tx_tcp_inner_pseudo_csum(struct sk_buff *skb)
1350 {
1351 	int err;
1352 
1353 	err = skb_cow_head(skb, 0);
1354 	if (unlikely(err))
1355 		return err;
1356 
1357 	if (skb->protocol == cpu_to_be16(ETH_P_IP)) {
1358 		inner_ip_hdr(skb)->check = 0;
1359 		inner_tcp_hdr(skb)->check =
1360 			~csum_tcpudp_magic(inner_ip_hdr(skb)->saddr,
1361 					   inner_ip_hdr(skb)->daddr,
1362 					   0, IPPROTO_TCP, 0);
1363 	} else if (skb->protocol == cpu_to_be16(ETH_P_IPV6)) {
1364 		inner_tcp_hdr(skb)->check =
1365 			~csum_ipv6_magic(&inner_ipv6_hdr(skb)->saddr,
1366 					 &inner_ipv6_hdr(skb)->daddr,
1367 					 0, IPPROTO_TCP, 0);
1368 	}
1369 
1370 	return 0;
1371 }
1372 
1373 static int ionic_tx_tcp_pseudo_csum(struct sk_buff *skb)
1374 {
1375 	int err;
1376 
1377 	err = skb_cow_head(skb, 0);
1378 	if (unlikely(err))
1379 		return err;
1380 
1381 	if (skb->protocol == cpu_to_be16(ETH_P_IP)) {
1382 		ip_hdr(skb)->check = 0;
1383 		tcp_hdr(skb)->check =
1384 			~csum_tcpudp_magic(ip_hdr(skb)->saddr,
1385 					   ip_hdr(skb)->daddr,
1386 					   0, IPPROTO_TCP, 0);
1387 	} else if (skb->protocol == cpu_to_be16(ETH_P_IPV6)) {
1388 		tcp_v6_gso_csum_prep(skb);
1389 	}
1390 
1391 	return 0;
1392 }
1393 
1394 static void ionic_tx_tso_post(struct net_device *netdev, struct ionic_queue *q,
1395 			      struct ionic_txq_desc *desc,
1396 			      struct sk_buff *skb,
1397 			      dma_addr_t addr, u8 nsge, u16 len,
1398 			      unsigned int hdrlen, unsigned int mss,
1399 			      bool outer_csum,
1400 			      u16 vlan_tci, bool has_vlan,
1401 			      bool start, bool done)
1402 {
1403 	u8 flags = 0;
1404 	u64 cmd;
1405 
1406 	flags |= has_vlan ? IONIC_TXQ_DESC_FLAG_VLAN : 0;
1407 	flags |= outer_csum ? IONIC_TXQ_DESC_FLAG_ENCAP : 0;
1408 	flags |= start ? IONIC_TXQ_DESC_FLAG_TSO_SOT : 0;
1409 	flags |= done ? IONIC_TXQ_DESC_FLAG_TSO_EOT : 0;
1410 
1411 	cmd = encode_txq_desc_cmd(IONIC_TXQ_DESC_OPCODE_TSO, flags, nsge, addr);
1412 	desc->cmd = cpu_to_le64(cmd);
1413 	desc->len = cpu_to_le16(len);
1414 	desc->vlan_tci = cpu_to_le16(vlan_tci);
1415 	desc->hdr_len = cpu_to_le16(hdrlen);
1416 	desc->mss = cpu_to_le16(mss);
1417 
1418 	ionic_write_cmb_desc(q, desc);
1419 
1420 	if (start) {
1421 		skb_tx_timestamp(skb);
1422 		if (likely(!ionic_txq_hwstamp_enabled(q)))
1423 			netdev_tx_sent_queue(q_to_ndq(netdev, q), skb->len);
1424 		ionic_txq_post(q, false);
1425 	} else {
1426 		ionic_txq_post(q, done);
1427 	}
1428 }
1429 
1430 static int ionic_tx_tso(struct net_device *netdev, struct ionic_queue *q,
1431 			struct sk_buff *skb)
1432 {
1433 	struct ionic_tx_stats *stats = q_to_tx_stats(q);
1434 	struct ionic_tx_desc_info *desc_info;
1435 	struct ionic_buf_info *buf_info;
1436 	struct ionic_txq_sg_elem *elem;
1437 	struct ionic_txq_desc *desc;
1438 	unsigned int chunk_len;
1439 	unsigned int frag_rem;
1440 	unsigned int tso_rem;
1441 	unsigned int seg_rem;
1442 	dma_addr_t desc_addr;
1443 	dma_addr_t frag_addr;
1444 	unsigned int hdrlen;
1445 	unsigned int len;
1446 	unsigned int mss;
1447 	bool start, done;
1448 	bool outer_csum;
1449 	bool has_vlan;
1450 	u16 desc_len;
1451 	u8 desc_nsge;
1452 	u16 vlan_tci;
1453 	bool encap;
1454 	int err;
1455 
1456 	has_vlan = !!skb_vlan_tag_present(skb);
1457 	vlan_tci = skb_vlan_tag_get(skb);
1458 	encap = skb->encapsulation;
1459 
1460 	/* Preload inner-most TCP csum field with IP pseudo hdr
1461 	 * calculated with IP length set to zero.  HW will later
1462 	 * add in length to each TCP segment resulting from the TSO.
1463 	 */
1464 
1465 	if (encap)
1466 		err = ionic_tx_tcp_inner_pseudo_csum(skb);
1467 	else
1468 		err = ionic_tx_tcp_pseudo_csum(skb);
1469 	if (unlikely(err))
1470 		return err;
1471 
1472 	desc_info = &q->tx_info[q->head_idx];
1473 	if (unlikely(ionic_tx_map_skb(q, skb, desc_info)))
1474 		return -EIO;
1475 
1476 	len = skb->len;
1477 	mss = skb_shinfo(skb)->gso_size;
1478 	outer_csum = (skb_shinfo(skb)->gso_type & (SKB_GSO_GRE |
1479 						   SKB_GSO_GRE_CSUM |
1480 						   SKB_GSO_IPXIP4 |
1481 						   SKB_GSO_IPXIP6 |
1482 						   SKB_GSO_UDP_TUNNEL |
1483 						   SKB_GSO_UDP_TUNNEL_CSUM));
1484 	if (encap)
1485 		hdrlen = skb_inner_tcp_all_headers(skb);
1486 	else
1487 		hdrlen = skb_tcp_all_headers(skb);
1488 
1489 	desc_info->skb = skb;
1490 	buf_info = desc_info->bufs;
1491 	tso_rem = len;
1492 	seg_rem = min(tso_rem, hdrlen + mss);
1493 
1494 	frag_addr = 0;
1495 	frag_rem = 0;
1496 
1497 	start = true;
1498 
1499 	while (tso_rem > 0) {
1500 		desc = NULL;
1501 		elem = NULL;
1502 		desc_addr = 0;
1503 		desc_len = 0;
1504 		desc_nsge = 0;
1505 		/* use fragments until we have enough to post a single descriptor */
1506 		while (seg_rem > 0) {
1507 			/* if the fragment is exhausted then move to the next one */
1508 			if (frag_rem == 0) {
1509 				/* grab the next fragment */
1510 				frag_addr = buf_info->dma_addr;
1511 				frag_rem = buf_info->len;
1512 				buf_info++;
1513 			}
1514 			chunk_len = min(frag_rem, seg_rem);
1515 			if (!desc) {
1516 				/* fill main descriptor */
1517 				desc = &q->txq[q->head_idx];
1518 				elem = ionic_tx_sg_elems(q);
1519 				desc_addr = frag_addr;
1520 				desc_len = chunk_len;
1521 			} else {
1522 				/* fill sg descriptor */
1523 				elem->addr = cpu_to_le64(frag_addr);
1524 				elem->len = cpu_to_le16(chunk_len);
1525 				elem++;
1526 				desc_nsge++;
1527 			}
1528 			frag_addr += chunk_len;
1529 			frag_rem -= chunk_len;
1530 			tso_rem -= chunk_len;
1531 			seg_rem -= chunk_len;
1532 		}
1533 		seg_rem = min(tso_rem, mss);
1534 		done = (tso_rem == 0);
1535 		/* post descriptor */
1536 		ionic_tx_tso_post(netdev, q, desc, skb, desc_addr, desc_nsge,
1537 				  desc_len, hdrlen, mss, outer_csum, vlan_tci,
1538 				  has_vlan, start, done);
1539 		start = false;
1540 		/* Buffer information is stored with the first tso descriptor */
1541 		desc_info = &q->tx_info[q->head_idx];
1542 		desc_info->nbufs = 0;
1543 	}
1544 
1545 	stats->pkts += DIV_ROUND_UP(len - hdrlen, mss);
1546 	stats->bytes += len;
1547 	stats->tso++;
1548 	stats->tso_bytes = len;
1549 
1550 	return 0;
1551 }
1552 
1553 static void ionic_tx_calc_csum(struct ionic_queue *q, struct sk_buff *skb,
1554 			       struct ionic_tx_desc_info *desc_info)
1555 {
1556 	struct ionic_txq_desc *desc = &q->txq[q->head_idx];
1557 	struct ionic_buf_info *buf_info = desc_info->bufs;
1558 	struct ionic_tx_stats *stats = q_to_tx_stats(q);
1559 	bool has_vlan;
1560 	u8 flags = 0;
1561 	bool encap;
1562 	u64 cmd;
1563 
1564 	has_vlan = !!skb_vlan_tag_present(skb);
1565 	encap = skb->encapsulation;
1566 
1567 	flags |= has_vlan ? IONIC_TXQ_DESC_FLAG_VLAN : 0;
1568 	flags |= encap ? IONIC_TXQ_DESC_FLAG_ENCAP : 0;
1569 
1570 	cmd = encode_txq_desc_cmd(IONIC_TXQ_DESC_OPCODE_CSUM_PARTIAL,
1571 				  flags, skb_shinfo(skb)->nr_frags,
1572 				  buf_info->dma_addr);
1573 	desc->cmd = cpu_to_le64(cmd);
1574 	desc->len = cpu_to_le16(buf_info->len);
1575 	if (has_vlan) {
1576 		desc->vlan_tci = cpu_to_le16(skb_vlan_tag_get(skb));
1577 		stats->vlan_inserted++;
1578 	} else {
1579 		desc->vlan_tci = 0;
1580 	}
1581 	desc->csum_start = cpu_to_le16(skb_checksum_start_offset(skb));
1582 	desc->csum_offset = cpu_to_le16(skb->csum_offset);
1583 
1584 	ionic_write_cmb_desc(q, desc);
1585 
1586 	if (skb_csum_is_sctp(skb))
1587 		stats->crc32_csum++;
1588 	else
1589 		stats->csum++;
1590 }
1591 
1592 static void ionic_tx_calc_no_csum(struct ionic_queue *q, struct sk_buff *skb,
1593 				  struct ionic_tx_desc_info *desc_info)
1594 {
1595 	struct ionic_txq_desc *desc = &q->txq[q->head_idx];
1596 	struct ionic_buf_info *buf_info = desc_info->bufs;
1597 	struct ionic_tx_stats *stats = q_to_tx_stats(q);
1598 	bool has_vlan;
1599 	u8 flags = 0;
1600 	bool encap;
1601 	u64 cmd;
1602 
1603 	has_vlan = !!skb_vlan_tag_present(skb);
1604 	encap = skb->encapsulation;
1605 
1606 	flags |= has_vlan ? IONIC_TXQ_DESC_FLAG_VLAN : 0;
1607 	flags |= encap ? IONIC_TXQ_DESC_FLAG_ENCAP : 0;
1608 
1609 	cmd = encode_txq_desc_cmd(IONIC_TXQ_DESC_OPCODE_CSUM_NONE,
1610 				  flags, skb_shinfo(skb)->nr_frags,
1611 				  buf_info->dma_addr);
1612 	desc->cmd = cpu_to_le64(cmd);
1613 	desc->len = cpu_to_le16(buf_info->len);
1614 	if (has_vlan) {
1615 		desc->vlan_tci = cpu_to_le16(skb_vlan_tag_get(skb));
1616 		stats->vlan_inserted++;
1617 	} else {
1618 		desc->vlan_tci = 0;
1619 	}
1620 	desc->csum_start = 0;
1621 	desc->csum_offset = 0;
1622 
1623 	ionic_write_cmb_desc(q, desc);
1624 
1625 	stats->csum_none++;
1626 }
1627 
1628 static void ionic_tx_skb_frags(struct ionic_queue *q, struct sk_buff *skb,
1629 			       struct ionic_tx_desc_info *desc_info)
1630 {
1631 	struct ionic_buf_info *buf_info = &desc_info->bufs[1];
1632 	struct ionic_tx_stats *stats = q_to_tx_stats(q);
1633 	struct ionic_txq_sg_elem *elem;
1634 	unsigned int i;
1635 
1636 	elem = ionic_tx_sg_elems(q);
1637 	for (i = 0; i < skb_shinfo(skb)->nr_frags; i++, buf_info++, elem++) {
1638 		elem->addr = cpu_to_le64(buf_info->dma_addr);
1639 		elem->len = cpu_to_le16(buf_info->len);
1640 	}
1641 
1642 	stats->frags += skb_shinfo(skb)->nr_frags;
1643 }
1644 
1645 static int ionic_tx(struct net_device *netdev, struct ionic_queue *q,
1646 		    struct sk_buff *skb)
1647 {
1648 	struct ionic_tx_desc_info *desc_info = &q->tx_info[q->head_idx];
1649 	struct ionic_tx_stats *stats = q_to_tx_stats(q);
1650 	bool ring_dbell = true;
1651 
1652 	if (unlikely(ionic_tx_map_skb(q, skb, desc_info)))
1653 		return -EIO;
1654 
1655 	desc_info->skb = skb;
1656 
1657 	/* set up the initial descriptor */
1658 	if (skb->ip_summed == CHECKSUM_PARTIAL)
1659 		ionic_tx_calc_csum(q, skb, desc_info);
1660 	else
1661 		ionic_tx_calc_no_csum(q, skb, desc_info);
1662 
1663 	/* add frags */
1664 	ionic_tx_skb_frags(q, skb, desc_info);
1665 
1666 	skb_tx_timestamp(skb);
1667 	stats->pkts++;
1668 	stats->bytes += skb->len;
1669 
1670 	if (likely(!ionic_txq_hwstamp_enabled(q))) {
1671 		struct netdev_queue *ndq = q_to_ndq(netdev, q);
1672 
1673 		if (unlikely(!ionic_q_has_space(q, MAX_SKB_FRAGS + 1)))
1674 			netif_tx_stop_queue(ndq);
1675 		ring_dbell = __netdev_tx_sent_queue(ndq, skb->len,
1676 						    netdev_xmit_more());
1677 	}
1678 	ionic_txq_post(q, ring_dbell);
1679 
1680 	return 0;
1681 }
1682 
1683 static int ionic_tx_descs_needed(struct ionic_queue *q, struct sk_buff *skb)
1684 {
1685 	int nr_frags = skb_shinfo(skb)->nr_frags;
1686 	bool too_many_frags = false;
1687 	skb_frag_t *frag;
1688 	int desc_bufs;
1689 	int chunk_len;
1690 	int frag_rem;
1691 	int tso_rem;
1692 	int seg_rem;
1693 	bool encap;
1694 	int hdrlen;
1695 	int ndescs;
1696 	int err;
1697 
1698 	/* Each desc is mss long max, so a descriptor for each gso_seg */
1699 	if (skb_is_gso(skb)) {
1700 		ndescs = skb_shinfo(skb)->gso_segs;
1701 		if (!nr_frags)
1702 			return ndescs;
1703 	} else {
1704 		ndescs = 1;
1705 		if (!nr_frags)
1706 			return ndescs;
1707 
1708 		if (unlikely(nr_frags > q->max_sg_elems)) {
1709 			too_many_frags = true;
1710 			goto linearize;
1711 		}
1712 
1713 		return ndescs;
1714 	}
1715 
1716 	/* We need to scan the skb to be sure that none of the MTU sized
1717 	 * packets in the TSO will require more sgs per descriptor than we
1718 	 * can support.  We loop through the frags, add up the lengths for
1719 	 * a packet, and count the number of sgs used per packet.
1720 	 */
1721 	tso_rem = skb->len;
1722 	frag = skb_shinfo(skb)->frags;
1723 	encap = skb->encapsulation;
1724 
1725 	/* start with just hdr in first part of first descriptor */
1726 	if (encap)
1727 		hdrlen = skb_inner_tcp_all_headers(skb);
1728 	else
1729 		hdrlen = skb_tcp_all_headers(skb);
1730 	seg_rem = min_t(int, tso_rem, hdrlen + skb_shinfo(skb)->gso_size);
1731 	frag_rem = hdrlen;
1732 
1733 	while (tso_rem > 0) {
1734 		desc_bufs = 0;
1735 		while (seg_rem > 0) {
1736 			desc_bufs++;
1737 
1738 			/* We add the +1 because we can take buffers for one
1739 			 * more than we have SGs: one for the initial desc data
1740 			 * in addition to the SG segments that might follow.
1741 			 */
1742 			if (desc_bufs > q->max_sg_elems + 1) {
1743 				too_many_frags = true;
1744 				goto linearize;
1745 			}
1746 
1747 			if (frag_rem == 0) {
1748 				frag_rem = skb_frag_size(frag);
1749 				frag++;
1750 			}
1751 			chunk_len = min(frag_rem, seg_rem);
1752 			frag_rem -= chunk_len;
1753 			tso_rem -= chunk_len;
1754 			seg_rem -= chunk_len;
1755 		}
1756 
1757 		seg_rem = min_t(int, tso_rem, skb_shinfo(skb)->gso_size);
1758 	}
1759 
1760 linearize:
1761 	if (too_many_frags) {
1762 		err = skb_linearize(skb);
1763 		if (unlikely(err))
1764 			return err;
1765 		q_to_tx_stats(q)->linearize++;
1766 	}
1767 
1768 	return ndescs;
1769 }
1770 
1771 static netdev_tx_t ionic_start_hwstamp_xmit(struct sk_buff *skb,
1772 					    struct net_device *netdev)
1773 {
1774 	struct ionic_lif *lif = netdev_priv(netdev);
1775 	struct ionic_queue *q;
1776 	int err, ndescs;
1777 
1778 	/* Does not stop/start txq, because we post to a separate tx queue
1779 	 * for timestamping, and if a packet can't be posted immediately to
1780 	 * the timestamping queue, it is dropped.
1781 	 */
1782 
1783 	q = &lif->hwstamp_txq->q;
1784 	ndescs = ionic_tx_descs_needed(q, skb);
1785 	if (unlikely(ndescs < 0))
1786 		goto err_out_drop;
1787 
1788 	if (unlikely(!ionic_q_has_space(q, ndescs)))
1789 		goto err_out_drop;
1790 
1791 	skb_shinfo(skb)->tx_flags |= SKBTX_HW_TSTAMP;
1792 	if (skb_is_gso(skb))
1793 		err = ionic_tx_tso(netdev, q, skb);
1794 	else
1795 		err = ionic_tx(netdev, q, skb);
1796 
1797 	if (unlikely(err))
1798 		goto err_out_drop;
1799 
1800 	return NETDEV_TX_OK;
1801 
1802 err_out_drop:
1803 	q->drop++;
1804 	dev_kfree_skb(skb);
1805 	return NETDEV_TX_OK;
1806 }
1807 
1808 netdev_tx_t ionic_start_xmit(struct sk_buff *skb, struct net_device *netdev)
1809 {
1810 	u16 queue_index = skb_get_queue_mapping(skb);
1811 	struct ionic_lif *lif = netdev_priv(netdev);
1812 	struct ionic_queue *q;
1813 	int ndescs;
1814 	int err;
1815 
1816 	if (unlikely(!test_bit(IONIC_LIF_F_UP, lif->state))) {
1817 		dev_kfree_skb(skb);
1818 		return NETDEV_TX_OK;
1819 	}
1820 
1821 	if (unlikely(skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP))
1822 		if (lif->hwstamp_txq && lif->phc->ts_config_tx_mode)
1823 			return ionic_start_hwstamp_xmit(skb, netdev);
1824 
1825 	if (unlikely(queue_index >= lif->nxqs))
1826 		queue_index = 0;
1827 	q = &lif->txqcqs[queue_index]->q;
1828 
1829 	ndescs = ionic_tx_descs_needed(q, skb);
1830 	if (ndescs < 0)
1831 		goto err_out_drop;
1832 
1833 	if (!netif_txq_maybe_stop(q_to_ndq(netdev, q),
1834 				  ionic_q_space_avail(q),
1835 				  ndescs, ndescs))
1836 		return NETDEV_TX_BUSY;
1837 
1838 	if (skb_is_gso(skb))
1839 		err = ionic_tx_tso(netdev, q, skb);
1840 	else
1841 		err = ionic_tx(netdev, q, skb);
1842 
1843 	if (unlikely(err))
1844 		goto err_out_drop;
1845 
1846 	return NETDEV_TX_OK;
1847 
1848 err_out_drop:
1849 	q->drop++;
1850 	dev_kfree_skb(skb);
1851 	return NETDEV_TX_OK;
1852 }
1853