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