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