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