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, *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, ©_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
xsk_tx_writeable(struct xdp_sock * xs)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
__xsk_tx_release(struct xdp_sock * xs)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
xsk_is_bound(struct xdp_sock * xs)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
xsk_dev_queue_valid(const struct xdp_sock * xs,const struct xdp_rxq_info * info)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
xsk_rcv_check(struct xdp_sock * xs,struct xdp_buff * xdp,u32 len)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
xsk_flush(struct xdp_sock * xs)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
xsk_generic_rcv(struct xdp_sock * xs,struct xdp_buff * xdp)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
xsk_rcv(struct xdp_sock * xs,struct xdp_buff * xdp)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
__xsk_map_redirect(struct xdp_sock * xs,struct xdp_buff * xdp)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
__xsk_map_flush(struct list_head * flush_list)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
xsk_tx_completed(struct xsk_buff_pool * pool,u32 nb_entries)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
xsk_tx_release(struct xsk_buff_pool * pool)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
xsk_tx_peek_desc(struct xsk_buff_pool * pool,struct xdp_desc * desc)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
xsk_tx_peek_release_fallback(struct xsk_buff_pool * pool,u32 max_entries)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
xsk_tx_commit_batch(struct xsk_buff_pool * pool,struct xsk_tx_batch * batch)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
__xsk_tx_peek_release_desc_batch(struct xsk_buff_pool * pool,struct xdp_sock * xs,struct xdp_desc * descs,u32 max_descs)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
xsk_tx_peek_release_shared_desc_batch(struct xsk_buff_pool * pool,u32 max_descs)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
xsk_tx_peek_release_desc_batch(struct xsk_buff_pool * pool,u32 nb_pkts)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
xsk_wakeup(struct xdp_sock * xs,u8 flags)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
xsk_cq_reserve_locked(struct xsk_buff_pool * pool)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
xsk_skb_destructor_is_addr(struct sk_buff * skb)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
xsk_skb_destructor_get_addr(struct sk_buff * skb)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
__xsk_addrs_alloc(struct sk_buff * skb,u64 addr)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
xsk_addrs_alloc(struct sk_buff * skb)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
xsk_skb_destructor_set_addr(struct sk_buff * skb,u64 addr)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
xsk_inc_num_desc(struct sk_buff * skb)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
xsk_get_num_desc(struct sk_buff * skb)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
xsk_cq_submit_addr_locked(struct xsk_buff_pool * pool,struct sk_buff * skb)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
xsk_cq_submit_addr_single_locked(struct xsk_buff_pool * pool,struct xdp_desc * desc)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
xsk_cq_cancel_locked(struct xsk_buff_pool * pool,u32 n)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
xsk_destruct_skb(struct sk_buff * skb)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
xsk_skb_init_misc(struct sk_buff * skb,struct xdp_sock * xs,u64 addr)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
xsk_consume_skb(struct sk_buff * skb)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
xsk_drop_skb(struct sk_buff * skb)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
xsk_skb_metadata(struct sk_buff * skb,void * buffer,struct xdp_desc * desc,struct xsk_buff_pool * pool,u32 hr)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
xsk_build_skb_zerocopy(struct xdp_sock * xs,struct xdp_desc * desc)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
xsk_build_skb(struct xdp_sock * xs,struct xdp_desc * desc)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
__xsk_generic_xmit(struct sock * sk)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
xsk_generic_xmit(struct sock * sk)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
xsk_no_wakeup(struct sock * sk)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
xsk_check_common(struct xdp_sock * xs)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
__xsk_sendmsg(struct socket * sock,struct msghdr * m,size_t total_len)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
xsk_sendmsg(struct socket * sock,struct msghdr * m,size_t total_len)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
__xsk_recvmsg(struct socket * sock,struct msghdr * m,size_t len,int flags)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
xsk_recvmsg(struct socket * sock,struct msghdr * m,size_t len,int flags)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
xsk_poll(struct file * file,struct socket * sock,struct poll_table_struct * wait)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
xsk_init_queue(u32 entries,struct xsk_queue ** queue,bool umem_queue)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
xsk_unbind_dev(struct xdp_sock * xs)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
xsk_get_map_list_entry(struct xdp_sock * xs,struct xdp_sock __rcu *** map_entry)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
xsk_delete_from_maps(struct xdp_sock * xs)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
xsk_release(struct socket * sock)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
xsk_lookup_xsk_from_fd(int fd)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
xsk_validate_queues(struct xdp_sock * xs)1609 static bool xsk_validate_queues(struct xdp_sock *xs)
1610 {
1611 return xs->fq_tmp && xs->cq_tmp;
1612 }
1613
xsk_bind(struct socket * sock,struct sockaddr_unsized * addr,int addr_len)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
xsk_setsockopt(struct socket * sock,int level,int optname,sockptr_t optval,unsigned int optlen)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
xsk_enter_rxtx_offsets(struct xdp_ring_offset_v1 * ring)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
xsk_enter_umem_offsets(struct xdp_ring_offset_v1 * ring)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
xsk_getsockopt(struct socket * sock,int level,int optname,sockopt_t * opt)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
xsk_mmap(struct file * file,struct socket * sock,struct vm_area_struct * vma)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
xsk_notifier(struct notifier_block * this,unsigned long msg,void * ptr)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
xsk_destruct(struct sock * sk)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
xsk_create(struct net * net,struct socket * sock,int protocol,int kern)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
xsk_net_init(struct net * net)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
xsk_net_exit(struct net * net)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
xsk_init(void)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