xref: /linux/net/xdp/xsk.c (revision 67f8bc848ee31831336bd478e57d2f993551902e)
1 // SPDX-License-Identifier: GPL-2.0
2 /* XDP sockets
3  *
4  * AF_XDP sockets allows a channel between XDP programs and userspace
5  * applications.
6  * Copyright(c) 2018 Intel Corporation.
7  *
8  * Author(s): Björn Töpel <bjorn.topel@intel.com>
9  *	      Magnus Karlsson <magnus.karlsson@intel.com>
10  */
11 
12 #define pr_fmt(fmt) "AF_XDP: %s: " fmt, __func__
13 
14 #include <linux/if_xdp.h>
15 #include <linux/init.h>
16 #include <linux/sched/mm.h>
17 #include <linux/sched/signal.h>
18 #include <linux/sched/task.h>
19 #include <linux/socket.h>
20 #include <linux/file.h>
21 #include <linux/uaccess.h>
22 #include <linux/net.h>
23 #include <linux/netdevice.h>
24 #include <linux/rculist.h>
25 #include <linux/uio.h>
26 #include <linux/vmalloc.h>
27 
28 #include <net/netdev_queues.h>
29 #include <net/xdp_sock_drv.h>
30 #include <net/busy_poll.h>
31 #include <net/netdev_lock.h>
32 #include <net/netdev_rx_queue.h>
33 #include <net/xdp.h>
34 
35 #include "../core/dev.h"
36 
37 #include "xsk_queue.h"
38 #include "xdp_umem.h"
39 #include "xsk.h"
40 
41 #define TX_BATCH_SIZE 32
42 #define MAX_PER_SOCKET_BUDGET 32
43 
44 struct xsk_addrs {
45 	u32 num_descs;
46 	u64 addrs[MAX_SKB_FRAGS + 1];
47 };
48 
49 static struct kmem_cache *xsk_tx_generic_cache;
50 
51 void xsk_set_rx_need_wakeup(struct xsk_buff_pool *pool)
52 {
53 	if (pool->cached_need_wakeup & XDP_WAKEUP_RX)
54 		return;
55 
56 	pool->fq->ring->flags |= XDP_RING_NEED_WAKEUP;
57 	pool->cached_need_wakeup |= XDP_WAKEUP_RX;
58 }
59 EXPORT_SYMBOL(xsk_set_rx_need_wakeup);
60 
61 void xsk_set_tx_need_wakeup(struct xsk_buff_pool *pool)
62 {
63 	struct xdp_sock *xs;
64 
65 	if (pool->cached_need_wakeup & XDP_WAKEUP_TX)
66 		return;
67 
68 	rcu_read_lock();
69 	list_for_each_entry_rcu(xs, &pool->xsk_tx_list, tx_list) {
70 		xs->tx->ring->flags |= XDP_RING_NEED_WAKEUP;
71 	}
72 	rcu_read_unlock();
73 
74 	pool->cached_need_wakeup |= XDP_WAKEUP_TX;
75 }
76 EXPORT_SYMBOL(xsk_set_tx_need_wakeup);
77 
78 void xsk_clear_rx_need_wakeup(struct xsk_buff_pool *pool)
79 {
80 	if (!(pool->cached_need_wakeup & XDP_WAKEUP_RX))
81 		return;
82 
83 	pool->fq->ring->flags &= ~XDP_RING_NEED_WAKEUP;
84 	pool->cached_need_wakeup &= ~XDP_WAKEUP_RX;
85 }
86 EXPORT_SYMBOL(xsk_clear_rx_need_wakeup);
87 
88 void xsk_clear_tx_need_wakeup(struct xsk_buff_pool *pool)
89 {
90 	struct xdp_sock *xs;
91 
92 	if (!(pool->cached_need_wakeup & XDP_WAKEUP_TX))
93 		return;
94 
95 	rcu_read_lock();
96 	list_for_each_entry_rcu(xs, &pool->xsk_tx_list, tx_list) {
97 		xs->tx->ring->flags &= ~XDP_RING_NEED_WAKEUP;
98 	}
99 	rcu_read_unlock();
100 
101 	pool->cached_need_wakeup &= ~XDP_WAKEUP_TX;
102 }
103 EXPORT_SYMBOL(xsk_clear_tx_need_wakeup);
104 
105 bool xsk_uses_need_wakeup(struct xsk_buff_pool *pool)
106 {
107 	return pool->uses_need_wakeup;
108 }
109 EXPORT_SYMBOL(xsk_uses_need_wakeup);
110 
111 struct xsk_buff_pool *xsk_get_pool_from_qid(struct net_device *dev,
112 					    u16 queue_id)
113 {
114 	if (queue_id < dev->real_num_rx_queues)
115 		return dev->_rx[queue_id].pool;
116 	if (queue_id < dev->real_num_tx_queues)
117 		return dev->_tx[queue_id].pool;
118 
119 	return NULL;
120 }
121 EXPORT_SYMBOL(xsk_get_pool_from_qid);
122 
123 static void __xsk_clear_pool_at_qid(struct net_device *dev, u16 queue_id)
124 {
125 	if (queue_id < dev->num_rx_queues)
126 		dev->_rx[queue_id].pool = NULL;
127 	if (queue_id < dev->num_tx_queues)
128 		dev->_tx[queue_id].pool = NULL;
129 }
130 
131 void xsk_clear_pool_at_qid(struct net_device *dev, u16 queue_id)
132 {
133 	struct netdev_rx_queue *hw_rxq;
134 
135 	if (!netif_rxq_is_leased(dev, queue_id))
136 		return __xsk_clear_pool_at_qid(dev, queue_id);
137 	WARN_ON_ONCE(!netif_is_queue_leasee(dev));
138 
139 	hw_rxq = __netif_get_rx_queue(dev, queue_id)->lease;
140 
141 	netdev_lock(hw_rxq->dev);
142 	queue_id = get_netdev_rx_queue_index(hw_rxq);
143 	__xsk_clear_pool_at_qid(hw_rxq->dev, queue_id);
144 	netdev_unlock(hw_rxq->dev);
145 }
146 
147 static int __xsk_reg_pool_at_qid(struct net_device *dev,
148 				 struct xsk_buff_pool *pool, u16 queue_id)
149 {
150 	if (xsk_get_pool_from_qid(dev, queue_id))
151 		return -EBUSY;
152 
153 	if (queue_id < dev->real_num_rx_queues)
154 		dev->_rx[queue_id].pool = pool;
155 	if (queue_id < dev->real_num_tx_queues)
156 		dev->_tx[queue_id].pool = pool;
157 
158 	return 0;
159 }
160 
161 /* The buffer pool is stored both in the _rx struct and the _tx struct as we do
162  * not know if the device has more tx queues than rx, or the opposite.
163  * This might also change during run time.
164  */
165 int xsk_reg_pool_at_qid(struct net_device *dev, struct xsk_buff_pool *pool,
166 			u16 queue_id)
167 {
168 	struct netdev_rx_queue *hw_rxq;
169 	int ret;
170 
171 	if (queue_id >= max(dev->real_num_rx_queues,
172 			    dev->real_num_tx_queues))
173 		return -EINVAL;
174 
175 	if (queue_id >= dev->real_num_rx_queues ||
176 	    !netif_rxq_is_leased(dev, queue_id))
177 		return __xsk_reg_pool_at_qid(dev, pool, queue_id);
178 	if (!netif_is_queue_leasee(dev))
179 		return -EBUSY;
180 
181 	hw_rxq = __netif_get_rx_queue(dev, queue_id)->lease;
182 
183 	netdev_lock(hw_rxq->dev);
184 	queue_id = get_netdev_rx_queue_index(hw_rxq);
185 	ret = __xsk_reg_pool_at_qid(hw_rxq->dev, pool, queue_id);
186 	netdev_unlock(hw_rxq->dev);
187 
188 	return ret;
189 }
190 
191 static int __xsk_rcv_zc(struct xdp_sock *xs, struct xdp_buff_xsk *xskb, u32 len,
192 			u32 flags)
193 {
194 	u64 addr;
195 	int err;
196 
197 	addr = xp_get_handle(xskb, xskb->pool);
198 	err = xskq_prod_reserve_desc(xs->rx, addr, len, flags);
199 	if (err) {
200 		xs->rx_queue_full++;
201 		return err;
202 	}
203 
204 	xp_release(xskb);
205 	return 0;
206 }
207 
208 static void __xsk_rcv_zc_safe(struct xdp_sock *xs, struct xdp_buff_xsk *xskb,
209 			      u32 len, u32 flags)
210 {
211 	u64 addr;
212 
213 	addr = xp_get_handle(xskb, xskb->pool);
214 	__xskq_prod_reserve_desc(xs->rx, addr, len, flags);
215 
216 	xp_release(xskb);
217 }
218 
219 static int xsk_rcv_zc(struct xdp_sock *xs, struct xdp_buff *xdp, u32 len)
220 {
221 	struct xdp_buff_xsk *xskb = container_of(xdp, struct xdp_buff_xsk, xdp);
222 	u32 frags = xdp_buff_has_frags(xdp);
223 	struct xdp_buff_xsk *pos, *tmp;
224 	struct list_head *xskb_list;
225 	u32 contd = 0;
226 	u32 num_desc;
227 	int err;
228 
229 	if (likely(!frags)) {
230 		err = __xsk_rcv_zc(xs, xskb, len, contd);
231 		if (err)
232 			goto err;
233 		return 0;
234 	}
235 
236 	contd = XDP_PKT_CONTD;
237 	num_desc = xdp_get_shared_info_from_buff(xdp)->nr_frags + 1;
238 	if (xskq_prod_nb_free(xs->rx, num_desc) < num_desc) {
239 		xs->rx_queue_full++;
240 		err = -ENOBUFS;
241 		goto err;
242 	}
243 
244 	__xsk_rcv_zc_safe(xs, xskb, len, contd);
245 	xskb_list = &xskb->pool->xskb_list;
246 	list_for_each_entry_safe(pos, tmp, xskb_list, list_node) {
247 		if (list_is_singular(xskb_list))
248 			contd = 0;
249 		len = pos->xdp.data_end - pos->xdp.data;
250 		__xsk_rcv_zc_safe(xs, pos, len, contd);
251 		list_del_init(&pos->list_node);
252 	}
253 
254 	return 0;
255 err:
256 	xsk_buff_free(xdp);
257 	return err;
258 }
259 
260 static void *xsk_copy_xdp_start(struct xdp_buff *from)
261 {
262 	if (unlikely(xdp_data_meta_unsupported(from)))
263 		return from->data;
264 	else
265 		return from->data_meta;
266 }
267 
268 static u32 xsk_copy_xdp(void *to, void **from, u32 to_len,
269 			u32 *from_len, skb_frag_t **frag, u32 rem)
270 {
271 	u32 copied = 0;
272 
273 	while (1) {
274 		u32 copy_len = min_t(u32, *from_len, to_len);
275 
276 		memcpy(to, *from, copy_len);
277 		copied += copy_len;
278 		if (rem == copied)
279 			return copied;
280 
281 		if (*from_len == copy_len) {
282 			*from = skb_frag_address(*frag);
283 			*from_len = skb_frag_size((*frag)++);
284 		} else {
285 			*from += copy_len;
286 			*from_len -= copy_len;
287 		}
288 		if (to_len == copy_len)
289 			return copied;
290 
291 		to_len -= copy_len;
292 		to += copy_len;
293 	}
294 }
295 
296 static int __xsk_rcv(struct xdp_sock *xs, struct xdp_buff *xdp, u32 len)
297 {
298 	u32 frame_size = __xsk_pool_get_rx_frame_size(xs->pool);
299 	void *copy_from = xsk_copy_xdp_start(xdp), *copy_to;
300 	u32 from_len, meta_len, rem, num_desc;
301 	struct xdp_buff_xsk *xskb, *tmp;
302 	struct xdp_buff *xsk_xdp;
303 	LIST_HEAD(xsk_buffs);
304 	skb_frag_t *frag;
305 	u32 i;
306 
307 	from_len = xdp->data_end - copy_from;
308 	meta_len = xdp->data - copy_from;
309 	rem = len + meta_len;
310 
311 	if (len <= frame_size && !xdp_buff_has_frags(xdp)) {
312 		int err;
313 
314 		xsk_xdp = xsk_buff_alloc(xs->pool);
315 		if (!xsk_xdp) {
316 			xs->rx_dropped++;
317 			return -ENOMEM;
318 		}
319 		memcpy(xsk_xdp->data - meta_len, copy_from, rem);
320 		xskb = container_of(xsk_xdp, struct xdp_buff_xsk, xdp);
321 		err = __xsk_rcv_zc(xs, xskb, len, 0);
322 		if (err) {
323 			xsk_buff_free(xsk_xdp);
324 			return err;
325 		}
326 
327 		return 0;
328 	}
329 
330 	num_desc = (len - 1) / frame_size + 1;
331 
332 	if (!xsk_buff_can_alloc(xs->pool, num_desc)) {
333 		xs->rx_dropped++;
334 		return -ENOMEM;
335 	}
336 	if (xskq_prod_nb_free(xs->rx, num_desc) < num_desc) {
337 		xs->rx_queue_full++;
338 		return -ENOBUFS;
339 	}
340 
341 	if (xdp_buff_has_frags(xdp)) {
342 		struct skb_shared_info *sinfo;
343 
344 		sinfo = xdp_get_shared_info_from_buff(xdp);
345 		frag =  &sinfo->frags[0];
346 	}
347 
348 	for (i = 0; i < num_desc; i++) {
349 		xsk_xdp = xsk_buff_alloc(xs->pool);
350 		if (!xsk_xdp)
351 			goto err_alloc;
352 
353 		xskb = container_of(xsk_xdp, struct xdp_buff_xsk, xdp);
354 		if (unlikely(!list_empty(&xskb->list_node)))
355 			goto err_alloc;
356 
357 		list_add_tail(&xskb->list_node, &xsk_buffs);
358 	}
359 
360 	do {
361 		u32 to_len = frame_size + meta_len;
362 		u32 copied;
363 
364 		xskb = list_first_entry(&xsk_buffs, struct xdp_buff_xsk,
365 					list_node);
366 		list_del_init(&xskb->list_node);
367 		xsk_xdp = &xskb->xdp;
368 		copy_to = xsk_xdp->data - meta_len;
369 
370 		copied = xsk_copy_xdp(copy_to, &copy_from, to_len, &from_len, &frag, rem);
371 		rem -= copied;
372 
373 		__xsk_rcv_zc_safe(xs, xskb, copied - meta_len,
374 				  rem ? XDP_PKT_CONTD : 0);
375 		meta_len = 0;
376 	} while (rem);
377 
378 	return 0;
379 
380 err_alloc:
381 	list_for_each_entry_safe(xskb, tmp, &xsk_buffs, list_node) {
382 		list_del_init(&xskb->list_node);
383 		xsk_buff_free(&xskb->xdp);
384 	}
385 	xs->rx_dropped++;
386 	return -ENOMEM;
387 }
388 
389 static bool xsk_tx_writeable(struct xdp_sock *xs)
390 {
391 	if (xskq_cons_present_entries(xs->tx) > xs->tx->nentries / 2)
392 		return false;
393 
394 	return true;
395 }
396 
397 static void __xsk_tx_release(struct xdp_sock *xs)
398 {
399 	__xskq_cons_release(xs->tx);
400 	if (xsk_tx_writeable(xs))
401 		xs->sk.sk_write_space(&xs->sk);
402 }
403 
404 static bool xsk_is_bound(struct xdp_sock *xs)
405 {
406 	if (READ_ONCE(xs->state) == XSK_BOUND) {
407 		/* Matches smp_wmb() in bind(). */
408 		smp_rmb();
409 		return true;
410 	}
411 	return false;
412 }
413 
414 static bool xsk_dev_queue_valid(const struct xdp_sock *xs,
415 				const struct xdp_rxq_info *info)
416 {
417 	struct net_device *dev = xs->dev;
418 	u32 queue_index = xs->queue_id;
419 	struct netdev_rx_queue *rxq;
420 
421 	if (info->dev == dev &&
422 	    info->queue_index == queue_index)
423 		return true;
424 
425 	if (queue_index < dev->real_num_rx_queues) {
426 		rxq = READ_ONCE(__netif_get_rx_queue(dev, queue_index)->lease);
427 		if (!rxq)
428 			return false;
429 
430 		dev = rxq->dev;
431 		queue_index = get_netdev_rx_queue_index(rxq);
432 
433 		return info->dev == dev &&
434 		       info->queue_index == queue_index;
435 	}
436 	return false;
437 }
438 
439 static int xsk_rcv_check(struct xdp_sock *xs, struct xdp_buff *xdp, u32 len)
440 {
441 	if (!xsk_is_bound(xs))
442 		return -ENXIO;
443 	if (!xsk_dev_queue_valid(xs, xdp->rxq))
444 		return -EINVAL;
445 
446 	if (len > __xsk_pool_get_rx_frame_size(xs->pool) && !xs->sg) {
447 		xs->rx_dropped++;
448 		return -ENOSPC;
449 	}
450 
451 	return 0;
452 }
453 
454 static void xsk_flush(struct xdp_sock *xs)
455 {
456 	xskq_prod_submit(xs->rx);
457 	__xskq_cons_release(xs->pool->fq);
458 	sock_def_readable(&xs->sk);
459 }
460 
461 int xsk_generic_rcv(struct xdp_sock *xs, struct xdp_buff *xdp)
462 {
463 	u32 len = xdp_get_buff_len(xdp);
464 	int err;
465 
466 	err = xsk_rcv_check(xs, xdp, len);
467 	if (!err) {
468 		spin_lock_bh(&xs->pool->rx_lock);
469 		err = __xsk_rcv(xs, xdp, len);
470 		xsk_flush(xs);
471 		spin_unlock_bh(&xs->pool->rx_lock);
472 	}
473 
474 	return err;
475 }
476 
477 static int xsk_rcv(struct xdp_sock *xs, struct xdp_buff *xdp)
478 {
479 	u32 len = xdp_get_buff_len(xdp);
480 	int err;
481 
482 	err = xsk_rcv_check(xs, xdp, len);
483 	if (err)
484 		return err;
485 
486 	if (xdp->rxq->mem.type == MEM_TYPE_XSK_BUFF_POOL) {
487 		len = xdp->data_end - xdp->data;
488 		return xsk_rcv_zc(xs, xdp, len);
489 	}
490 
491 	err = __xsk_rcv(xs, xdp, len);
492 	if (!err)
493 		xdp_return_buff(xdp);
494 	return err;
495 }
496 
497 int __xsk_map_redirect(struct xdp_sock *xs, struct xdp_buff *xdp)
498 {
499 	int err;
500 
501 	err = xsk_rcv(xs, xdp);
502 	if (err)
503 		return err;
504 
505 	if (!xs->flush_node.prev) {
506 		struct list_head *flush_list = bpf_net_ctx_get_xskmap_flush_list();
507 
508 		list_add(&xs->flush_node, flush_list);
509 	}
510 
511 	return 0;
512 }
513 
514 void __xsk_map_flush(struct list_head *flush_list)
515 {
516 	struct xdp_sock *xs, *tmp;
517 
518 	list_for_each_entry_safe(xs, tmp, flush_list, flush_node) {
519 		xsk_flush(xs);
520 		__list_del_clearprev(&xs->flush_node);
521 	}
522 }
523 
524 void xsk_tx_completed(struct xsk_buff_pool *pool, u32 nb_entries)
525 {
526 	u32 reclaim_descs = READ_ONCE(pool->reclaim_descs);
527 
528 	if (unlikely(reclaim_descs)) {
529 		u32 pending_descs = READ_ONCE(pool->tx_zc_pending_descs);
530 
531 		if (nb_entries < pending_descs) {
532 			WRITE_ONCE(pool->tx_zc_pending_descs,
533 				   pending_descs - nb_entries);
534 			xskq_prod_submit_n(pool->cq, nb_entries);
535 			return;
536 		}
537 
538 		WRITE_ONCE(pool->tx_zc_pending_descs, 0);
539 		nb_entries += reclaim_descs;
540 		WRITE_ONCE(pool->reclaim_descs, 0);
541 	}
542 
543 	xskq_prod_submit_n(pool->cq, nb_entries);
544 }
545 EXPORT_SYMBOL(xsk_tx_completed);
546 
547 void xsk_tx_release(struct xsk_buff_pool *pool)
548 {
549 	struct xdp_sock *xs;
550 
551 	rcu_read_lock();
552 	list_for_each_entry_rcu(xs, &pool->xsk_tx_list, tx_list)
553 		__xsk_tx_release(xs);
554 	rcu_read_unlock();
555 }
556 EXPORT_SYMBOL(xsk_tx_release);
557 
558 bool xsk_tx_peek_desc(struct xsk_buff_pool *pool, struct xdp_desc *desc)
559 {
560 	bool budget_exhausted = false;
561 	struct xdp_sock *xs;
562 
563 	rcu_read_lock();
564 again:
565 	list_for_each_entry_rcu(xs, &pool->xsk_tx_list, tx_list) {
566 		if (xs->tx_budget_spent >= MAX_PER_SOCKET_BUDGET) {
567 			budget_exhausted = true;
568 			continue;
569 		}
570 
571 		if (!xskq_cons_peek_desc(xs->tx, desc, pool)) {
572 			if (xskq_has_descs(xs->tx))
573 				xskq_cons_release(xs->tx);
574 			continue;
575 		}
576 
577 		xs->tx_budget_spent++;
578 
579 		/* This is the backpressure mechanism for the Tx path.
580 		 * Reserve space in the completion queue and only proceed
581 		 * if there is space in it. This avoids having to implement
582 		 * any buffering in the Tx path.
583 		 */
584 		if (xskq_prod_reserve_addr(pool->cq, desc->addr))
585 			goto out;
586 
587 		xskq_cons_release(xs->tx);
588 		rcu_read_unlock();
589 		return true;
590 	}
591 
592 	if (budget_exhausted) {
593 		list_for_each_entry_rcu(xs, &pool->xsk_tx_list, tx_list)
594 			xs->tx_budget_spent = 0;
595 
596 		budget_exhausted = false;
597 		goto again;
598 	}
599 
600 out:
601 	rcu_read_unlock();
602 	return false;
603 }
604 EXPORT_SYMBOL(xsk_tx_peek_desc);
605 
606 static u32 xsk_tx_peek_release_fallback(struct xsk_buff_pool *pool, u32 max_entries)
607 {
608 	struct xdp_desc *descs = pool->tx_descs;
609 	u32 nb_pkts = 0;
610 
611 	while (nb_pkts < max_entries && xsk_tx_peek_desc(pool, &descs[nb_pkts]))
612 		nb_pkts++;
613 
614 	xsk_tx_release(pool);
615 	return nb_pkts;
616 }
617 
618 static void xsk_tx_commit_batch(struct xsk_buff_pool *pool,
619 				struct xsk_tx_batch *batch)
620 {
621 	u32 nb_descs = xsk_tx_batch_cq_descs(batch);
622 	u32 cq_cached_prod;
623 
624 	if (!nb_descs)
625 		return;
626 
627 	cq_cached_prod = pool->cq->cached_prod;
628 	xskq_prod_write_addr_batch(pool->cq, pool->tx_descs, nb_descs);
629 
630 	if (unlikely(batch->reclaim_descs)) {
631 		u32 cq_pending_descs;
632 
633 		/* CQ is positional. Descriptors already written but not
634 		 * submitted must complete before any reclaim-only descriptors
635 		 * appended below.
636 		 */
637 		cq_pending_descs = cq_cached_prod - xskq_get_prod(pool->cq);
638 
639 		WRITE_ONCE(pool->tx_zc_pending_descs,
640 			   batch->tx_descs + cq_pending_descs);
641 		WRITE_ONCE(pool->reclaim_descs, batch->reclaim_descs);
642 		if (unlikely(!pool->tx_zc_pending_descs))
643 			xsk_tx_completed(pool, 0);
644 	}
645 }
646 
647 static struct xsk_tx_batch
648 __xsk_tx_peek_release_desc_batch(struct xsk_buff_pool *pool, struct xdp_sock *xs,
649 				 struct xdp_desc *descs, u32 max_descs)
650 {
651 	struct xsk_tx_batch batch = {};
652 	u32 entries;
653 
654 	entries = xskq_cons_nb_entries(xs->tx, max_descs);
655 	if (!entries)
656 		return batch;
657 
658 	batch = xskq_cons_read_desc_batch(xs, pool, descs, max_descs);
659 	if (!xsk_tx_batch_cq_descs(&batch)) {
660 		xs->tx->queue_empty_descs++;
661 	} else {
662 		__xskq_cons_release(xs->tx);
663 		xs->sk.sk_write_space(&xs->sk);
664 	}
665 	return batch;
666 }
667 
668 static struct xsk_tx_batch
669 xsk_tx_peek_release_shared_desc_batch(struct xsk_buff_pool *pool, u32 max_descs)
670 {
671 	u32 cq_descs_before, cq_descs_after;
672 	struct xsk_tx_batch sum_batch = {};
673 	bool budget_exhausted;
674 	u32 per_socket_budget;
675 	struct xdp_sock *xs;
676 
677 	/* The fairness quota must allow one maximum-sized valid packet. */
678 	per_socket_budget = max_t(u32, MAX_PER_SOCKET_BUDGET,
679 				  pool->xdp_zc_max_segs);
680 
681 again:
682 	budget_exhausted = false;
683 	cq_descs_before = xsk_tx_batch_cq_descs(&sum_batch);
684 	list_for_each_entry_rcu(xs, &pool->xsk_tx_list, tx_list) {
685 		u32 budget, budget_left, offset, remaining, used;
686 		struct xsk_tx_batch curr_batch;
687 
688 		/* Once reclaim-only descriptors have been appended to the CQ
689 		 * address area, do not append driver-visible Tx descriptors
690 		 * from another socket after them. xsk_tx_completed() relies on
691 		 * all driver-visible descriptors preceding all reclaim-only
692 		 * descriptors in CQ order.
693 		 */
694 		if (sum_batch.reclaim_descs)
695 			break;
696 
697 		/* be gentle when playing with pool->tx_descs */
698 		offset = xsk_tx_batch_cq_descs(&sum_batch);
699 		if (offset >= max_descs)
700 			break;
701 
702 		if (xs->tx_budget_spent >= per_socket_budget) {
703 			if (xskq_cons_nb_entries(xs->tx, 1))
704 				budget_exhausted = true;
705 			continue;
706 		}
707 
708 		budget_left = per_socket_budget - xs->tx_budget_spent;
709 		remaining = max_descs - offset;
710 		budget = min(remaining, budget_left);
711 
712 		curr_batch = __xsk_tx_peek_release_desc_batch(pool, xs,
713 							      pool->tx_descs + offset,
714 							      budget);
715 		used = xsk_tx_batch_cq_descs(&curr_batch);
716 		if (!used) {
717 			if (curr_batch.budget_limited && budget_left < remaining)
718 				budget_exhausted = true;
719 			continue;
720 		}
721 
722 		xs->tx_budget_spent += used;
723 		sum_batch.tx_descs += curr_batch.tx_descs;
724 		sum_batch.reclaim_descs = curr_batch.reclaim_descs;
725 	}
726 
727 	cq_descs_after = xsk_tx_batch_cq_descs(&sum_batch);
728 
729 	if (sum_batch.reclaim_descs || cq_descs_after >= max_descs)
730 		return sum_batch;
731 
732 	/* Continue filling the batch while this pass made progress */
733 	if (cq_descs_before != cq_descs_after)
734 		goto again;
735 
736 	if (!budget_exhausted)
737 		return sum_batch;
738 
739 	list_for_each_entry_rcu(xs, &pool->xsk_tx_list, tx_list)
740 		xs->tx_budget_spent = 0;
741 	goto again;
742 }
743 
744 u32 xsk_tx_peek_release_desc_batch(struct xsk_buff_pool *pool, u32 nb_pkts)
745 {
746 	struct xsk_tx_batch batch = {};
747 	struct xdp_sock *xs;
748 	bool umem_shared;
749 
750 	rcu_read_lock();
751 	if (unlikely(READ_ONCE(pool->reclaim_descs)))
752 		goto out;
753 
754 	xs = list_first_or_null_rcu(&pool->xsk_tx_list, struct xdp_sock,
755 				    tx_list);
756 	if (!xs)
757 		goto out;
758 
759 	nb_pkts = min(nb_pkts, pool->tx_descs_nentries);
760 	if (!nb_pkts)
761 		goto out;
762 
763 	umem_shared = !list_is_singular(&pool->xsk_tx_list);
764 
765 	if (umem_shared && !(pool->umem->flags & XDP_UMEM_SG_FLAG)) {
766 		rcu_read_unlock();
767 		return xsk_tx_peek_release_fallback(pool, nb_pkts);
768 	}
769 
770 	/* This is the backpressure mechanism for the Tx path. Try to
771 	 * reserve space in the completion queue for all packets, but
772 	 * if there are fewer slots available, just process that many
773 	 * packets. This avoids having to implement any buffering in
774 	 * the Tx path.
775 	 */
776 	nb_pkts = xskq_prod_nb_free(pool->cq, nb_pkts);
777 	if (!nb_pkts)
778 		goto out;
779 
780 	batch = umem_shared ?
781 		xsk_tx_peek_release_shared_desc_batch(pool, nb_pkts) :
782 		__xsk_tx_peek_release_desc_batch(pool, xs,
783 						 pool->tx_descs,
784 						 nb_pkts);
785 	xsk_tx_commit_batch(pool, &batch);
786 
787 out:
788 	rcu_read_unlock();
789 	return batch.tx_descs;
790 }
791 EXPORT_SYMBOL(xsk_tx_peek_release_desc_batch);
792 
793 static int xsk_wakeup(struct xdp_sock *xs, u8 flags)
794 {
795 	struct net_device *dev = xs->dev;
796 
797 	return dev->netdev_ops->ndo_xsk_wakeup(dev, xs->queue_id, flags);
798 }
799 
800 static int xsk_cq_reserve_locked(struct xsk_buff_pool *pool)
801 {
802 	int ret;
803 
804 	spin_lock(&pool->cq->cq_cached_prod_lock);
805 	ret = xskq_prod_reserve(pool->cq);
806 	spin_unlock(&pool->cq->cq_cached_prod_lock);
807 
808 	return ret;
809 }
810 
811 static bool xsk_skb_destructor_is_addr(struct sk_buff *skb)
812 {
813 	return (uintptr_t)skb_shinfo(skb)->destructor_arg & 0x1UL;
814 }
815 
816 static u64 xsk_skb_destructor_get_addr(struct sk_buff *skb)
817 {
818 	return (u64)((uintptr_t)skb_shinfo(skb)->destructor_arg & ~0x1UL);
819 }
820 
821 static struct xsk_addrs *__xsk_addrs_alloc(struct sk_buff *skb, u64 addr)
822 {
823 	struct xsk_addrs *xsk_addr;
824 
825 	xsk_addr = kmem_cache_zalloc(xsk_tx_generic_cache, GFP_KERNEL);
826 	if (unlikely(!xsk_addr))
827 		return NULL;
828 
829 	xsk_addr->addrs[0] = addr;
830 	skb_shinfo(skb)->destructor_arg = (void *)xsk_addr;
831 	return xsk_addr;
832 }
833 
834 static struct xsk_addrs *xsk_addrs_alloc(struct sk_buff *skb)
835 {
836 	struct xsk_addrs *xsk_addr;
837 
838 	if (!xsk_skb_destructor_is_addr(skb))
839 		return (struct xsk_addrs *)skb_shinfo(skb)->destructor_arg;
840 
841 	xsk_addr = __xsk_addrs_alloc(skb, xsk_skb_destructor_get_addr(skb));
842 	if (likely(xsk_addr))
843 		xsk_addr->num_descs = 1;
844 	return xsk_addr;
845 }
846 
847 static int xsk_skb_destructor_set_addr(struct sk_buff *skb, u64 addr)
848 {
849 	if (IS_ENABLED(CONFIG_64BIT)) {
850 		skb_shinfo(skb)->destructor_arg = (void *)((uintptr_t)addr | 0x1UL);
851 		return 0;
852 	}
853 
854 	if (unlikely(!__xsk_addrs_alloc(skb, addr)))
855 		return -ENOMEM;
856 	return 0;
857 }
858 
859 static void xsk_inc_num_desc(struct sk_buff *skb)
860 {
861 	struct xsk_addrs *xsk_addr;
862 
863 	if (!xsk_skb_destructor_is_addr(skb)) {
864 		xsk_addr = (struct xsk_addrs *)skb_shinfo(skb)->destructor_arg;
865 		xsk_addr->num_descs++;
866 	}
867 }
868 
869 static u32 xsk_get_num_desc(struct sk_buff *skb)
870 {
871 	struct xsk_addrs *xsk_addr;
872 
873 	if (xsk_skb_destructor_is_addr(skb))
874 		return 1;
875 
876 	xsk_addr = (struct xsk_addrs *)skb_shinfo(skb)->destructor_arg;
877 
878 	return xsk_addr->num_descs;
879 }
880 
881 static void xsk_cq_submit_addr_locked(struct xsk_buff_pool *pool,
882 				      struct sk_buff *skb)
883 {
884 	u32 num_descs = xsk_get_num_desc(skb);
885 	struct xsk_addrs *xsk_addr;
886 	u32 descs_processed = 0;
887 	unsigned long flags;
888 	u32 idx, i;
889 
890 	spin_lock_irqsave(&pool->cq_prod_lock, flags);
891 	idx = xskq_get_prod(pool->cq);
892 
893 	if (unlikely(!xsk_skb_destructor_is_addr(skb))) {
894 		xsk_addr = (struct xsk_addrs *)skb_shinfo(skb)->destructor_arg;
895 
896 		for (i = 0; i < num_descs; i++) {
897 			xskq_prod_write_addr(pool->cq, idx + descs_processed,
898 					     xsk_addr->addrs[i]);
899 			descs_processed++;
900 		}
901 		kmem_cache_free(xsk_tx_generic_cache, xsk_addr);
902 	} else {
903 		xskq_prod_write_addr(pool->cq, idx,
904 				     xsk_skb_destructor_get_addr(skb));
905 		descs_processed++;
906 	}
907 	xskq_prod_submit_n(pool->cq, descs_processed);
908 	spin_unlock_irqrestore(&pool->cq_prod_lock, flags);
909 }
910 
911 static void xsk_cq_submit_addr_single_locked(struct xsk_buff_pool *pool,
912 					     struct xdp_desc *desc)
913 {
914 	unsigned long flags;
915 	u32 idx;
916 
917 	spin_lock_irqsave(&pool->cq_prod_lock, flags);
918 	idx = xskq_get_prod(pool->cq);
919 	xskq_prod_write_addr(pool->cq, idx, desc->addr);
920 	xskq_prod_submit_n(pool->cq, 1);
921 	spin_unlock_irqrestore(&pool->cq_prod_lock, flags);
922 }
923 
924 static void xsk_cq_cancel_locked(struct xsk_buff_pool *pool, u32 n)
925 {
926 	spin_lock(&pool->cq->cq_cached_prod_lock);
927 	xskq_prod_cancel_n(pool->cq, n);
928 	spin_unlock(&pool->cq->cq_cached_prod_lock);
929 }
930 
931 INDIRECT_CALLABLE_SCOPE
932 void xsk_destruct_skb(struct sk_buff *skb)
933 {
934 	struct xsk_tx_metadata_compl *compl = &skb_shinfo(skb)->xsk_meta;
935 
936 	if (compl->tx_timestamp) {
937 		/* sw completion timestamp, not a real one */
938 		*compl->tx_timestamp = ktime_get_tai_fast_ns();
939 	}
940 
941 	xsk_cq_submit_addr_locked(xdp_sk(skb->sk)->pool, skb);
942 	sock_wfree(skb);
943 }
944 
945 static int xsk_skb_init_misc(struct sk_buff *skb, struct xdp_sock *xs,
946 			     u64 addr)
947 {
948 	int err;
949 
950 	err = xsk_skb_destructor_set_addr(skb, addr);
951 	if (unlikely(err))
952 		return err;
953 
954 	skb->dev = xs->dev;
955 	skb->priority = READ_ONCE(xs->sk.sk_priority);
956 	skb->mark = READ_ONCE(xs->sk.sk_mark);
957 	skb->destructor = xsk_destruct_skb;
958 	return 0;
959 }
960 
961 static void xsk_consume_skb(struct sk_buff *skb)
962 {
963 	struct xdp_sock *xs = xdp_sk(skb->sk);
964 	u32 num_descs = xsk_get_num_desc(skb);
965 	struct xsk_addrs *xsk_addr;
966 
967 	if (unlikely(!xsk_skb_destructor_is_addr(skb))) {
968 		xsk_addr = (struct xsk_addrs *)skb_shinfo(skb)->destructor_arg;
969 		kmem_cache_free(xsk_tx_generic_cache, xsk_addr);
970 	}
971 
972 	skb->destructor = sock_wfree;
973 	xsk_cq_cancel_locked(xs->pool, num_descs);
974 	/* Free skb without triggering the perf drop trace */
975 	consume_skb(skb);
976 	xs->skb = NULL;
977 }
978 
979 static void xsk_drop_skb(struct sk_buff *skb)
980 {
981 	struct xdp_sock *xs = xdp_sk(skb->sk);
982 
983 	xs->tx->invalid_descs += xsk_get_num_desc(skb);
984 	consume_skb(skb);
985 	xs->skb = NULL;
986 }
987 
988 static int xsk_skb_metadata(struct sk_buff *skb, void *buffer,
989 			    struct xdp_desc *desc, struct xsk_buff_pool *pool,
990 			    u32 hr)
991 {
992 	struct xsk_tx_metadata *meta = NULL;
993 	u16 csum_start, csum_offset;
994 	u64 flags;
995 
996 	if (unlikely(pool->tx_metadata_len == 0))
997 		return -EINVAL;
998 
999 	meta = buffer - pool->tx_metadata_len;
1000 	if (unlikely(!xsk_buff_valid_tx_metadata(pool, meta, &flags)))
1001 		return -EINVAL;
1002 
1003 	if (flags & XDP_TXMD_FLAGS_CHECKSUM) {
1004 		csum_start = READ_ONCE(meta->request.csum_start);
1005 		csum_offset = READ_ONCE(meta->request.csum_offset);
1006 
1007 		if (unlikely(csum_start + csum_offset +
1008 			     sizeof(__sum16) > desc->len))
1009 			return -EINVAL;
1010 
1011 		skb->csum_start = hr + csum_start;
1012 		skb->csum_offset = csum_offset;
1013 		skb->ip_summed = CHECKSUM_PARTIAL;
1014 
1015 		if (unlikely(pool->tx_sw_csum)) {
1016 			int err;
1017 
1018 			err = skb_checksum_help(skb);
1019 			if (err)
1020 				return err;
1021 		}
1022 	}
1023 
1024 	if (flags & XDP_TXMD_FLAGS_LAUNCH_TIME)
1025 		skb->skb_mstamp_ns = READ_ONCE(meta->request.launch_time);
1026 	if (!(flags & XDP_TXMD_FLAGS_TIMESTAMP))
1027 		meta = NULL;
1028 	xsk_tx_metadata_to_compl(meta, &skb_shinfo(skb)->xsk_meta);
1029 
1030 	return 0;
1031 }
1032 
1033 static struct sk_buff *xsk_build_skb_zerocopy(struct xdp_sock *xs,
1034 					      struct xdp_desc *desc)
1035 {
1036 	struct xsk_buff_pool *pool = xs->pool;
1037 	u32 hr, len, ts, offset, copy, copied;
1038 	struct sk_buff *skb = xs->skb;
1039 	struct page *page;
1040 	void *buffer;
1041 	int err, i;
1042 	u64 addr;
1043 
1044 	addr = desc->addr;
1045 	buffer = xsk_buff_raw_get_data(pool, addr);
1046 
1047 	if (!skb) {
1048 		hr = max(NET_SKB_PAD, L1_CACHE_ALIGN(xs->dev->needed_headroom));
1049 
1050 		skb = sock_alloc_send_skb(&xs->sk, hr, 1, &err);
1051 		if (unlikely(!skb))
1052 			return ERR_PTR(err);
1053 
1054 		skb_reserve(skb, hr);
1055 		if (desc->options & XDP_TX_METADATA) {
1056 			err = xsk_skb_metadata(skb, buffer, desc, pool, hr);
1057 			if (unlikely(err)) {
1058 				kfree_skb(skb);
1059 				return ERR_PTR(err);
1060 			}
1061 		}
1062 	} else {
1063 		struct xsk_addrs *xsk_addr;
1064 
1065 		xsk_addr = xsk_addrs_alloc(skb);
1066 		if (!xsk_addr)
1067 			return ERR_PTR(-ENOMEM);
1068 
1069 		/* in case of -EOVERFLOW that could happen below,
1070 		 * xsk_drop_skb() will release this node as whole skb
1071 		 * would be dropped, which implies freeing all list elements
1072 		 */
1073 		xsk_addr->addrs[xsk_addr->num_descs] = desc->addr;
1074 	}
1075 
1076 	len = desc->len;
1077 	ts = pool->unaligned ? len : pool->chunk_size;
1078 
1079 	offset = offset_in_page(buffer);
1080 	addr = buffer - pool->addrs;
1081 
1082 	for (copied = 0, i = skb_shinfo(skb)->nr_frags; copied < len; i++) {
1083 		if (unlikely(i >= MAX_SKB_FRAGS)) {
1084 			if (!xs->skb)
1085 				kfree_skb(skb);
1086 			return ERR_PTR(-EOVERFLOW);
1087 		}
1088 
1089 		page = pool->umem->pgs[addr >> PAGE_SHIFT];
1090 		get_page(page);
1091 
1092 		copy = min_t(u32, PAGE_SIZE - offset, len - copied);
1093 		skb_fill_page_desc(skb, i, page, offset, copy);
1094 
1095 		copied += copy;
1096 		addr += copy;
1097 		offset = 0;
1098 	}
1099 
1100 	skb->len += len;
1101 	skb->data_len += len;
1102 	skb->truesize += ts;
1103 
1104 	refcount_add(ts, &xs->sk.sk_wmem_alloc);
1105 
1106 	return skb;
1107 }
1108 
1109 static struct sk_buff *xsk_build_skb(struct xdp_sock *xs,
1110 				     struct xdp_desc *desc)
1111 {
1112 	struct net_device *dev = xs->dev;
1113 	struct sk_buff *skb = xs->skb;
1114 	int err;
1115 
1116 	if (dev->priv_flags & IFF_TX_SKB_NO_LINEAR) {
1117 		skb = xsk_build_skb_zerocopy(xs, desc);
1118 		if (IS_ERR(skb)) {
1119 			err = PTR_ERR(skb);
1120 			skb = NULL;
1121 			goto free_err;
1122 		}
1123 	} else {
1124 		u32 hr, tr, len;
1125 		void *buffer;
1126 
1127 		buffer = xsk_buff_raw_get_data(xs->pool, desc->addr);
1128 		len = desc->len;
1129 
1130 		if (!skb) {
1131 			hr = max(NET_SKB_PAD, L1_CACHE_ALIGN(dev->needed_headroom));
1132 			tr = dev->needed_tailroom;
1133 			skb = sock_alloc_send_skb(&xs->sk, hr + len + tr, 1, &err);
1134 			if (unlikely(!skb))
1135 				goto free_err;
1136 
1137 			skb_reserve(skb, hr);
1138 			skb_put(skb, len);
1139 
1140 			err = skb_store_bits(skb, 0, buffer, len);
1141 			if (unlikely(err))
1142 				goto free_err;
1143 
1144 			if (desc->options & XDP_TX_METADATA) {
1145 				err = xsk_skb_metadata(skb, buffer, desc,
1146 						       xs->pool, hr);
1147 				if (unlikely(err))
1148 					goto free_err;
1149 			}
1150 		} else {
1151 			int nr_frags = skb_shinfo(skb)->nr_frags;
1152 			struct xsk_addrs *xsk_addr;
1153 			struct page *page;
1154 			u8 *vaddr;
1155 
1156 			xsk_addr = xsk_addrs_alloc(skb);
1157 			if (!xsk_addr) {
1158 				err = -ENOMEM;
1159 				goto free_err;
1160 			}
1161 
1162 			xsk_addr->addrs[xsk_addr->num_descs] = desc->addr;
1163 
1164 			if (unlikely(nr_frags == (MAX_SKB_FRAGS - 1) && xp_mb_desc(desc))) {
1165 				err = -EOVERFLOW;
1166 				goto free_err;
1167 			}
1168 
1169 			page = alloc_page(xs->sk.sk_allocation);
1170 			if (unlikely(!page)) {
1171 				err = -EAGAIN;
1172 				goto free_err;
1173 			}
1174 
1175 			vaddr = kmap_local_page(page);
1176 			memcpy(vaddr, buffer, len);
1177 			kunmap_local(vaddr);
1178 
1179 			skb_add_rx_frag(skb, nr_frags, page, 0, len, PAGE_SIZE);
1180 			refcount_add(PAGE_SIZE, &xs->sk.sk_wmem_alloc);
1181 		}
1182 	}
1183 
1184 	if (!xs->skb) {
1185 		err = xsk_skb_init_misc(skb, xs, desc->addr);
1186 		if (unlikely(err))
1187 			goto free_err;
1188 	}
1189 	xsk_inc_num_desc(skb);
1190 
1191 	return skb;
1192 
1193 free_err:
1194 	if (skb && !xs->skb)
1195 		kfree_skb(skb);
1196 
1197 	if (err == -EOVERFLOW) {
1198 		if (xs->skb) {
1199 			/* Drop the packet */
1200 			xsk_inc_num_desc(xs->skb);
1201 			xsk_drop_skb(xs->skb);
1202 		} else {
1203 			xsk_cq_cancel_locked(xs->pool, 1);
1204 			xs->tx->invalid_descs++;
1205 		}
1206 		xskq_cons_release(xs->tx);
1207 	} else {
1208 		/* Let application retry */
1209 		xsk_cq_cancel_locked(xs->pool, 1);
1210 	}
1211 
1212 	return ERR_PTR(err);
1213 }
1214 
1215 static int __xsk_generic_xmit(struct sock *sk)
1216 {
1217 	struct xdp_sock *xs = xdp_sk(sk);
1218 	struct xdp_desc desc;
1219 	struct sk_buff *skb;
1220 	u32 cached_cons;
1221 	u32 max_batch;
1222 	int err = 0;
1223 
1224 	mutex_lock(&xs->mutex);
1225 	cached_cons = xs->tx->cached_cons;
1226 
1227 	/* Since we dropped the RCU read lock, the socket state might have changed. */
1228 	if (unlikely(!xsk_is_bound(xs))) {
1229 		err = -ENXIO;
1230 		goto out;
1231 	}
1232 
1233 	if (xs->queue_id >= xs->dev->real_num_tx_queues)
1234 		goto out;
1235 
1236 	max_batch = READ_ONCE(xs->max_tx_budget);
1237 	while (xskq_cons_peek_desc(xs->tx, &desc, xs->pool)) {
1238 		if (max_batch-- == 0) {
1239 			err = -EAGAIN;
1240 			goto out;
1241 		}
1242 
1243 		/* This is the backpressure mechanism for the Tx path.
1244 		 * Reserve space in the completion queue and only proceed
1245 		 * if there is space in it. This avoids having to implement
1246 		 * any buffering in the Tx path.
1247 		 */
1248 		err = xsk_cq_reserve_locked(xs->pool);
1249 		if (err) {
1250 			err = -EAGAIN;
1251 			goto out;
1252 		}
1253 
1254 		if (unlikely(xs->drain_cont)) {
1255 			xsk_cq_submit_addr_single_locked(xs->pool, &desc);
1256 			xs->tx->invalid_descs++;
1257 			xskq_cons_release(xs->tx);
1258 			xs->drain_cont = xp_mb_desc(&desc);
1259 			continue;
1260 		}
1261 
1262 		skb = xsk_build_skb(xs, &desc);
1263 		if (IS_ERR(skb)) {
1264 			err = PTR_ERR(skb);
1265 			if (err != -EOVERFLOW)
1266 				goto out;
1267 			if (xp_mb_desc(&desc))
1268 				xs->drain_cont = true;
1269 			err = 0;
1270 			continue;
1271 		}
1272 
1273 		xskq_cons_release(xs->tx);
1274 
1275 		if (xp_mb_desc(&desc)) {
1276 			xs->skb = skb;
1277 			continue;
1278 		}
1279 
1280 		err = __dev_direct_xmit(skb, xs->queue_id);
1281 		if  (err == NETDEV_TX_BUSY) {
1282 			/* Tell user-space to retry the send */
1283 			xskq_cons_cancel_n(xs->tx, xsk_get_num_desc(skb));
1284 			xsk_consume_skb(skb);
1285 			err = -EAGAIN;
1286 			goto out;
1287 		}
1288 
1289 		/* Ignore NET_XMIT_CN as packet might have been sent */
1290 		if (err == NET_XMIT_DROP) {
1291 			/* SKB completed but not sent */
1292 			err = -EBUSY;
1293 			xs->skb = NULL;
1294 			goto out;
1295 		}
1296 
1297 		xs->skb = NULL;
1298 	}
1299 
1300 	if (xskq_has_descs(xs->tx)) {
1301 		bool drain = xs->skb || xs->drain_cont || xp_mb_desc(&desc);
1302 
1303 		err = xsk_cq_reserve_locked(xs->pool);
1304 		if (err) {
1305 			xs->tx->invalid_descs--;
1306 			if (xs->skb)
1307 				xsk_drop_skb(xs->skb);
1308 			xs->drain_cont = drain;
1309 			err = -EAGAIN;
1310 			goto out;
1311 		}
1312 
1313 		if (xs->skb)
1314 			xsk_drop_skb(xs->skb);
1315 
1316 		xsk_cq_submit_addr_single_locked(xs->pool, &desc);
1317 
1318 		xskq_cons_release(xs->tx);
1319 		xs->drain_cont = xp_mb_desc(&desc);
1320 	}
1321 
1322 out:
1323 	if (xs->tx->cached_cons != cached_cons)
1324 		__xsk_tx_release(xs);
1325 
1326 	mutex_unlock(&xs->mutex);
1327 	return err;
1328 }
1329 
1330 static int xsk_generic_xmit(struct sock *sk)
1331 {
1332 	int ret;
1333 
1334 	/* Drop the RCU lock since the SKB path might sleep. */
1335 	rcu_read_unlock();
1336 	ret = __xsk_generic_xmit(sk);
1337 	/* Reaquire RCU lock before going into common code. */
1338 	rcu_read_lock();
1339 
1340 	return ret;
1341 }
1342 
1343 static bool xsk_no_wakeup(struct sock *sk)
1344 {
1345 #ifdef CONFIG_NET_RX_BUSY_POLL
1346 	/* Prefer busy-polling, skip the wakeup. */
1347 	return READ_ONCE(sk->sk_prefer_busy_poll) && READ_ONCE(sk->sk_ll_usec) &&
1348 		napi_id_valid(READ_ONCE(sk->sk_napi_id));
1349 #else
1350 	return false;
1351 #endif
1352 }
1353 
1354 static int xsk_check_common(struct xdp_sock *xs)
1355 {
1356 	if (unlikely(!xsk_is_bound(xs)))
1357 		return -ENXIO;
1358 	if (unlikely(!(xs->dev->flags & IFF_UP)))
1359 		return -ENETDOWN;
1360 
1361 	return 0;
1362 }
1363 
1364 static int __xsk_sendmsg(struct socket *sock, struct msghdr *m, size_t total_len)
1365 {
1366 	bool need_wait = !(m->msg_flags & MSG_DONTWAIT);
1367 	struct sock *sk = sock->sk;
1368 	struct xdp_sock *xs = xdp_sk(sk);
1369 	struct xsk_buff_pool *pool;
1370 	int err;
1371 
1372 	err = xsk_check_common(xs);
1373 	if (err)
1374 		return err;
1375 	if (unlikely(need_wait))
1376 		return -EOPNOTSUPP;
1377 	if (unlikely(!xs->tx))
1378 		return -ENOBUFS;
1379 
1380 	if (sk_can_busy_loop(sk))
1381 		sk_busy_loop(sk, 1); /* only support non-blocking sockets */
1382 
1383 	if (xs->zc && xsk_no_wakeup(sk))
1384 		return 0;
1385 
1386 	pool = xs->pool;
1387 	if (pool->cached_need_wakeup & XDP_WAKEUP_TX) {
1388 		if (xs->zc)
1389 			return xsk_wakeup(xs, XDP_WAKEUP_TX);
1390 		return xsk_generic_xmit(sk);
1391 	}
1392 	return 0;
1393 }
1394 
1395 static int xsk_sendmsg(struct socket *sock, struct msghdr *m, size_t total_len)
1396 {
1397 	int ret;
1398 
1399 	rcu_read_lock();
1400 	ret = __xsk_sendmsg(sock, m, total_len);
1401 	rcu_read_unlock();
1402 
1403 	return ret;
1404 }
1405 
1406 static int __xsk_recvmsg(struct socket *sock, struct msghdr *m, size_t len, int flags)
1407 {
1408 	bool need_wait = !(flags & MSG_DONTWAIT);
1409 	struct sock *sk = sock->sk;
1410 	struct xdp_sock *xs = xdp_sk(sk);
1411 	int err;
1412 
1413 	err = xsk_check_common(xs);
1414 	if (err)
1415 		return err;
1416 	if (unlikely(!xs->rx))
1417 		return -ENOBUFS;
1418 	if (unlikely(need_wait))
1419 		return -EOPNOTSUPP;
1420 
1421 	if (sk_can_busy_loop(sk))
1422 		sk_busy_loop(sk, 1); /* only support non-blocking sockets */
1423 
1424 	if (xsk_no_wakeup(sk))
1425 		return 0;
1426 
1427 	if (xs->pool->cached_need_wakeup & XDP_WAKEUP_RX && xs->zc)
1428 		return xsk_wakeup(xs, XDP_WAKEUP_RX);
1429 	return 0;
1430 }
1431 
1432 static int xsk_recvmsg(struct socket *sock, struct msghdr *m, size_t len, int flags)
1433 {
1434 	int ret;
1435 
1436 	rcu_read_lock();
1437 	ret = __xsk_recvmsg(sock, m, len, flags);
1438 	rcu_read_unlock();
1439 
1440 	return ret;
1441 }
1442 
1443 static __poll_t xsk_poll(struct file *file, struct socket *sock,
1444 			     struct poll_table_struct *wait)
1445 {
1446 	__poll_t mask = 0;
1447 	struct sock *sk = sock->sk;
1448 	struct xdp_sock *xs = xdp_sk(sk);
1449 	struct xsk_buff_pool *pool;
1450 
1451 	sock_poll_wait(file, sock, wait);
1452 
1453 	rcu_read_lock();
1454 	if (xsk_check_common(xs))
1455 		goto out;
1456 
1457 	pool = xs->pool;
1458 
1459 	if (pool->cached_need_wakeup) {
1460 		if (xs->zc)
1461 			xsk_wakeup(xs, pool->cached_need_wakeup);
1462 		else if (xs->tx)
1463 			/* Poll needs to drive Tx also in copy mode */
1464 			xsk_generic_xmit(sk);
1465 	}
1466 
1467 	if (xs->rx && !xskq_prod_is_empty(xs->rx))
1468 		mask |= EPOLLIN | EPOLLRDNORM;
1469 	if (xs->tx && xsk_tx_writeable(xs))
1470 		mask |= EPOLLOUT | EPOLLWRNORM;
1471 out:
1472 	rcu_read_unlock();
1473 	return mask;
1474 }
1475 
1476 static int xsk_init_queue(u32 entries, struct xsk_queue **queue,
1477 			  bool umem_queue)
1478 {
1479 	struct xsk_queue *q;
1480 
1481 	if (entries == 0 || *queue || !is_power_of_2(entries))
1482 		return -EINVAL;
1483 
1484 	q = xskq_create(entries, umem_queue);
1485 	if (!q)
1486 		return -ENOMEM;
1487 
1488 	/* Make sure queue is ready before it can be seen by others */
1489 	smp_wmb();
1490 	WRITE_ONCE(*queue, q);
1491 	return 0;
1492 }
1493 
1494 static void xsk_unbind_dev(struct xdp_sock *xs)
1495 {
1496 	struct net_device *dev = xs->dev;
1497 
1498 	if (xs->state != XSK_BOUND)
1499 		return;
1500 	WRITE_ONCE(xs->state, XSK_UNBOUND);
1501 
1502 	/* Wait for driver to stop using the xdp socket. */
1503 	xp_del_xsk(xs->pool, xs);
1504 	synchronize_net();
1505 	dev_put(dev);
1506 }
1507 
1508 static struct xsk_map *xsk_get_map_list_entry(struct xdp_sock *xs,
1509 					      struct xdp_sock __rcu ***map_entry)
1510 {
1511 	struct xsk_map *map = NULL;
1512 	struct xsk_map_node *node;
1513 
1514 	*map_entry = NULL;
1515 
1516 	spin_lock_bh(&xs->map_list_lock);
1517 	node = list_first_entry_or_null(&xs->map_list, struct xsk_map_node,
1518 					node);
1519 	if (node) {
1520 		bpf_map_inc(&node->map->map);
1521 		map = node->map;
1522 		*map_entry = node->map_entry;
1523 	}
1524 	spin_unlock_bh(&xs->map_list_lock);
1525 	return map;
1526 }
1527 
1528 static void xsk_delete_from_maps(struct xdp_sock *xs)
1529 {
1530 	/* This function removes the current XDP socket from all the
1531 	 * maps it resides in. We need to take extra care here, due to
1532 	 * the two locks involved. Each map has a lock synchronizing
1533 	 * updates to the entries, and each socket has a lock that
1534 	 * synchronizes access to the list of maps (map_list). For
1535 	 * deadlock avoidance the locks need to be taken in the order
1536 	 * "map lock"->"socket map list lock". We start off by
1537 	 * accessing the socket map list, and take a reference to the
1538 	 * map to guarantee existence between the
1539 	 * xsk_get_map_list_entry() and xsk_map_try_sock_delete()
1540 	 * calls. Then we ask the map to remove the socket, which
1541 	 * tries to remove the socket from the map. Note that there
1542 	 * might be updates to the map between
1543 	 * xsk_get_map_list_entry() and xsk_map_try_sock_delete().
1544 	 */
1545 	struct xdp_sock __rcu **map_entry = NULL;
1546 	struct xsk_map *map;
1547 
1548 	while ((map = xsk_get_map_list_entry(xs, &map_entry))) {
1549 		xsk_map_try_sock_delete(map, xs, map_entry);
1550 		bpf_map_put(&map->map);
1551 	}
1552 }
1553 
1554 static int xsk_release(struct socket *sock)
1555 {
1556 	struct sock *sk = sock->sk;
1557 	struct xdp_sock *xs = xdp_sk(sk);
1558 	struct net *net;
1559 
1560 	if (!sk)
1561 		return 0;
1562 
1563 	net = sock_net(sk);
1564 
1565 	if (xs->skb)
1566 		xsk_drop_skb(xs->skb);
1567 
1568 	mutex_lock(&net->xdp.lock);
1569 	sk_del_node_init_rcu(sk);
1570 	mutex_unlock(&net->xdp.lock);
1571 
1572 	sock_prot_inuse_add(net, sk->sk_prot, -1);
1573 
1574 	xsk_delete_from_maps(xs);
1575 	mutex_lock(&xs->mutex);
1576 	xsk_unbind_dev(xs);
1577 	mutex_unlock(&xs->mutex);
1578 
1579 	xskq_destroy(xs->rx);
1580 	xskq_destroy(xs->tx);
1581 	xskq_destroy(xs->fq_tmp);
1582 	xskq_destroy(xs->cq_tmp);
1583 
1584 	sock_orphan(sk);
1585 	sock->sk = NULL;
1586 
1587 	sock_put(sk);
1588 
1589 	return 0;
1590 }
1591 
1592 static struct socket *xsk_lookup_xsk_from_fd(int fd)
1593 {
1594 	struct socket *sock;
1595 	int err;
1596 
1597 	sock = sockfd_lookup(fd, &err);
1598 	if (!sock)
1599 		return ERR_PTR(-ENOTSOCK);
1600 
1601 	if (sock->sk->sk_family != PF_XDP) {
1602 		sockfd_put(sock);
1603 		return ERR_PTR(-ENOPROTOOPT);
1604 	}
1605 
1606 	return sock;
1607 }
1608 
1609 static bool xsk_validate_queues(struct xdp_sock *xs)
1610 {
1611 	return xs->fq_tmp && xs->cq_tmp;
1612 }
1613 
1614 static int xsk_bind(struct socket *sock, struct sockaddr_unsized *addr, int addr_len)
1615 {
1616 	struct sockaddr_xdp *sxdp = (struct sockaddr_xdp *)addr;
1617 	struct sock *sk = sock->sk;
1618 	struct xdp_sock *xs = xdp_sk(sk);
1619 	struct net_device *dev;
1620 	int bound_dev_if;
1621 	u32 flags, qid;
1622 	int err = 0;
1623 
1624 	if (addr_len < sizeof(struct sockaddr_xdp))
1625 		return -EINVAL;
1626 	if (sxdp->sxdp_family != AF_XDP)
1627 		return -EINVAL;
1628 
1629 	flags = sxdp->sxdp_flags;
1630 	if (flags & ~(XDP_SHARED_UMEM | XDP_COPY | XDP_ZEROCOPY |
1631 		      XDP_USE_NEED_WAKEUP | XDP_USE_SG))
1632 		return -EINVAL;
1633 
1634 	bound_dev_if = READ_ONCE(sk->sk_bound_dev_if);
1635 	if (bound_dev_if && bound_dev_if != sxdp->sxdp_ifindex)
1636 		return -EINVAL;
1637 
1638 	rtnl_lock();
1639 	mutex_lock(&xs->mutex);
1640 	if (xs->state != XSK_READY) {
1641 		err = -EBUSY;
1642 		goto out_release;
1643 	}
1644 
1645 	dev = dev_get_by_index(sock_net(sk), sxdp->sxdp_ifindex);
1646 	if (!dev) {
1647 		err = -ENODEV;
1648 		goto out_release;
1649 	}
1650 
1651 	netdev_lock_ops(dev);
1652 
1653 	if (!xs->rx && !xs->tx) {
1654 		err = -EINVAL;
1655 		goto out_unlock;
1656 	}
1657 
1658 	qid = sxdp->sxdp_queue_id;
1659 
1660 	if (flags & XDP_SHARED_UMEM) {
1661 		struct xdp_sock *umem_xs;
1662 		struct socket *sock;
1663 
1664 		if ((flags & XDP_COPY) || (flags & XDP_ZEROCOPY) ||
1665 		    (flags & XDP_USE_NEED_WAKEUP) || (flags & XDP_USE_SG)) {
1666 			/* Cannot specify flags for shared sockets. */
1667 			err = -EINVAL;
1668 			goto out_unlock;
1669 		}
1670 
1671 		if (xs->umem) {
1672 			/* We have already our own. */
1673 			err = -EINVAL;
1674 			goto out_unlock;
1675 		}
1676 
1677 		sock = xsk_lookup_xsk_from_fd(sxdp->sxdp_shared_umem_fd);
1678 		if (IS_ERR(sock)) {
1679 			err = PTR_ERR(sock);
1680 			goto out_unlock;
1681 		}
1682 
1683 		umem_xs = xdp_sk(sock->sk);
1684 		if (!xsk_is_bound(umem_xs)) {
1685 			err = -EBADF;
1686 			sockfd_put(sock);
1687 			goto out_unlock;
1688 		}
1689 
1690 		if (umem_xs->queue_id != qid || umem_xs->dev != dev) {
1691 			/* One fill and completion ring required for each queue id. */
1692 			if (!xsk_validate_queues(xs)) {
1693 				err = -EINVAL;
1694 				sockfd_put(sock);
1695 				goto out_unlock;
1696 			}
1697 
1698 			/* Share the umem with another socket on another qid
1699 			 * and/or device.
1700 			 */
1701 			xs->pool = xp_create_and_assign_umem(xs,
1702 							     umem_xs->umem,
1703 							     dev->xdp_zc_max_segs);
1704 			if (!xs->pool) {
1705 				err = -ENOMEM;
1706 				sockfd_put(sock);
1707 				goto out_unlock;
1708 			}
1709 
1710 			err = xp_assign_dev_shared(xs->pool, umem_xs, dev,
1711 						   qid);
1712 			if (err) {
1713 				xp_destroy(xs->pool);
1714 				xs->pool = NULL;
1715 				sockfd_put(sock);
1716 				goto out_unlock;
1717 			}
1718 		} else {
1719 			/* Share the buffer pool with the other socket. */
1720 			if (xs->fq_tmp || xs->cq_tmp) {
1721 				/* Do not allow setting your own fq or cq. */
1722 				err = -EINVAL;
1723 				sockfd_put(sock);
1724 				goto out_unlock;
1725 			}
1726 
1727 			xp_get_pool(umem_xs->pool);
1728 			xs->pool = umem_xs->pool;
1729 
1730 			/* If underlying shared umem was created without Tx
1731 			 * ring, allocate Tx descs array that Tx batching API
1732 			 * utilizes
1733 			 */
1734 			if (xs->tx && !xs->pool->tx_descs) {
1735 				err = xp_alloc_tx_descs(xs->pool, xs,
1736 							dev->xdp_zc_max_segs);
1737 				if (err) {
1738 					xp_put_pool(xs->pool);
1739 					xs->pool = NULL;
1740 					sockfd_put(sock);
1741 					goto out_unlock;
1742 				}
1743 			}
1744 		}
1745 
1746 		xdp_get_umem(umem_xs->umem);
1747 		WRITE_ONCE(xs->umem, umem_xs->umem);
1748 		sockfd_put(sock);
1749 	} else if (!xs->umem || !xsk_validate_queues(xs)) {
1750 		err = -EINVAL;
1751 		goto out_unlock;
1752 	} else {
1753 		/* This xsk has its own umem. */
1754 		xs->pool = xp_create_and_assign_umem(xs, xs->umem,
1755 						     dev->xdp_zc_max_segs);
1756 
1757 		if (!xs->pool) {
1758 			err = -ENOMEM;
1759 			goto out_unlock;
1760 		}
1761 
1762 		err = xp_assign_dev(xs->pool, dev, qid, flags);
1763 		if (err) {
1764 			xp_destroy(xs->pool);
1765 			xs->pool = NULL;
1766 			goto out_unlock;
1767 		}
1768 	}
1769 
1770 	/* FQ and CQ are now owned by the buffer pool and cleaned up with it. */
1771 	xs->fq_tmp = NULL;
1772 	xs->cq_tmp = NULL;
1773 
1774 	xs->dev = dev;
1775 	xs->zc = xs->umem->zc;
1776 	xs->sg = !!(xs->umem->flags & XDP_UMEM_SG_FLAG);
1777 	xs->queue_id = qid;
1778 	xp_add_xsk(xs->pool, xs);
1779 
1780 	if (qid < dev->real_num_rx_queues) {
1781 		struct netdev_rx_queue *rxq;
1782 
1783 		rxq = __netif_get_rx_queue(dev, qid);
1784 		if (rxq->napi)
1785 			__sk_mark_napi_id_once(sk, rxq->napi->napi_id);
1786 	}
1787 
1788 out_unlock:
1789 	if (err) {
1790 		dev_put(dev);
1791 	} else {
1792 		/* Matches smp_rmb() in bind() for shared umem
1793 		 * sockets, and xsk_is_bound().
1794 		 */
1795 		smp_wmb();
1796 		WRITE_ONCE(xs->state, XSK_BOUND);
1797 	}
1798 	netdev_unlock_ops(dev);
1799 out_release:
1800 	mutex_unlock(&xs->mutex);
1801 	rtnl_unlock();
1802 	return err;
1803 }
1804 
1805 struct xdp_umem_reg_v1 {
1806 	__u64 addr; /* Start of packet data area */
1807 	__u64 len; /* Length of packet data area */
1808 	__u32 chunk_size;
1809 	__u32 headroom;
1810 };
1811 
1812 static int xsk_setsockopt(struct socket *sock, int level, int optname,
1813 			  sockptr_t optval, unsigned int optlen)
1814 {
1815 	struct sock *sk = sock->sk;
1816 	struct xdp_sock *xs = xdp_sk(sk);
1817 	int err;
1818 
1819 	if (level != SOL_XDP)
1820 		return -ENOPROTOOPT;
1821 
1822 	switch (optname) {
1823 	case XDP_RX_RING:
1824 	case XDP_TX_RING:
1825 	{
1826 		struct xsk_queue **q;
1827 		int entries;
1828 
1829 		if (optlen < sizeof(entries))
1830 			return -EINVAL;
1831 		if (copy_from_sockptr(&entries, optval, sizeof(entries)))
1832 			return -EFAULT;
1833 
1834 		mutex_lock(&xs->mutex);
1835 		if (xs->state != XSK_READY) {
1836 			mutex_unlock(&xs->mutex);
1837 			return -EBUSY;
1838 		}
1839 		q = (optname == XDP_TX_RING) ? &xs->tx : &xs->rx;
1840 		err = xsk_init_queue(entries, q, false);
1841 		if (!err && optname == XDP_TX_RING)
1842 			/* Tx needs to be explicitly woken up the first time */
1843 			xs->tx->ring->flags |= XDP_RING_NEED_WAKEUP;
1844 		mutex_unlock(&xs->mutex);
1845 		return err;
1846 	}
1847 	case XDP_UMEM_REG:
1848 	{
1849 		size_t mr_size = sizeof(struct xdp_umem_reg);
1850 		struct xdp_umem_reg mr = {};
1851 		struct xdp_umem *umem;
1852 
1853 		if (optlen < sizeof(struct xdp_umem_reg_v1))
1854 			return -EINVAL;
1855 		else if (optlen < sizeof(mr))
1856 			mr_size = sizeof(struct xdp_umem_reg_v1);
1857 
1858 		BUILD_BUG_ON(sizeof(struct xdp_umem_reg_v1) >= sizeof(struct xdp_umem_reg));
1859 
1860 		/* Make sure the last field of the struct doesn't have
1861 		 * uninitialized padding. All padding has to be explicit
1862 		 * and has to be set to zero by the userspace to make
1863 		 * struct xdp_umem_reg extensible in the future.
1864 		 */
1865 		BUILD_BUG_ON(offsetof(struct xdp_umem_reg, tx_metadata_len) +
1866 			     sizeof_field(struct xdp_umem_reg, tx_metadata_len) !=
1867 			     sizeof(struct xdp_umem_reg));
1868 
1869 		if (copy_from_sockptr(&mr, optval, mr_size))
1870 			return -EFAULT;
1871 
1872 		mutex_lock(&xs->mutex);
1873 		if (xs->state != XSK_READY || xs->umem) {
1874 			mutex_unlock(&xs->mutex);
1875 			return -EBUSY;
1876 		}
1877 
1878 		umem = xdp_umem_create(&mr);
1879 		if (IS_ERR(umem)) {
1880 			mutex_unlock(&xs->mutex);
1881 			return PTR_ERR(umem);
1882 		}
1883 
1884 		/* Make sure umem is ready before it can be seen by others */
1885 		smp_wmb();
1886 		WRITE_ONCE(xs->umem, umem);
1887 		mutex_unlock(&xs->mutex);
1888 		return 0;
1889 	}
1890 	case XDP_UMEM_FILL_RING:
1891 	case XDP_UMEM_COMPLETION_RING:
1892 	{
1893 		struct xsk_queue **q;
1894 		int entries;
1895 
1896 		if (optlen < sizeof(entries))
1897 			return -EINVAL;
1898 		if (copy_from_sockptr(&entries, optval, sizeof(entries)))
1899 			return -EFAULT;
1900 
1901 		mutex_lock(&xs->mutex);
1902 		if (xs->state != XSK_READY) {
1903 			mutex_unlock(&xs->mutex);
1904 			return -EBUSY;
1905 		}
1906 
1907 		q = (optname == XDP_UMEM_FILL_RING) ? &xs->fq_tmp :
1908 			&xs->cq_tmp;
1909 		err = xsk_init_queue(entries, q, true);
1910 		mutex_unlock(&xs->mutex);
1911 		return err;
1912 	}
1913 	case XDP_MAX_TX_SKB_BUDGET:
1914 	{
1915 		unsigned int budget;
1916 
1917 		if (optlen != sizeof(budget))
1918 			return -EINVAL;
1919 		if (copy_from_sockptr(&budget, optval, sizeof(budget)))
1920 			return -EFAULT;
1921 		if (!xs->tx ||
1922 		    budget < TX_BATCH_SIZE || budget > xs->tx->nentries)
1923 			return -EACCES;
1924 
1925 		WRITE_ONCE(xs->max_tx_budget, budget);
1926 		return 0;
1927 	}
1928 	default:
1929 		break;
1930 	}
1931 
1932 	return -ENOPROTOOPT;
1933 }
1934 
1935 static void xsk_enter_rxtx_offsets(struct xdp_ring_offset_v1 *ring)
1936 {
1937 	ring->producer = offsetof(struct xdp_rxtx_ring, ptrs.producer);
1938 	ring->consumer = offsetof(struct xdp_rxtx_ring, ptrs.consumer);
1939 	ring->desc = offsetof(struct xdp_rxtx_ring, desc);
1940 }
1941 
1942 static void xsk_enter_umem_offsets(struct xdp_ring_offset_v1 *ring)
1943 {
1944 	ring->producer = offsetof(struct xdp_umem_ring, ptrs.producer);
1945 	ring->consumer = offsetof(struct xdp_umem_ring, ptrs.consumer);
1946 	ring->desc = offsetof(struct xdp_umem_ring, desc);
1947 }
1948 
1949 struct xdp_statistics_v1 {
1950 	__u64 rx_dropped;
1951 	__u64 rx_invalid_descs;
1952 	__u64 tx_invalid_descs;
1953 };
1954 
1955 static int xsk_getsockopt(struct socket *sock, int level, int optname,
1956 			  sockopt_t *opt)
1957 {
1958 	struct sock *sk = sock->sk;
1959 	struct xdp_sock *xs = xdp_sk(sk);
1960 	int len;
1961 
1962 	if (level != SOL_XDP)
1963 		return -ENOPROTOOPT;
1964 
1965 	len = opt->optlen;
1966 	if (len < 0)
1967 		return -EINVAL;
1968 
1969 	switch (optname) {
1970 	case XDP_STATISTICS:
1971 	{
1972 		struct xdp_statistics stats = {};
1973 		bool extra_stats = true;
1974 		size_t stats_size;
1975 
1976 		if (len < sizeof(struct xdp_statistics_v1)) {
1977 			return -EINVAL;
1978 		} else if (len < sizeof(stats)) {
1979 			extra_stats = false;
1980 			stats_size = sizeof(struct xdp_statistics_v1);
1981 		} else {
1982 			stats_size = sizeof(stats);
1983 		}
1984 
1985 		mutex_lock(&xs->mutex);
1986 		stats.rx_dropped = xs->rx_dropped;
1987 		if (extra_stats) {
1988 			stats.rx_ring_full = xs->rx_queue_full;
1989 			stats.rx_fill_ring_empty_descs =
1990 				xs->pool ? xskq_nb_queue_empty_descs(xs->pool->fq) : 0;
1991 			stats.tx_ring_empty_descs = xskq_nb_queue_empty_descs(xs->tx);
1992 		} else {
1993 			stats.rx_dropped += xs->rx_queue_full;
1994 		}
1995 		stats.rx_invalid_descs = xskq_nb_invalid_descs(xs->rx);
1996 		stats.tx_invalid_descs = xskq_nb_invalid_descs(xs->tx);
1997 		mutex_unlock(&xs->mutex);
1998 
1999 		if (copy_to_iter(&stats, stats_size, &opt->iter_out) !=
2000 		    stats_size)
2001 			return -EFAULT;
2002 		opt->optlen = stats_size;
2003 
2004 		return 0;
2005 	}
2006 	case XDP_MMAP_OFFSETS:
2007 	{
2008 		struct xdp_mmap_offsets off;
2009 		struct xdp_mmap_offsets_v1 off_v1;
2010 		bool flags_supported = true;
2011 		void *to_copy;
2012 
2013 		if (len < sizeof(off_v1))
2014 			return -EINVAL;
2015 		else if (len < sizeof(off))
2016 			flags_supported = false;
2017 
2018 		if (flags_supported) {
2019 			/* xdp_ring_offset is identical to xdp_ring_offset_v1
2020 			 * except for the flags field added to the end.
2021 			 */
2022 			xsk_enter_rxtx_offsets((struct xdp_ring_offset_v1 *)
2023 					       &off.rx);
2024 			xsk_enter_rxtx_offsets((struct xdp_ring_offset_v1 *)
2025 					       &off.tx);
2026 			xsk_enter_umem_offsets((struct xdp_ring_offset_v1 *)
2027 					       &off.fr);
2028 			xsk_enter_umem_offsets((struct xdp_ring_offset_v1 *)
2029 					       &off.cr);
2030 			off.rx.flags = offsetof(struct xdp_rxtx_ring,
2031 						ptrs.flags);
2032 			off.tx.flags = offsetof(struct xdp_rxtx_ring,
2033 						ptrs.flags);
2034 			off.fr.flags = offsetof(struct xdp_umem_ring,
2035 						ptrs.flags);
2036 			off.cr.flags = offsetof(struct xdp_umem_ring,
2037 						ptrs.flags);
2038 
2039 			len = sizeof(off);
2040 			to_copy = &off;
2041 		} else {
2042 			xsk_enter_rxtx_offsets(&off_v1.rx);
2043 			xsk_enter_rxtx_offsets(&off_v1.tx);
2044 			xsk_enter_umem_offsets(&off_v1.fr);
2045 			xsk_enter_umem_offsets(&off_v1.cr);
2046 
2047 			len = sizeof(off_v1);
2048 			to_copy = &off_v1;
2049 		}
2050 
2051 		if (copy_to_iter(to_copy, len, &opt->iter_out) != len)
2052 			return -EFAULT;
2053 		opt->optlen = len;
2054 
2055 		return 0;
2056 	}
2057 	case XDP_OPTIONS:
2058 	{
2059 		struct xdp_options opts = {};
2060 
2061 		if (len < sizeof(opts))
2062 			return -EINVAL;
2063 
2064 		mutex_lock(&xs->mutex);
2065 		if (xs->zc)
2066 			opts.flags |= XDP_OPTIONS_ZEROCOPY;
2067 		mutex_unlock(&xs->mutex);
2068 
2069 		len = sizeof(opts);
2070 		if (copy_to_iter(&opts, len, &opt->iter_out) != len)
2071 			return -EFAULT;
2072 		opt->optlen = len;
2073 
2074 		return 0;
2075 	}
2076 	default:
2077 		break;
2078 	}
2079 
2080 	return -EOPNOTSUPP;
2081 }
2082 
2083 static int xsk_mmap(struct file *file, struct socket *sock,
2084 		    struct vm_area_struct *vma)
2085 {
2086 	loff_t offset = (loff_t)vma->vm_pgoff << PAGE_SHIFT;
2087 	unsigned long size = vma->vm_end - vma->vm_start;
2088 	struct xdp_sock *xs = xdp_sk(sock->sk);
2089 	int state = READ_ONCE(xs->state);
2090 	struct xsk_queue *q = NULL;
2091 
2092 	if (state != XSK_READY && state != XSK_BOUND)
2093 		return -EBUSY;
2094 
2095 	if (offset == XDP_PGOFF_RX_RING) {
2096 		q = READ_ONCE(xs->rx);
2097 	} else if (offset == XDP_PGOFF_TX_RING) {
2098 		q = READ_ONCE(xs->tx);
2099 	} else {
2100 		/* Matches the smp_wmb() in XDP_UMEM_REG */
2101 		smp_rmb();
2102 		if (offset == XDP_UMEM_PGOFF_FILL_RING)
2103 			q = state == XSK_READY ? READ_ONCE(xs->fq_tmp) :
2104 						 READ_ONCE(xs->pool->fq);
2105 		else if (offset == XDP_UMEM_PGOFF_COMPLETION_RING)
2106 			q = state == XSK_READY ? READ_ONCE(xs->cq_tmp) :
2107 						 READ_ONCE(xs->pool->cq);
2108 	}
2109 
2110 	if (!q)
2111 		return -EINVAL;
2112 
2113 	/* Matches the smp_wmb() in xsk_init_queue */
2114 	smp_rmb();
2115 	if (size > q->ring_vmalloc_size)
2116 		return -EINVAL;
2117 
2118 	return remap_vmalloc_range(vma, q->ring, 0);
2119 }
2120 
2121 static int xsk_notifier(struct notifier_block *this,
2122 			unsigned long msg, void *ptr)
2123 {
2124 	struct net_device *dev = netdev_notifier_info_to_dev(ptr);
2125 	struct net *net = dev_net(dev);
2126 	struct sock *sk;
2127 
2128 	switch (msg) {
2129 	case NETDEV_UNREGISTER:
2130 		mutex_lock(&net->xdp.lock);
2131 		sk_for_each(sk, &net->xdp.list) {
2132 			struct xdp_sock *xs = xdp_sk(sk);
2133 
2134 			mutex_lock(&xs->mutex);
2135 			if (xs->dev == dev) {
2136 				sk->sk_err = ENETDOWN;
2137 				if (!sock_flag(sk, SOCK_DEAD))
2138 					sk_error_report(sk);
2139 
2140 				xsk_unbind_dev(xs);
2141 
2142 				/* Clear device references. */
2143 				xp_clear_dev(xs->pool);
2144 			}
2145 			mutex_unlock(&xs->mutex);
2146 		}
2147 		mutex_unlock(&net->xdp.lock);
2148 		break;
2149 	}
2150 	return NOTIFY_DONE;
2151 }
2152 
2153 static struct proto xsk_proto = {
2154 	.name =		"XDP",
2155 	.owner =	THIS_MODULE,
2156 	.obj_size =	sizeof(struct xdp_sock),
2157 };
2158 
2159 static const struct proto_ops xsk_proto_ops = {
2160 	.family		= PF_XDP,
2161 	.owner		= THIS_MODULE,
2162 	.release	= xsk_release,
2163 	.bind		= xsk_bind,
2164 	.connect	= sock_no_connect,
2165 	.socketpair	= sock_no_socketpair,
2166 	.accept		= sock_no_accept,
2167 	.getname	= sock_no_getname,
2168 	.poll		= xsk_poll,
2169 	.ioctl		= sock_no_ioctl,
2170 	.listen		= sock_no_listen,
2171 	.shutdown	= sock_no_shutdown,
2172 	.setsockopt	= xsk_setsockopt,
2173 	.getsockopt_iter = xsk_getsockopt,
2174 	.sendmsg	= xsk_sendmsg,
2175 	.recvmsg	= xsk_recvmsg,
2176 	.mmap		= xsk_mmap,
2177 };
2178 
2179 static void xsk_destruct(struct sock *sk)
2180 {
2181 	struct xdp_sock *xs = xdp_sk(sk);
2182 
2183 	if (!sock_flag(sk, SOCK_DEAD))
2184 		return;
2185 
2186 	if (!xp_put_pool(xs->pool))
2187 		xdp_put_umem(xs->umem, !xs->pool);
2188 }
2189 
2190 static int xsk_create(struct net *net, struct socket *sock, int protocol,
2191 		      int kern)
2192 {
2193 	struct xdp_sock *xs;
2194 	struct sock *sk;
2195 
2196 	if (!ns_capable(net->user_ns, CAP_NET_RAW))
2197 		return -EPERM;
2198 	if (sock->type != SOCK_RAW)
2199 		return -ESOCKTNOSUPPORT;
2200 
2201 	if (protocol)
2202 		return -EPROTONOSUPPORT;
2203 
2204 	sock->state = SS_UNCONNECTED;
2205 
2206 	sk = sk_alloc(net, PF_XDP, GFP_KERNEL, &xsk_proto, kern);
2207 	if (!sk)
2208 		return -ENOBUFS;
2209 
2210 	sock->ops = &xsk_proto_ops;
2211 
2212 	sock_init_data(sock, sk);
2213 
2214 	sk->sk_family = PF_XDP;
2215 
2216 	sk->sk_destruct = xsk_destruct;
2217 
2218 	sock_set_flag(sk, SOCK_RCU_FREE);
2219 
2220 	xs = xdp_sk(sk);
2221 	xs->state = XSK_READY;
2222 	xs->max_tx_budget = TX_BATCH_SIZE;
2223 	mutex_init(&xs->mutex);
2224 
2225 	INIT_LIST_HEAD(&xs->map_list);
2226 	spin_lock_init(&xs->map_list_lock);
2227 
2228 	mutex_lock(&net->xdp.lock);
2229 	sk_add_node_rcu(sk, &net->xdp.list);
2230 	mutex_unlock(&net->xdp.lock);
2231 
2232 	sock_prot_inuse_add(net, &xsk_proto, 1);
2233 
2234 	return 0;
2235 }
2236 
2237 static const struct net_proto_family xsk_family_ops = {
2238 	.family = PF_XDP,
2239 	.create = xsk_create,
2240 	.owner	= THIS_MODULE,
2241 };
2242 
2243 static struct notifier_block xsk_netdev_notifier = {
2244 	.notifier_call	= xsk_notifier,
2245 };
2246 
2247 static int __net_init xsk_net_init(struct net *net)
2248 {
2249 	mutex_init(&net->xdp.lock);
2250 	INIT_HLIST_HEAD(&net->xdp.list);
2251 	return 0;
2252 }
2253 
2254 static void __net_exit xsk_net_exit(struct net *net)
2255 {
2256 	WARN_ON_ONCE(!hlist_empty(&net->xdp.list));
2257 }
2258 
2259 static struct pernet_operations xsk_net_ops = {
2260 	.init = xsk_net_init,
2261 	.exit = xsk_net_exit,
2262 };
2263 
2264 static int __init xsk_init(void)
2265 {
2266 	int err;
2267 
2268 	err = proto_register(&xsk_proto, 0 /* no slab */);
2269 	if (err)
2270 		goto out;
2271 
2272 	err = sock_register(&xsk_family_ops);
2273 	if (err)
2274 		goto out_proto;
2275 
2276 	err = register_pernet_subsys(&xsk_net_ops);
2277 	if (err)
2278 		goto out_sk;
2279 
2280 	err = register_netdevice_notifier(&xsk_netdev_notifier);
2281 	if (err)
2282 		goto out_pernet;
2283 
2284 	xsk_tx_generic_cache = kmem_cache_create("xsk_generic_xmit_cache",
2285 						 sizeof(struct xsk_addrs),
2286 						 0, SLAB_HWCACHE_ALIGN, NULL);
2287 	if (!xsk_tx_generic_cache) {
2288 		err = -ENOMEM;
2289 		goto out_unreg_notif;
2290 	}
2291 
2292 	return 0;
2293 
2294 out_unreg_notif:
2295 	unregister_netdevice_notifier(&xsk_netdev_notifier);
2296 out_pernet:
2297 	unregister_pernet_subsys(&xsk_net_ops);
2298 out_sk:
2299 	sock_unregister(PF_XDP);
2300 out_proto:
2301 	proto_unregister(&xsk_proto);
2302 out:
2303 	return err;
2304 }
2305 
2306 fs_initcall(xsk_init);
2307