1 // SPDX-License-Identifier: (GPL-2.0 OR MIT)
2 /* Google virtual Ethernet (gve) driver
3  *
4  * Copyright (C) 2015-2021 Google, Inc.
5  */
6 
7 #include "gve.h"
8 #include "gve_adminq.h"
9 #include "gve_utils.h"
10 #include <linux/ip.h>
11 #include <linux/tcp.h>
12 #include <linux/vmalloc.h>
13 #include <linux/skbuff.h>
14 
15 static inline void gve_tx_put_doorbell(struct gve_priv *priv,
16 				       struct gve_queue_resources *q_resources,
17 				       u32 val)
18 {
19 	iowrite32be(val, &priv->db_bar2[be32_to_cpu(q_resources->db_index)]);
20 }
21 
22 /* gvnic can only transmit from a Registered Segment.
23  * We copy skb payloads into the registered segment before writing Tx
24  * descriptors and ringing the Tx doorbell.
25  *
26  * gve_tx_fifo_* manages the Registered Segment as a FIFO - clients must
27  * free allocations in the order they were allocated.
28  */
29 
30 static int gve_tx_fifo_init(struct gve_priv *priv, struct gve_tx_fifo *fifo)
31 {
32 	fifo->base = vmap(fifo->qpl->pages, fifo->qpl->num_entries, VM_MAP,
33 			  PAGE_KERNEL);
34 	if (unlikely(!fifo->base)) {
35 		netif_err(priv, drv, priv->dev, "Failed to vmap fifo, qpl_id = %d\n",
36 			  fifo->qpl->id);
37 		return -ENOMEM;
38 	}
39 
40 	fifo->size = fifo->qpl->num_entries * PAGE_SIZE;
41 	atomic_set(&fifo->available, fifo->size);
42 	fifo->head = 0;
43 	return 0;
44 }
45 
46 static void gve_tx_fifo_release(struct gve_priv *priv, struct gve_tx_fifo *fifo)
47 {
48 	WARN(atomic_read(&fifo->available) != fifo->size,
49 	     "Releasing non-empty fifo");
50 
51 	vunmap(fifo->base);
52 }
53 
54 static int gve_tx_fifo_pad_alloc_one_frag(struct gve_tx_fifo *fifo,
55 					  size_t bytes)
56 {
57 	return (fifo->head + bytes < fifo->size) ? 0 : fifo->size - fifo->head;
58 }
59 
60 static bool gve_tx_fifo_can_alloc(struct gve_tx_fifo *fifo, size_t bytes)
61 {
62 	return (atomic_read(&fifo->available) <= bytes) ? false : true;
63 }
64 
65 /* gve_tx_alloc_fifo - Allocate fragment(s) from Tx FIFO
66  * @fifo: FIFO to allocate from
67  * @bytes: Allocation size
68  * @iov: Scatter-gather elements to fill with allocation fragment base/len
69  *
70  * Returns number of valid elements in iov[] or negative on error.
71  *
72  * Allocations from a given FIFO must be externally synchronized but concurrent
73  * allocation and frees are allowed.
74  */
75 static int gve_tx_alloc_fifo(struct gve_tx_fifo *fifo, size_t bytes,
76 			     struct gve_tx_iovec iov[2])
77 {
78 	size_t overflow, padding;
79 	u32 aligned_head;
80 	int nfrags = 0;
81 
82 	if (!bytes)
83 		return 0;
84 
85 	/* This check happens before we know how much padding is needed to
86 	 * align to a cacheline boundary for the payload, but that is fine,
87 	 * because the FIFO head always start aligned, and the FIFO's boundaries
88 	 * are aligned, so if there is space for the data, there is space for
89 	 * the padding to the next alignment.
90 	 */
91 	WARN(!gve_tx_fifo_can_alloc(fifo, bytes),
92 	     "Reached %s when there's not enough space in the fifo", __func__);
93 
94 	nfrags++;
95 
96 	iov[0].iov_offset = fifo->head;
97 	iov[0].iov_len = bytes;
98 	fifo->head += bytes;
99 
100 	if (fifo->head > fifo->size) {
101 		/* If the allocation did not fit in the tail fragment of the
102 		 * FIFO, also use the head fragment.
103 		 */
104 		nfrags++;
105 		overflow = fifo->head - fifo->size;
106 		iov[0].iov_len -= overflow;
107 		iov[1].iov_offset = 0;	/* Start of fifo*/
108 		iov[1].iov_len = overflow;
109 
110 		fifo->head = overflow;
111 	}
112 
113 	/* Re-align to a cacheline boundary */
114 	aligned_head = L1_CACHE_ALIGN(fifo->head);
115 	padding = aligned_head - fifo->head;
116 	iov[nfrags - 1].iov_padding = padding;
117 	atomic_sub(bytes + padding, &fifo->available);
118 	fifo->head = aligned_head;
119 
120 	if (fifo->head == fifo->size)
121 		fifo->head = 0;
122 
123 	return nfrags;
124 }
125 
126 /* gve_tx_free_fifo - Return space to Tx FIFO
127  * @fifo: FIFO to return fragments to
128  * @bytes: Bytes to free
129  */
130 static void gve_tx_free_fifo(struct gve_tx_fifo *fifo, size_t bytes)
131 {
132 	atomic_add(bytes, &fifo->available);
133 }
134 
135 static int gve_clean_tx_done(struct gve_priv *priv, struct gve_tx_ring *tx,
136 			     u32 to_do, bool try_to_wake);
137 
138 static void gve_tx_free_ring(struct gve_priv *priv, int idx)
139 {
140 	struct gve_tx_ring *tx = &priv->tx[idx];
141 	struct device *hdev = &priv->pdev->dev;
142 	size_t bytes;
143 	u32 slots;
144 
145 	gve_tx_remove_from_block(priv, idx);
146 	slots = tx->mask + 1;
147 	gve_clean_tx_done(priv, tx, tx->req, false);
148 	netdev_tx_reset_queue(tx->netdev_txq);
149 
150 	dma_free_coherent(hdev, sizeof(*tx->q_resources),
151 			  tx->q_resources, tx->q_resources_bus);
152 	tx->q_resources = NULL;
153 
154 	if (!tx->raw_addressing) {
155 		gve_tx_fifo_release(priv, &tx->tx_fifo);
156 		gve_unassign_qpl(priv, tx->tx_fifo.qpl->id);
157 		tx->tx_fifo.qpl = NULL;
158 	}
159 
160 	bytes = sizeof(*tx->desc) * slots;
161 	dma_free_coherent(hdev, bytes, tx->desc, tx->bus);
162 	tx->desc = NULL;
163 
164 	vfree(tx->info);
165 	tx->info = NULL;
166 
167 	netif_dbg(priv, drv, priv->dev, "freed tx queue %d\n", idx);
168 }
169 
170 static int gve_tx_alloc_ring(struct gve_priv *priv, int idx)
171 {
172 	struct gve_tx_ring *tx = &priv->tx[idx];
173 	struct device *hdev = &priv->pdev->dev;
174 	u32 slots = priv->tx_desc_cnt;
175 	size_t bytes;
176 
177 	/* Make sure everything is zeroed to start */
178 	memset(tx, 0, sizeof(*tx));
179 	tx->q_num = idx;
180 
181 	tx->mask = slots - 1;
182 
183 	/* alloc metadata */
184 	tx->info = vzalloc(sizeof(*tx->info) * slots);
185 	if (!tx->info)
186 		return -ENOMEM;
187 
188 	/* alloc tx queue */
189 	bytes = sizeof(*tx->desc) * slots;
190 	tx->desc = dma_alloc_coherent(hdev, bytes, &tx->bus, GFP_KERNEL);
191 	if (!tx->desc)
192 		goto abort_with_info;
193 
194 	tx->raw_addressing = priv->queue_format == GVE_GQI_RDA_FORMAT;
195 	tx->dev = &priv->pdev->dev;
196 	if (!tx->raw_addressing) {
197 		tx->tx_fifo.qpl = gve_assign_tx_qpl(priv);
198 		if (!tx->tx_fifo.qpl)
199 			goto abort_with_desc;
200 		/* map Tx FIFO */
201 		if (gve_tx_fifo_init(priv, &tx->tx_fifo))
202 			goto abort_with_qpl;
203 	}
204 
205 	tx->q_resources =
206 		dma_alloc_coherent(hdev,
207 				   sizeof(*tx->q_resources),
208 				   &tx->q_resources_bus,
209 				   GFP_KERNEL);
210 	if (!tx->q_resources)
211 		goto abort_with_fifo;
212 
213 	netif_dbg(priv, drv, priv->dev, "tx[%d]->bus=%lx\n", idx,
214 		  (unsigned long)tx->bus);
215 	tx->netdev_txq = netdev_get_tx_queue(priv->dev, idx);
216 	gve_tx_add_to_block(priv, idx);
217 
218 	return 0;
219 
220 abort_with_fifo:
221 	if (!tx->raw_addressing)
222 		gve_tx_fifo_release(priv, &tx->tx_fifo);
223 abort_with_qpl:
224 	if (!tx->raw_addressing)
225 		gve_unassign_qpl(priv, tx->tx_fifo.qpl->id);
226 abort_with_desc:
227 	dma_free_coherent(hdev, bytes, tx->desc, tx->bus);
228 	tx->desc = NULL;
229 abort_with_info:
230 	vfree(tx->info);
231 	tx->info = NULL;
232 	return -ENOMEM;
233 }
234 
235 int gve_tx_alloc_rings(struct gve_priv *priv)
236 {
237 	int err = 0;
238 	int i;
239 
240 	for (i = 0; i < priv->tx_cfg.num_queues; i++) {
241 		err = gve_tx_alloc_ring(priv, i);
242 		if (err) {
243 			netif_err(priv, drv, priv->dev,
244 				  "Failed to alloc tx ring=%d: err=%d\n",
245 				  i, err);
246 			break;
247 		}
248 	}
249 	/* Unallocate if there was an error */
250 	if (err) {
251 		int j;
252 
253 		for (j = 0; j < i; j++)
254 			gve_tx_free_ring(priv, j);
255 	}
256 	return err;
257 }
258 
259 void gve_tx_free_rings_gqi(struct gve_priv *priv)
260 {
261 	int i;
262 
263 	for (i = 0; i < priv->tx_cfg.num_queues; i++)
264 		gve_tx_free_ring(priv, i);
265 }
266 
267 /* gve_tx_avail - Calculates the number of slots available in the ring
268  * @tx: tx ring to check
269  *
270  * Returns the number of slots available
271  *
272  * The capacity of the queue is mask + 1. We don't need to reserve an entry.
273  **/
274 static inline u32 gve_tx_avail(struct gve_tx_ring *tx)
275 {
276 	return tx->mask + 1 - (tx->req - tx->done);
277 }
278 
279 static inline int gve_skb_fifo_bytes_required(struct gve_tx_ring *tx,
280 					      struct sk_buff *skb)
281 {
282 	int pad_bytes, align_hdr_pad;
283 	int bytes;
284 	int hlen;
285 
286 	hlen = skb_is_gso(skb) ? skb_checksum_start_offset(skb) +
287 				 tcp_hdrlen(skb) : skb_headlen(skb);
288 
289 	pad_bytes = gve_tx_fifo_pad_alloc_one_frag(&tx->tx_fifo,
290 						   hlen);
291 	/* We need to take into account the header alignment padding. */
292 	align_hdr_pad = L1_CACHE_ALIGN(hlen) - hlen;
293 	bytes = align_hdr_pad + pad_bytes + skb->len;
294 
295 	return bytes;
296 }
297 
298 /* The most descriptors we could need is MAX_SKB_FRAGS + 3 : 1 for each skb frag,
299  * +1 for the skb linear portion, +1 for when tcp hdr needs to be in separate descriptor,
300  * and +1 if the payload wraps to the beginning of the FIFO.
301  */
302 #define MAX_TX_DESC_NEEDED	(MAX_SKB_FRAGS + 3)
303 static void gve_tx_unmap_buf(struct device *dev, struct gve_tx_buffer_state *info)
304 {
305 	if (info->skb) {
306 		dma_unmap_single(dev, dma_unmap_addr(&info->buf, dma),
307 				 dma_unmap_len(&info->buf, len),
308 				 DMA_TO_DEVICE);
309 		dma_unmap_len_set(&info->buf, len, 0);
310 	} else {
311 		dma_unmap_page(dev, dma_unmap_addr(&info->buf, dma),
312 			       dma_unmap_len(&info->buf, len),
313 			       DMA_TO_DEVICE);
314 		dma_unmap_len_set(&info->buf, len, 0);
315 	}
316 }
317 
318 /* Check if sufficient resources (descriptor ring space, FIFO space) are
319  * available to transmit the given number of bytes.
320  */
321 static inline bool gve_can_tx(struct gve_tx_ring *tx, int bytes_required)
322 {
323 	bool can_alloc = true;
324 
325 	if (!tx->raw_addressing)
326 		can_alloc = gve_tx_fifo_can_alloc(&tx->tx_fifo, bytes_required);
327 
328 	return (gve_tx_avail(tx) >= MAX_TX_DESC_NEEDED && can_alloc);
329 }
330 
331 /* Stops the queue if the skb cannot be transmitted. */
332 static int gve_maybe_stop_tx(struct gve_tx_ring *tx, struct sk_buff *skb)
333 {
334 	int bytes_required = 0;
335 
336 	if (!tx->raw_addressing)
337 		bytes_required = gve_skb_fifo_bytes_required(tx, skb);
338 
339 	if (likely(gve_can_tx(tx, bytes_required)))
340 		return 0;
341 
342 	/* No space, so stop the queue */
343 	tx->stop_queue++;
344 	netif_tx_stop_queue(tx->netdev_txq);
345 	smp_mb();	/* sync with restarting queue in gve_clean_tx_done() */
346 
347 	/* Now check for resources again, in case gve_clean_tx_done() freed
348 	 * resources after we checked and we stopped the queue after
349 	 * gve_clean_tx_done() checked.
350 	 *
351 	 * gve_maybe_stop_tx()			gve_clean_tx_done()
352 	 *   nsegs/can_alloc test failed
353 	 *					  gve_tx_free_fifo()
354 	 *					  if (tx queue stopped)
355 	 *					    netif_tx_queue_wake()
356 	 *   netif_tx_stop_queue()
357 	 *   Need to check again for space here!
358 	 */
359 	if (likely(!gve_can_tx(tx, bytes_required)))
360 		return -EBUSY;
361 
362 	netif_tx_start_queue(tx->netdev_txq);
363 	tx->wake_queue++;
364 	return 0;
365 }
366 
367 static void gve_tx_fill_pkt_desc(union gve_tx_desc *pkt_desc,
368 				 struct sk_buff *skb, bool is_gso,
369 				 int l4_hdr_offset, u32 desc_cnt,
370 				 u16 hlen, u64 addr)
371 {
372 	/* l4_hdr_offset and csum_offset are in units of 16-bit words */
373 	if (is_gso) {
374 		pkt_desc->pkt.type_flags = GVE_TXD_TSO | GVE_TXF_L4CSUM;
375 		pkt_desc->pkt.l4_csum_offset = skb->csum_offset >> 1;
376 		pkt_desc->pkt.l4_hdr_offset = l4_hdr_offset >> 1;
377 	} else if (likely(skb->ip_summed == CHECKSUM_PARTIAL)) {
378 		pkt_desc->pkt.type_flags = GVE_TXD_STD | GVE_TXF_L4CSUM;
379 		pkt_desc->pkt.l4_csum_offset = skb->csum_offset >> 1;
380 		pkt_desc->pkt.l4_hdr_offset = l4_hdr_offset >> 1;
381 	} else {
382 		pkt_desc->pkt.type_flags = GVE_TXD_STD;
383 		pkt_desc->pkt.l4_csum_offset = 0;
384 		pkt_desc->pkt.l4_hdr_offset = 0;
385 	}
386 	pkt_desc->pkt.desc_cnt = desc_cnt;
387 	pkt_desc->pkt.len = cpu_to_be16(skb->len);
388 	pkt_desc->pkt.seg_len = cpu_to_be16(hlen);
389 	pkt_desc->pkt.seg_addr = cpu_to_be64(addr);
390 }
391 
392 static void gve_tx_fill_seg_desc(union gve_tx_desc *seg_desc,
393 				 struct sk_buff *skb, bool is_gso,
394 				 u16 len, u64 addr)
395 {
396 	seg_desc->seg.type_flags = GVE_TXD_SEG;
397 	if (is_gso) {
398 		if (skb_is_gso_v6(skb))
399 			seg_desc->seg.type_flags |= GVE_TXSF_IPV6;
400 		seg_desc->seg.l3_offset = skb_network_offset(skb) >> 1;
401 		seg_desc->seg.mss = cpu_to_be16(skb_shinfo(skb)->gso_size);
402 	}
403 	seg_desc->seg.seg_len = cpu_to_be16(len);
404 	seg_desc->seg.seg_addr = cpu_to_be64(addr);
405 }
406 
407 static void gve_dma_sync_for_device(struct device *dev, dma_addr_t *page_buses,
408 				    u64 iov_offset, u64 iov_len)
409 {
410 	u64 last_page = (iov_offset + iov_len - 1) / PAGE_SIZE;
411 	u64 first_page = iov_offset / PAGE_SIZE;
412 	u64 page;
413 
414 	for (page = first_page; page <= last_page; page++)
415 		dma_sync_single_for_device(dev, page_buses[page], PAGE_SIZE, DMA_TO_DEVICE);
416 }
417 
418 static int gve_tx_add_skb_copy(struct gve_priv *priv, struct gve_tx_ring *tx, struct sk_buff *skb)
419 {
420 	int pad_bytes, hlen, hdr_nfrags, payload_nfrags, l4_hdr_offset;
421 	union gve_tx_desc *pkt_desc, *seg_desc;
422 	struct gve_tx_buffer_state *info;
423 	bool is_gso = skb_is_gso(skb);
424 	u32 idx = tx->req & tx->mask;
425 	int payload_iov = 2;
426 	int copy_offset;
427 	u32 next_idx;
428 	int i;
429 
430 	info = &tx->info[idx];
431 	pkt_desc = &tx->desc[idx];
432 
433 	l4_hdr_offset = skb_checksum_start_offset(skb);
434 	/* If the skb is gso, then we want the tcp header in the first segment
435 	 * otherwise we want the linear portion of the skb (which will contain
436 	 * the checksum because skb->csum_start and skb->csum_offset are given
437 	 * relative to skb->head) in the first segment.
438 	 */
439 	hlen = is_gso ? l4_hdr_offset + tcp_hdrlen(skb) :
440 			skb_headlen(skb);
441 
442 	info->skb =  skb;
443 	/* We don't want to split the header, so if necessary, pad to the end
444 	 * of the fifo and then put the header at the beginning of the fifo.
445 	 */
446 	pad_bytes = gve_tx_fifo_pad_alloc_one_frag(&tx->tx_fifo, hlen);
447 	hdr_nfrags = gve_tx_alloc_fifo(&tx->tx_fifo, hlen + pad_bytes,
448 				       &info->iov[0]);
449 	WARN(!hdr_nfrags, "hdr_nfrags should never be 0!");
450 	payload_nfrags = gve_tx_alloc_fifo(&tx->tx_fifo, skb->len - hlen,
451 					   &info->iov[payload_iov]);
452 
453 	gve_tx_fill_pkt_desc(pkt_desc, skb, is_gso, l4_hdr_offset,
454 			     1 + payload_nfrags, hlen,
455 			     info->iov[hdr_nfrags - 1].iov_offset);
456 
457 	skb_copy_bits(skb, 0,
458 		      tx->tx_fifo.base + info->iov[hdr_nfrags - 1].iov_offset,
459 		      hlen);
460 	gve_dma_sync_for_device(&priv->pdev->dev, tx->tx_fifo.qpl->page_buses,
461 				info->iov[hdr_nfrags - 1].iov_offset,
462 				info->iov[hdr_nfrags - 1].iov_len);
463 	copy_offset = hlen;
464 
465 	for (i = payload_iov; i < payload_nfrags + payload_iov; i++) {
466 		next_idx = (tx->req + 1 + i - payload_iov) & tx->mask;
467 		seg_desc = &tx->desc[next_idx];
468 
469 		gve_tx_fill_seg_desc(seg_desc, skb, is_gso,
470 				     info->iov[i].iov_len,
471 				     info->iov[i].iov_offset);
472 
473 		skb_copy_bits(skb, copy_offset,
474 			      tx->tx_fifo.base + info->iov[i].iov_offset,
475 			      info->iov[i].iov_len);
476 		gve_dma_sync_for_device(&priv->pdev->dev, tx->tx_fifo.qpl->page_buses,
477 					info->iov[i].iov_offset,
478 					info->iov[i].iov_len);
479 		copy_offset += info->iov[i].iov_len;
480 	}
481 
482 	return 1 + payload_nfrags;
483 }
484 
485 static int gve_tx_add_skb_no_copy(struct gve_priv *priv, struct gve_tx_ring *tx,
486 				  struct sk_buff *skb)
487 {
488 	const struct skb_shared_info *shinfo = skb_shinfo(skb);
489 	int hlen, payload_nfrags, l4_hdr_offset;
490 	union gve_tx_desc *pkt_desc, *seg_desc;
491 	struct gve_tx_buffer_state *info;
492 	bool is_gso = skb_is_gso(skb);
493 	u32 idx = tx->req & tx->mask;
494 	struct gve_tx_dma_buf *buf;
495 	u64 addr;
496 	u32 len;
497 	int i;
498 
499 	info = &tx->info[idx];
500 	pkt_desc = &tx->desc[idx];
501 
502 	l4_hdr_offset = skb_checksum_start_offset(skb);
503 	/* If the skb is gso, then we want only up to the tcp header in the first segment
504 	 * to efficiently replicate on each segment otherwise we want the linear portion
505 	 * of the skb (which will contain the checksum because skb->csum_start and
506 	 * skb->csum_offset are given relative to skb->head) in the first segment.
507 	 */
508 	hlen = is_gso ? l4_hdr_offset + tcp_hdrlen(skb) : skb_headlen(skb);
509 	len = skb_headlen(skb);
510 
511 	info->skb =  skb;
512 
513 	addr = dma_map_single(tx->dev, skb->data, len, DMA_TO_DEVICE);
514 	if (unlikely(dma_mapping_error(tx->dev, addr))) {
515 		tx->dma_mapping_error++;
516 		goto drop;
517 	}
518 	buf = &info->buf;
519 	dma_unmap_len_set(buf, len, len);
520 	dma_unmap_addr_set(buf, dma, addr);
521 
522 	payload_nfrags = shinfo->nr_frags;
523 	if (hlen < len) {
524 		/* For gso the rest of the linear portion of the skb needs to
525 		 * be in its own descriptor.
526 		 */
527 		payload_nfrags++;
528 		gve_tx_fill_pkt_desc(pkt_desc, skb, is_gso, l4_hdr_offset,
529 				     1 + payload_nfrags, hlen, addr);
530 
531 		len -= hlen;
532 		addr += hlen;
533 		idx = (tx->req + 1) & tx->mask;
534 		seg_desc = &tx->desc[idx];
535 		gve_tx_fill_seg_desc(seg_desc, skb, is_gso, len, addr);
536 	} else {
537 		gve_tx_fill_pkt_desc(pkt_desc, skb, is_gso, l4_hdr_offset,
538 				     1 + payload_nfrags, hlen, addr);
539 	}
540 
541 	for (i = 0; i < shinfo->nr_frags; i++) {
542 		const skb_frag_t *frag = &shinfo->frags[i];
543 
544 		idx = (idx + 1) & tx->mask;
545 		seg_desc = &tx->desc[idx];
546 		len = skb_frag_size(frag);
547 		addr = skb_frag_dma_map(tx->dev, frag, 0, len, DMA_TO_DEVICE);
548 		if (unlikely(dma_mapping_error(tx->dev, addr))) {
549 			tx->dma_mapping_error++;
550 			goto unmap_drop;
551 		}
552 		buf = &tx->info[idx].buf;
553 		tx->info[idx].skb = NULL;
554 		dma_unmap_len_set(buf, len, len);
555 		dma_unmap_addr_set(buf, dma, addr);
556 
557 		gve_tx_fill_seg_desc(seg_desc, skb, is_gso, len, addr);
558 	}
559 
560 	return 1 + payload_nfrags;
561 
562 unmap_drop:
563 	i += (payload_nfrags == shinfo->nr_frags ? 1 : 2);
564 	while (i--) {
565 		idx--;
566 		gve_tx_unmap_buf(tx->dev, &tx->info[idx & tx->mask]);
567 	}
568 drop:
569 	tx->dropped_pkt++;
570 	return 0;
571 }
572 
573 netdev_tx_t gve_tx(struct sk_buff *skb, struct net_device *dev)
574 {
575 	struct gve_priv *priv = netdev_priv(dev);
576 	struct gve_tx_ring *tx;
577 	int nsegs;
578 
579 	WARN(skb_get_queue_mapping(skb) >= priv->tx_cfg.num_queues,
580 	     "skb queue index out of range");
581 	tx = &priv->tx[skb_get_queue_mapping(skb)];
582 	if (unlikely(gve_maybe_stop_tx(tx, skb))) {
583 		/* We need to ring the txq doorbell -- we have stopped the Tx
584 		 * queue for want of resources, but prior calls to gve_tx()
585 		 * may have added descriptors without ringing the doorbell.
586 		 */
587 
588 		gve_tx_put_doorbell(priv, tx->q_resources, tx->req);
589 		return NETDEV_TX_BUSY;
590 	}
591 	if (tx->raw_addressing)
592 		nsegs = gve_tx_add_skb_no_copy(priv, tx, skb);
593 	else
594 		nsegs = gve_tx_add_skb_copy(priv, tx, skb);
595 
596 	/* If the packet is getting sent, we need to update the skb */
597 	if (nsegs) {
598 		netdev_tx_sent_queue(tx->netdev_txq, skb->len);
599 		skb_tx_timestamp(skb);
600 		tx->req += nsegs;
601 	} else {
602 		dev_kfree_skb_any(skb);
603 	}
604 
605 	if (!netif_xmit_stopped(tx->netdev_txq) && netdev_xmit_more())
606 		return NETDEV_TX_OK;
607 
608 	/* Give packets to NIC. Even if this packet failed to send the doorbell
609 	 * might need to be rung because of xmit_more.
610 	 */
611 	gve_tx_put_doorbell(priv, tx->q_resources, tx->req);
612 	return NETDEV_TX_OK;
613 }
614 
615 #define GVE_TX_START_THRESH	PAGE_SIZE
616 
617 static int gve_clean_tx_done(struct gve_priv *priv, struct gve_tx_ring *tx,
618 			     u32 to_do, bool try_to_wake)
619 {
620 	struct gve_tx_buffer_state *info;
621 	u64 pkts = 0, bytes = 0;
622 	size_t space_freed = 0;
623 	struct sk_buff *skb;
624 	int i, j;
625 	u32 idx;
626 
627 	for (j = 0; j < to_do; j++) {
628 		idx = tx->done & tx->mask;
629 		netif_info(priv, tx_done, priv->dev,
630 			   "[%d] %s: idx=%d (req=%u done=%u)\n",
631 			   tx->q_num, __func__, idx, tx->req, tx->done);
632 		info = &tx->info[idx];
633 		skb = info->skb;
634 
635 		/* Unmap the buffer */
636 		if (tx->raw_addressing)
637 			gve_tx_unmap_buf(tx->dev, info);
638 		tx->done++;
639 		/* Mark as free */
640 		if (skb) {
641 			info->skb = NULL;
642 			bytes += skb->len;
643 			pkts++;
644 			dev_consume_skb_any(skb);
645 			if (tx->raw_addressing)
646 				continue;
647 			/* FIFO free */
648 			for (i = 0; i < ARRAY_SIZE(info->iov); i++) {
649 				space_freed += info->iov[i].iov_len + info->iov[i].iov_padding;
650 				info->iov[i].iov_len = 0;
651 				info->iov[i].iov_padding = 0;
652 			}
653 		}
654 	}
655 
656 	if (!tx->raw_addressing)
657 		gve_tx_free_fifo(&tx->tx_fifo, space_freed);
658 	u64_stats_update_begin(&tx->statss);
659 	tx->bytes_done += bytes;
660 	tx->pkt_done += pkts;
661 	u64_stats_update_end(&tx->statss);
662 	netdev_tx_completed_queue(tx->netdev_txq, pkts, bytes);
663 
664 	/* start the queue if we've stopped it */
665 #ifndef CONFIG_BQL
666 	/* Make sure that the doorbells are synced */
667 	smp_mb();
668 #endif
669 	if (try_to_wake && netif_tx_queue_stopped(tx->netdev_txq) &&
670 	    likely(gve_can_tx(tx, GVE_TX_START_THRESH))) {
671 		tx->wake_queue++;
672 		netif_tx_wake_queue(tx->netdev_txq);
673 	}
674 
675 	return pkts;
676 }
677 
678 __be32 gve_tx_load_event_counter(struct gve_priv *priv,
679 				 struct gve_tx_ring *tx)
680 {
681 	u32 counter_index = be32_to_cpu((tx->q_resources->counter_index));
682 
683 	return READ_ONCE(priv->counter_array[counter_index]);
684 }
685 
686 bool gve_tx_poll(struct gve_notify_block *block, int budget)
687 {
688 	struct gve_priv *priv = block->priv;
689 	struct gve_tx_ring *tx = block->tx;
690 	bool repoll = false;
691 	u32 nic_done;
692 	u32 to_do;
693 
694 	/* If budget is 0, do all the work */
695 	if (budget == 0)
696 		budget = INT_MAX;
697 
698 	/* Find out how much work there is to be done */
699 	tx->last_nic_done = gve_tx_load_event_counter(priv, tx);
700 	nic_done = be32_to_cpu(tx->last_nic_done);
701 	if (budget > 0) {
702 		/* Do as much work as we have that the budget will
703 		 * allow
704 		 */
705 		to_do = min_t(u32, (nic_done - tx->done), budget);
706 		gve_clean_tx_done(priv, tx, to_do, true);
707 	}
708 	/* If we still have work we want to repoll */
709 	repoll |= (nic_done != tx->done);
710 	return repoll;
711 }
712