1 /* 2 * Network-device interface management. 3 * 4 * Copyright (c) 2004-2005, Keir Fraser 5 * 6 * This program is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU General Public License version 2 8 * as published by the Free Software Foundation; or, when distributed 9 * separately from the Linux kernel or incorporated into other 10 * software packages, subject to the following license: 11 * 12 * Permission is hereby granted, free of charge, to any person obtaining a copy 13 * of this source file (the "Software"), to deal in the Software without 14 * restriction, including without limitation the rights to use, copy, modify, 15 * merge, publish, distribute, sublicense, and/or sell copies of the Software, 16 * and to permit persons to whom the Software is furnished to do so, subject to 17 * the following conditions: 18 * 19 * The above copyright notice and this permission notice shall be included in 20 * all copies or substantial portions of the Software. 21 * 22 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 23 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 24 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 25 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 26 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 27 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 28 * IN THE SOFTWARE. 29 */ 30 31 #include "common.h" 32 33 #include <linux/kthread.h> 34 #include <linux/sched/task.h> 35 #include <linux/ethtool.h> 36 #include <linux/rtnetlink.h> 37 #include <linux/if_vlan.h> 38 #include <linux/vmalloc.h> 39 40 #include <xen/events.h> 41 #include <asm/xen/hypercall.h> 42 #include <xen/balloon.h> 43 44 #define XENVIF_QUEUE_LENGTH 32 45 #define XENVIF_NAPI_WEIGHT 64 46 47 /* Number of bytes allowed on the internal guest Rx queue. */ 48 #define XENVIF_RX_QUEUE_BYTES (XEN_NETIF_RX_RING_SIZE/2 * PAGE_SIZE) 49 50 /* This function is used to set SKBTX_DEV_ZEROCOPY as well as 51 * increasing the inflight counter. We need to increase the inflight 52 * counter because core driver calls into xenvif_zerocopy_callback 53 * which calls xenvif_skb_zerocopy_complete. 54 */ 55 void xenvif_skb_zerocopy_prepare(struct xenvif_queue *queue, 56 struct sk_buff *skb) 57 { 58 skb_shinfo(skb)->tx_flags |= SKBTX_DEV_ZEROCOPY; 59 atomic_inc(&queue->inflight_packets); 60 } 61 62 void xenvif_skb_zerocopy_complete(struct xenvif_queue *queue) 63 { 64 atomic_dec(&queue->inflight_packets); 65 66 /* Wake the dealloc thread _after_ decrementing inflight_packets so 67 * that if kthread_stop() has already been called, the dealloc thread 68 * does not wait forever with nothing to wake it. 69 */ 70 wake_up(&queue->dealloc_wq); 71 } 72 73 int xenvif_schedulable(struct xenvif *vif) 74 { 75 return netif_running(vif->dev) && 76 test_bit(VIF_STATUS_CONNECTED, &vif->status) && 77 !vif->disabled; 78 } 79 80 static irqreturn_t xenvif_tx_interrupt(int irq, void *dev_id) 81 { 82 struct xenvif_queue *queue = dev_id; 83 84 if (RING_HAS_UNCONSUMED_REQUESTS(&queue->tx)) 85 napi_schedule(&queue->napi); 86 87 return IRQ_HANDLED; 88 } 89 90 static int xenvif_poll(struct napi_struct *napi, int budget) 91 { 92 struct xenvif_queue *queue = 93 container_of(napi, struct xenvif_queue, napi); 94 int work_done; 95 96 /* This vif is rogue, we pretend we've there is nothing to do 97 * for this vif to deschedule it from NAPI. But this interface 98 * will be turned off in thread context later. 99 */ 100 if (unlikely(queue->vif->disabled)) { 101 napi_complete(napi); 102 return 0; 103 } 104 105 work_done = xenvif_tx_action(queue, budget); 106 107 if (work_done < budget) { 108 napi_complete_done(napi, work_done); 109 /* If the queue is rate-limited, it shall be 110 * rescheduled in the timer callback. 111 */ 112 if (likely(!queue->rate_limited)) 113 xenvif_napi_schedule_or_enable_events(queue); 114 } 115 116 return work_done; 117 } 118 119 static irqreturn_t xenvif_rx_interrupt(int irq, void *dev_id) 120 { 121 struct xenvif_queue *queue = dev_id; 122 123 xenvif_kick_thread(queue); 124 125 return IRQ_HANDLED; 126 } 127 128 irqreturn_t xenvif_interrupt(int irq, void *dev_id) 129 { 130 xenvif_tx_interrupt(irq, dev_id); 131 xenvif_rx_interrupt(irq, dev_id); 132 133 return IRQ_HANDLED; 134 } 135 136 int xenvif_queue_stopped(struct xenvif_queue *queue) 137 { 138 struct net_device *dev = queue->vif->dev; 139 unsigned int id = queue->id; 140 return netif_tx_queue_stopped(netdev_get_tx_queue(dev, id)); 141 } 142 143 void xenvif_wake_queue(struct xenvif_queue *queue) 144 { 145 struct net_device *dev = queue->vif->dev; 146 unsigned int id = queue->id; 147 netif_tx_wake_queue(netdev_get_tx_queue(dev, id)); 148 } 149 150 static u16 xenvif_select_queue(struct net_device *dev, struct sk_buff *skb, 151 struct net_device *sb_dev, 152 select_queue_fallback_t fallback) 153 { 154 struct xenvif *vif = netdev_priv(dev); 155 unsigned int size = vif->hash.size; 156 157 if (vif->hash.alg == XEN_NETIF_CTRL_HASH_ALGORITHM_NONE) 158 return fallback(dev, skb, NULL) % dev->real_num_tx_queues; 159 160 xenvif_set_skb_hash(vif, skb); 161 162 if (size == 0) 163 return skb_get_hash_raw(skb) % dev->real_num_tx_queues; 164 165 return vif->hash.mapping[vif->hash.mapping_sel] 166 [skb_get_hash_raw(skb) % size]; 167 } 168 169 static netdev_tx_t 170 xenvif_start_xmit(struct sk_buff *skb, struct net_device *dev) 171 { 172 struct xenvif *vif = netdev_priv(dev); 173 struct xenvif_queue *queue = NULL; 174 unsigned int num_queues; 175 u16 index; 176 struct xenvif_rx_cb *cb; 177 178 BUG_ON(skb->dev != dev); 179 180 /* Drop the packet if queues are not set up. 181 * This handler should be called inside an RCU read section 182 * so we don't need to enter it here explicitly. 183 */ 184 num_queues = READ_ONCE(vif->num_queues); 185 if (num_queues < 1) 186 goto drop; 187 188 /* Obtain the queue to be used to transmit this packet */ 189 index = skb_get_queue_mapping(skb); 190 if (index >= num_queues) { 191 pr_warn_ratelimited("Invalid queue %hu for packet on interface %s\n", 192 index, vif->dev->name); 193 index %= num_queues; 194 } 195 queue = &vif->queues[index]; 196 197 /* Drop the packet if queue is not ready */ 198 if (queue->task == NULL || 199 queue->dealloc_task == NULL || 200 !xenvif_schedulable(vif)) 201 goto drop; 202 203 if (vif->multicast_control && skb->pkt_type == PACKET_MULTICAST) { 204 struct ethhdr *eth = (struct ethhdr *)skb->data; 205 206 if (!xenvif_mcast_match(vif, eth->h_dest)) 207 goto drop; 208 } 209 210 cb = XENVIF_RX_CB(skb); 211 cb->expires = jiffies + vif->drain_timeout; 212 213 /* If there is no hash algorithm configured then make sure there 214 * is no hash information in the socket buffer otherwise it 215 * would be incorrectly forwarded to the frontend. 216 */ 217 if (vif->hash.alg == XEN_NETIF_CTRL_HASH_ALGORITHM_NONE) 218 skb_clear_hash(skb); 219 220 xenvif_rx_queue_tail(queue, skb); 221 xenvif_kick_thread(queue); 222 223 return NETDEV_TX_OK; 224 225 drop: 226 vif->dev->stats.tx_dropped++; 227 dev_kfree_skb(skb); 228 return NETDEV_TX_OK; 229 } 230 231 static struct net_device_stats *xenvif_get_stats(struct net_device *dev) 232 { 233 struct xenvif *vif = netdev_priv(dev); 234 struct xenvif_queue *queue = NULL; 235 unsigned int num_queues; 236 u64 rx_bytes = 0; 237 u64 rx_packets = 0; 238 u64 tx_bytes = 0; 239 u64 tx_packets = 0; 240 unsigned int index; 241 242 rcu_read_lock(); 243 num_queues = READ_ONCE(vif->num_queues); 244 245 /* Aggregate tx and rx stats from each queue */ 246 for (index = 0; index < num_queues; ++index) { 247 queue = &vif->queues[index]; 248 rx_bytes += queue->stats.rx_bytes; 249 rx_packets += queue->stats.rx_packets; 250 tx_bytes += queue->stats.tx_bytes; 251 tx_packets += queue->stats.tx_packets; 252 } 253 254 rcu_read_unlock(); 255 256 vif->dev->stats.rx_bytes = rx_bytes; 257 vif->dev->stats.rx_packets = rx_packets; 258 vif->dev->stats.tx_bytes = tx_bytes; 259 vif->dev->stats.tx_packets = tx_packets; 260 261 return &vif->dev->stats; 262 } 263 264 static void xenvif_up(struct xenvif *vif) 265 { 266 struct xenvif_queue *queue = NULL; 267 unsigned int num_queues = vif->num_queues; 268 unsigned int queue_index; 269 270 for (queue_index = 0; queue_index < num_queues; ++queue_index) { 271 queue = &vif->queues[queue_index]; 272 napi_enable(&queue->napi); 273 enable_irq(queue->tx_irq); 274 if (queue->tx_irq != queue->rx_irq) 275 enable_irq(queue->rx_irq); 276 xenvif_napi_schedule_or_enable_events(queue); 277 } 278 } 279 280 static void xenvif_down(struct xenvif *vif) 281 { 282 struct xenvif_queue *queue = NULL; 283 unsigned int num_queues = vif->num_queues; 284 unsigned int queue_index; 285 286 for (queue_index = 0; queue_index < num_queues; ++queue_index) { 287 queue = &vif->queues[queue_index]; 288 disable_irq(queue->tx_irq); 289 if (queue->tx_irq != queue->rx_irq) 290 disable_irq(queue->rx_irq); 291 napi_disable(&queue->napi); 292 del_timer_sync(&queue->credit_timeout); 293 } 294 } 295 296 static int xenvif_open(struct net_device *dev) 297 { 298 struct xenvif *vif = netdev_priv(dev); 299 if (test_bit(VIF_STATUS_CONNECTED, &vif->status)) 300 xenvif_up(vif); 301 netif_tx_start_all_queues(dev); 302 return 0; 303 } 304 305 static int xenvif_close(struct net_device *dev) 306 { 307 struct xenvif *vif = netdev_priv(dev); 308 if (test_bit(VIF_STATUS_CONNECTED, &vif->status)) 309 xenvif_down(vif); 310 netif_tx_stop_all_queues(dev); 311 return 0; 312 } 313 314 static int xenvif_change_mtu(struct net_device *dev, int mtu) 315 { 316 struct xenvif *vif = netdev_priv(dev); 317 int max = vif->can_sg ? ETH_MAX_MTU - VLAN_ETH_HLEN : ETH_DATA_LEN; 318 319 if (mtu > max) 320 return -EINVAL; 321 dev->mtu = mtu; 322 return 0; 323 } 324 325 static netdev_features_t xenvif_fix_features(struct net_device *dev, 326 netdev_features_t features) 327 { 328 struct xenvif *vif = netdev_priv(dev); 329 330 if (!vif->can_sg) 331 features &= ~NETIF_F_SG; 332 if (~(vif->gso_mask) & GSO_BIT(TCPV4)) 333 features &= ~NETIF_F_TSO; 334 if (~(vif->gso_mask) & GSO_BIT(TCPV6)) 335 features &= ~NETIF_F_TSO6; 336 if (!vif->ip_csum) 337 features &= ~NETIF_F_IP_CSUM; 338 if (!vif->ipv6_csum) 339 features &= ~NETIF_F_IPV6_CSUM; 340 341 return features; 342 } 343 344 static const struct xenvif_stat { 345 char name[ETH_GSTRING_LEN]; 346 u16 offset; 347 } xenvif_stats[] = { 348 { 349 "rx_gso_checksum_fixup", 350 offsetof(struct xenvif_stats, rx_gso_checksum_fixup) 351 }, 352 /* If (sent != success + fail), there are probably packets never 353 * freed up properly! 354 */ 355 { 356 "tx_zerocopy_sent", 357 offsetof(struct xenvif_stats, tx_zerocopy_sent), 358 }, 359 { 360 "tx_zerocopy_success", 361 offsetof(struct xenvif_stats, tx_zerocopy_success), 362 }, 363 { 364 "tx_zerocopy_fail", 365 offsetof(struct xenvif_stats, tx_zerocopy_fail) 366 }, 367 /* Number of packets exceeding MAX_SKB_FRAG slots. You should use 368 * a guest with the same MAX_SKB_FRAG 369 */ 370 { 371 "tx_frag_overflow", 372 offsetof(struct xenvif_stats, tx_frag_overflow) 373 }, 374 }; 375 376 static int xenvif_get_sset_count(struct net_device *dev, int string_set) 377 { 378 switch (string_set) { 379 case ETH_SS_STATS: 380 return ARRAY_SIZE(xenvif_stats); 381 default: 382 return -EINVAL; 383 } 384 } 385 386 static void xenvif_get_ethtool_stats(struct net_device *dev, 387 struct ethtool_stats *stats, u64 * data) 388 { 389 struct xenvif *vif = netdev_priv(dev); 390 unsigned int num_queues; 391 int i; 392 unsigned int queue_index; 393 394 rcu_read_lock(); 395 num_queues = READ_ONCE(vif->num_queues); 396 397 for (i = 0; i < ARRAY_SIZE(xenvif_stats); i++) { 398 unsigned long accum = 0; 399 for (queue_index = 0; queue_index < num_queues; ++queue_index) { 400 void *vif_stats = &vif->queues[queue_index].stats; 401 accum += *(unsigned long *)(vif_stats + xenvif_stats[i].offset); 402 } 403 data[i] = accum; 404 } 405 406 rcu_read_unlock(); 407 } 408 409 static void xenvif_get_strings(struct net_device *dev, u32 stringset, u8 * data) 410 { 411 int i; 412 413 switch (stringset) { 414 case ETH_SS_STATS: 415 for (i = 0; i < ARRAY_SIZE(xenvif_stats); i++) 416 memcpy(data + i * ETH_GSTRING_LEN, 417 xenvif_stats[i].name, ETH_GSTRING_LEN); 418 break; 419 } 420 } 421 422 static const struct ethtool_ops xenvif_ethtool_ops = { 423 .get_link = ethtool_op_get_link, 424 425 .get_sset_count = xenvif_get_sset_count, 426 .get_ethtool_stats = xenvif_get_ethtool_stats, 427 .get_strings = xenvif_get_strings, 428 }; 429 430 static const struct net_device_ops xenvif_netdev_ops = { 431 .ndo_select_queue = xenvif_select_queue, 432 .ndo_start_xmit = xenvif_start_xmit, 433 .ndo_get_stats = xenvif_get_stats, 434 .ndo_open = xenvif_open, 435 .ndo_stop = xenvif_close, 436 .ndo_change_mtu = xenvif_change_mtu, 437 .ndo_fix_features = xenvif_fix_features, 438 .ndo_set_mac_address = eth_mac_addr, 439 .ndo_validate_addr = eth_validate_addr, 440 }; 441 442 struct xenvif *xenvif_alloc(struct device *parent, domid_t domid, 443 unsigned int handle) 444 { 445 int err; 446 struct net_device *dev; 447 struct xenvif *vif; 448 char name[IFNAMSIZ] = {}; 449 450 snprintf(name, IFNAMSIZ - 1, "vif%u.%u", domid, handle); 451 /* Allocate a netdev with the max. supported number of queues. 452 * When the guest selects the desired number, it will be updated 453 * via netif_set_real_num_*_queues(). 454 */ 455 dev = alloc_netdev_mq(sizeof(struct xenvif), name, NET_NAME_UNKNOWN, 456 ether_setup, xenvif_max_queues); 457 if (dev == NULL) { 458 pr_warn("Could not allocate netdev for %s\n", name); 459 return ERR_PTR(-ENOMEM); 460 } 461 462 SET_NETDEV_DEV(dev, parent); 463 464 vif = netdev_priv(dev); 465 466 vif->domid = domid; 467 vif->handle = handle; 468 vif->can_sg = 1; 469 vif->ip_csum = 1; 470 vif->dev = dev; 471 vif->disabled = false; 472 vif->drain_timeout = msecs_to_jiffies(rx_drain_timeout_msecs); 473 vif->stall_timeout = msecs_to_jiffies(rx_stall_timeout_msecs); 474 475 /* Start out with no queues. */ 476 vif->queues = NULL; 477 vif->num_queues = 0; 478 479 spin_lock_init(&vif->lock); 480 INIT_LIST_HEAD(&vif->fe_mcast_addr); 481 482 dev->netdev_ops = &xenvif_netdev_ops; 483 dev->hw_features = NETIF_F_SG | 484 NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM | 485 NETIF_F_TSO | NETIF_F_TSO6 | NETIF_F_FRAGLIST; 486 dev->features = dev->hw_features | NETIF_F_RXCSUM; 487 dev->ethtool_ops = &xenvif_ethtool_ops; 488 489 dev->tx_queue_len = XENVIF_QUEUE_LENGTH; 490 491 dev->min_mtu = ETH_MIN_MTU; 492 dev->max_mtu = ETH_MAX_MTU - VLAN_ETH_HLEN; 493 494 /* 495 * Initialise a dummy MAC address. We choose the numerically 496 * largest non-broadcast address to prevent the address getting 497 * stolen by an Ethernet bridge for STP purposes. 498 * (FE:FF:FF:FF:FF:FF) 499 */ 500 eth_broadcast_addr(dev->dev_addr); 501 dev->dev_addr[0] &= ~0x01; 502 503 netif_carrier_off(dev); 504 505 err = register_netdev(dev); 506 if (err) { 507 netdev_warn(dev, "Could not register device: err=%d\n", err); 508 free_netdev(dev); 509 return ERR_PTR(err); 510 } 511 512 netdev_dbg(dev, "Successfully created xenvif\n"); 513 514 __module_get(THIS_MODULE); 515 516 return vif; 517 } 518 519 int xenvif_init_queue(struct xenvif_queue *queue) 520 { 521 int err, i; 522 523 queue->credit_bytes = queue->remaining_credit = ~0UL; 524 queue->credit_usec = 0UL; 525 timer_setup(&queue->credit_timeout, xenvif_tx_credit_callback, 0); 526 queue->credit_window_start = get_jiffies_64(); 527 528 queue->rx_queue_max = XENVIF_RX_QUEUE_BYTES; 529 530 skb_queue_head_init(&queue->rx_queue); 531 skb_queue_head_init(&queue->tx_queue); 532 533 queue->pending_cons = 0; 534 queue->pending_prod = MAX_PENDING_REQS; 535 for (i = 0; i < MAX_PENDING_REQS; ++i) 536 queue->pending_ring[i] = i; 537 538 spin_lock_init(&queue->callback_lock); 539 spin_lock_init(&queue->response_lock); 540 541 /* If ballooning is disabled, this will consume real memory, so you 542 * better enable it. The long term solution would be to use just a 543 * bunch of valid page descriptors, without dependency on ballooning 544 */ 545 err = gnttab_alloc_pages(MAX_PENDING_REQS, 546 queue->mmap_pages); 547 if (err) { 548 netdev_err(queue->vif->dev, "Could not reserve mmap_pages\n"); 549 return -ENOMEM; 550 } 551 552 for (i = 0; i < MAX_PENDING_REQS; i++) { 553 queue->pending_tx_info[i].callback_struct = (struct ubuf_info) 554 { .callback = xenvif_zerocopy_callback, 555 { { .ctx = NULL, 556 .desc = i } } }; 557 queue->grant_tx_handle[i] = NETBACK_INVALID_HANDLE; 558 } 559 560 return 0; 561 } 562 563 void xenvif_carrier_on(struct xenvif *vif) 564 { 565 rtnl_lock(); 566 if (!vif->can_sg && vif->dev->mtu > ETH_DATA_LEN) 567 dev_set_mtu(vif->dev, ETH_DATA_LEN); 568 netdev_update_features(vif->dev); 569 set_bit(VIF_STATUS_CONNECTED, &vif->status); 570 if (netif_running(vif->dev)) 571 xenvif_up(vif); 572 rtnl_unlock(); 573 } 574 575 int xenvif_connect_ctrl(struct xenvif *vif, grant_ref_t ring_ref, 576 unsigned int evtchn) 577 { 578 struct net_device *dev = vif->dev; 579 void *addr; 580 struct xen_netif_ctrl_sring *shared; 581 int err; 582 583 err = xenbus_map_ring_valloc(xenvif_to_xenbus_device(vif), 584 &ring_ref, 1, &addr); 585 if (err) 586 goto err; 587 588 shared = (struct xen_netif_ctrl_sring *)addr; 589 BACK_RING_INIT(&vif->ctrl, shared, XEN_PAGE_SIZE); 590 591 err = bind_interdomain_evtchn_to_irq(vif->domid, evtchn); 592 if (err < 0) 593 goto err_unmap; 594 595 vif->ctrl_irq = err; 596 597 xenvif_init_hash(vif); 598 599 err = request_threaded_irq(vif->ctrl_irq, NULL, xenvif_ctrl_irq_fn, 600 IRQF_ONESHOT, "xen-netback-ctrl", vif); 601 if (err) { 602 pr_warn("Could not setup irq handler for %s\n", dev->name); 603 goto err_deinit; 604 } 605 606 return 0; 607 608 err_deinit: 609 xenvif_deinit_hash(vif); 610 unbind_from_irqhandler(vif->ctrl_irq, vif); 611 vif->ctrl_irq = 0; 612 613 err_unmap: 614 xenbus_unmap_ring_vfree(xenvif_to_xenbus_device(vif), 615 vif->ctrl.sring); 616 vif->ctrl.sring = NULL; 617 618 err: 619 return err; 620 } 621 622 int xenvif_connect_data(struct xenvif_queue *queue, 623 unsigned long tx_ring_ref, 624 unsigned long rx_ring_ref, 625 unsigned int tx_evtchn, 626 unsigned int rx_evtchn) 627 { 628 struct task_struct *task; 629 int err = -ENOMEM; 630 631 BUG_ON(queue->tx_irq); 632 BUG_ON(queue->task); 633 BUG_ON(queue->dealloc_task); 634 635 err = xenvif_map_frontend_data_rings(queue, tx_ring_ref, 636 rx_ring_ref); 637 if (err < 0) 638 goto err; 639 640 init_waitqueue_head(&queue->wq); 641 init_waitqueue_head(&queue->dealloc_wq); 642 atomic_set(&queue->inflight_packets, 0); 643 644 netif_napi_add(queue->vif->dev, &queue->napi, xenvif_poll, 645 XENVIF_NAPI_WEIGHT); 646 647 if (tx_evtchn == rx_evtchn) { 648 /* feature-split-event-channels == 0 */ 649 err = bind_interdomain_evtchn_to_irqhandler( 650 queue->vif->domid, tx_evtchn, xenvif_interrupt, 0, 651 queue->name, queue); 652 if (err < 0) 653 goto err_unmap; 654 queue->tx_irq = queue->rx_irq = err; 655 disable_irq(queue->tx_irq); 656 } else { 657 /* feature-split-event-channels == 1 */ 658 snprintf(queue->tx_irq_name, sizeof(queue->tx_irq_name), 659 "%s-tx", queue->name); 660 err = bind_interdomain_evtchn_to_irqhandler( 661 queue->vif->domid, tx_evtchn, xenvif_tx_interrupt, 0, 662 queue->tx_irq_name, queue); 663 if (err < 0) 664 goto err_unmap; 665 queue->tx_irq = err; 666 disable_irq(queue->tx_irq); 667 668 snprintf(queue->rx_irq_name, sizeof(queue->rx_irq_name), 669 "%s-rx", queue->name); 670 err = bind_interdomain_evtchn_to_irqhandler( 671 queue->vif->domid, rx_evtchn, xenvif_rx_interrupt, 0, 672 queue->rx_irq_name, queue); 673 if (err < 0) 674 goto err_tx_unbind; 675 queue->rx_irq = err; 676 disable_irq(queue->rx_irq); 677 } 678 679 queue->stalled = true; 680 681 task = kthread_create(xenvif_kthread_guest_rx, 682 (void *)queue, "%s-guest-rx", queue->name); 683 if (IS_ERR(task)) { 684 pr_warn("Could not allocate kthread for %s\n", queue->name); 685 err = PTR_ERR(task); 686 goto err_rx_unbind; 687 } 688 queue->task = task; 689 get_task_struct(task); 690 691 task = kthread_create(xenvif_dealloc_kthread, 692 (void *)queue, "%s-dealloc", queue->name); 693 if (IS_ERR(task)) { 694 pr_warn("Could not allocate kthread for %s\n", queue->name); 695 err = PTR_ERR(task); 696 goto err_rx_unbind; 697 } 698 queue->dealloc_task = task; 699 700 wake_up_process(queue->task); 701 wake_up_process(queue->dealloc_task); 702 703 return 0; 704 705 err_rx_unbind: 706 unbind_from_irqhandler(queue->rx_irq, queue); 707 queue->rx_irq = 0; 708 err_tx_unbind: 709 unbind_from_irqhandler(queue->tx_irq, queue); 710 queue->tx_irq = 0; 711 err_unmap: 712 xenvif_unmap_frontend_data_rings(queue); 713 netif_napi_del(&queue->napi); 714 err: 715 module_put(THIS_MODULE); 716 return err; 717 } 718 719 void xenvif_carrier_off(struct xenvif *vif) 720 { 721 struct net_device *dev = vif->dev; 722 723 rtnl_lock(); 724 if (test_and_clear_bit(VIF_STATUS_CONNECTED, &vif->status)) { 725 netif_carrier_off(dev); /* discard queued packets */ 726 if (netif_running(dev)) 727 xenvif_down(vif); 728 } 729 rtnl_unlock(); 730 } 731 732 void xenvif_disconnect_data(struct xenvif *vif) 733 { 734 struct xenvif_queue *queue = NULL; 735 unsigned int num_queues = vif->num_queues; 736 unsigned int queue_index; 737 738 xenvif_carrier_off(vif); 739 740 for (queue_index = 0; queue_index < num_queues; ++queue_index) { 741 queue = &vif->queues[queue_index]; 742 743 netif_napi_del(&queue->napi); 744 745 if (queue->task) { 746 kthread_stop(queue->task); 747 put_task_struct(queue->task); 748 queue->task = NULL; 749 } 750 751 if (queue->dealloc_task) { 752 kthread_stop(queue->dealloc_task); 753 queue->dealloc_task = NULL; 754 } 755 756 if (queue->tx_irq) { 757 if (queue->tx_irq == queue->rx_irq) 758 unbind_from_irqhandler(queue->tx_irq, queue); 759 else { 760 unbind_from_irqhandler(queue->tx_irq, queue); 761 unbind_from_irqhandler(queue->rx_irq, queue); 762 } 763 queue->tx_irq = 0; 764 } 765 766 xenvif_unmap_frontend_data_rings(queue); 767 } 768 769 xenvif_mcast_addr_list_free(vif); 770 } 771 772 void xenvif_disconnect_ctrl(struct xenvif *vif) 773 { 774 if (vif->ctrl_irq) { 775 xenvif_deinit_hash(vif); 776 unbind_from_irqhandler(vif->ctrl_irq, vif); 777 vif->ctrl_irq = 0; 778 } 779 780 if (vif->ctrl.sring) { 781 xenbus_unmap_ring_vfree(xenvif_to_xenbus_device(vif), 782 vif->ctrl.sring); 783 vif->ctrl.sring = NULL; 784 } 785 } 786 787 /* Reverse the relevant parts of xenvif_init_queue(). 788 * Used for queue teardown from xenvif_free(), and on the 789 * error handling paths in xenbus.c:connect(). 790 */ 791 void xenvif_deinit_queue(struct xenvif_queue *queue) 792 { 793 gnttab_free_pages(MAX_PENDING_REQS, queue->mmap_pages); 794 } 795 796 void xenvif_free(struct xenvif *vif) 797 { 798 struct xenvif_queue *queues = vif->queues; 799 unsigned int num_queues = vif->num_queues; 800 unsigned int queue_index; 801 802 unregister_netdev(vif->dev); 803 free_netdev(vif->dev); 804 805 for (queue_index = 0; queue_index < num_queues; ++queue_index) 806 xenvif_deinit_queue(&queues[queue_index]); 807 vfree(queues); 808 809 module_put(THIS_MODULE); 810 } 811