1 /* 2 * Xenbus code for netif backend 3 * 4 * Copyright (C) 2005 Rusty Russell <rusty@rustcorp.com.au> 5 * Copyright (C) 2005 XenSource Ltd 6 * 7 * This program is free software; you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License as published by 9 * the Free Software Foundation; either version 2 of the License, or 10 * (at your option) any later version. 11 * 12 * This program is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * GNU General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License 18 * along with this program; if not, see <http://www.gnu.org/licenses/>. 19 */ 20 21 #include "common.h" 22 #include <linux/vmalloc.h> 23 #include <linux/rtnetlink.h> 24 25 struct backend_info { 26 struct xenbus_device *dev; 27 struct xenvif *vif; 28 29 /* This is the state that will be reflected in xenstore when any 30 * active hotplug script completes. 31 */ 32 enum xenbus_state state; 33 34 enum xenbus_state frontend_state; 35 struct xenbus_watch hotplug_status_watch; 36 u8 have_hotplug_status_watch:1; 37 38 const char *hotplug_script; 39 }; 40 41 static int connect_rings(struct backend_info *be, struct xenvif_queue *queue); 42 static void connect(struct backend_info *be); 43 static int read_xenbus_vif_flags(struct backend_info *be); 44 static int backend_create_xenvif(struct backend_info *be); 45 static void unregister_hotplug_status_watch(struct backend_info *be); 46 static void xen_unregister_watchers(struct xenvif *vif); 47 static void set_backend_state(struct backend_info *be, 48 enum xenbus_state state); 49 50 #ifdef CONFIG_DEBUG_FS 51 struct dentry *xen_netback_dbg_root = NULL; 52 53 static int xenvif_read_io_ring(struct seq_file *m, void *v) 54 { 55 struct xenvif_queue *queue = m->private; 56 struct xen_netif_tx_back_ring *tx_ring = &queue->tx; 57 struct xen_netif_rx_back_ring *rx_ring = &queue->rx; 58 struct netdev_queue *dev_queue; 59 60 if (tx_ring->sring) { 61 struct xen_netif_tx_sring *sring = tx_ring->sring; 62 63 seq_printf(m, "Queue %d\nTX: nr_ents %u\n", queue->id, 64 tx_ring->nr_ents); 65 seq_printf(m, "req prod %u (%d) cons %u (%d) event %u (%d)\n", 66 sring->req_prod, 67 sring->req_prod - sring->rsp_prod, 68 tx_ring->req_cons, 69 tx_ring->req_cons - sring->rsp_prod, 70 sring->req_event, 71 sring->req_event - sring->rsp_prod); 72 seq_printf(m, "rsp prod %u (base) pvt %u (%d) event %u (%d)\n", 73 sring->rsp_prod, 74 tx_ring->rsp_prod_pvt, 75 tx_ring->rsp_prod_pvt - sring->rsp_prod, 76 sring->rsp_event, 77 sring->rsp_event - sring->rsp_prod); 78 seq_printf(m, "pending prod %u pending cons %u nr_pending_reqs %u\n", 79 queue->pending_prod, 80 queue->pending_cons, 81 nr_pending_reqs(queue)); 82 seq_printf(m, "dealloc prod %u dealloc cons %u dealloc_queue %u\n\n", 83 queue->dealloc_prod, 84 queue->dealloc_cons, 85 queue->dealloc_prod - queue->dealloc_cons); 86 } 87 88 if (rx_ring->sring) { 89 struct xen_netif_rx_sring *sring = rx_ring->sring; 90 91 seq_printf(m, "RX: nr_ents %u\n", rx_ring->nr_ents); 92 seq_printf(m, "req prod %u (%d) cons %u (%d) event %u (%d)\n", 93 sring->req_prod, 94 sring->req_prod - sring->rsp_prod, 95 rx_ring->req_cons, 96 rx_ring->req_cons - sring->rsp_prod, 97 sring->req_event, 98 sring->req_event - sring->rsp_prod); 99 seq_printf(m, "rsp prod %u (base) pvt %u (%d) event %u (%d)\n\n", 100 sring->rsp_prod, 101 rx_ring->rsp_prod_pvt, 102 rx_ring->rsp_prod_pvt - sring->rsp_prod, 103 sring->rsp_event, 104 sring->rsp_event - sring->rsp_prod); 105 } 106 107 seq_printf(m, "NAPI state: %lx NAPI weight: %d TX queue len %u\n" 108 "Credit timer_pending: %d, credit: %lu, usec: %lu\n" 109 "remaining: %lu, expires: %lu, now: %lu\n", 110 queue->napi.state, queue->napi.weight, 111 skb_queue_len(&queue->tx_queue), 112 timer_pending(&queue->credit_timeout), 113 queue->credit_bytes, 114 queue->credit_usec, 115 queue->remaining_credit, 116 queue->credit_timeout.expires, 117 jiffies); 118 119 dev_queue = netdev_get_tx_queue(queue->vif->dev, queue->id); 120 121 seq_printf(m, "\nRx internal queue: len %u max %u pkts %u %s\n", 122 queue->rx_queue_len, queue->rx_queue_max, 123 skb_queue_len(&queue->rx_queue), 124 netif_tx_queue_stopped(dev_queue) ? "stopped" : "running"); 125 126 return 0; 127 } 128 129 #define XENVIF_KICK_STR "kick" 130 #define BUFFER_SIZE 32 131 132 static ssize_t 133 xenvif_write_io_ring(struct file *filp, const char __user *buf, size_t count, 134 loff_t *ppos) 135 { 136 struct xenvif_queue *queue = 137 ((struct seq_file *)filp->private_data)->private; 138 int len; 139 char write[BUFFER_SIZE]; 140 141 /* don't allow partial writes and check the length */ 142 if (*ppos != 0) 143 return 0; 144 if (count >= sizeof(write)) 145 return -ENOSPC; 146 147 len = simple_write_to_buffer(write, 148 sizeof(write) - 1, 149 ppos, 150 buf, 151 count); 152 if (len < 0) 153 return len; 154 155 write[len] = '\0'; 156 157 if (!strncmp(write, XENVIF_KICK_STR, sizeof(XENVIF_KICK_STR) - 1)) 158 xenvif_interrupt(0, (void *)queue); 159 else { 160 pr_warn("Unknown command to io_ring_q%d. Available: kick\n", 161 queue->id); 162 count = -EINVAL; 163 } 164 return count; 165 } 166 167 static int xenvif_dump_open(struct inode *inode, struct file *filp) 168 { 169 int ret; 170 void *queue = NULL; 171 172 if (inode->i_private) 173 queue = inode->i_private; 174 ret = single_open(filp, xenvif_read_io_ring, queue); 175 filp->f_mode |= FMODE_PWRITE; 176 return ret; 177 } 178 179 static const struct file_operations xenvif_dbg_io_ring_ops_fops = { 180 .owner = THIS_MODULE, 181 .open = xenvif_dump_open, 182 .read = seq_read, 183 .llseek = seq_lseek, 184 .release = single_release, 185 .write = xenvif_write_io_ring, 186 }; 187 188 static void xenvif_debugfs_addif(struct xenvif *vif) 189 { 190 struct dentry *pfile; 191 int i; 192 193 if (IS_ERR_OR_NULL(xen_netback_dbg_root)) 194 return; 195 196 vif->xenvif_dbg_root = debugfs_create_dir(vif->dev->name, 197 xen_netback_dbg_root); 198 if (!IS_ERR_OR_NULL(vif->xenvif_dbg_root)) { 199 for (i = 0; i < vif->num_queues; ++i) { 200 char filename[sizeof("io_ring_q") + 4]; 201 202 snprintf(filename, sizeof(filename), "io_ring_q%d", i); 203 pfile = debugfs_create_file(filename, 204 S_IRUSR | S_IWUSR, 205 vif->xenvif_dbg_root, 206 &vif->queues[i], 207 &xenvif_dbg_io_ring_ops_fops); 208 if (IS_ERR_OR_NULL(pfile)) 209 pr_warn("Creation of io_ring file returned %ld!\n", 210 PTR_ERR(pfile)); 211 } 212 } else 213 netdev_warn(vif->dev, 214 "Creation of vif debugfs dir returned %ld!\n", 215 PTR_ERR(vif->xenvif_dbg_root)); 216 } 217 218 static void xenvif_debugfs_delif(struct xenvif *vif) 219 { 220 if (IS_ERR_OR_NULL(xen_netback_dbg_root)) 221 return; 222 223 if (!IS_ERR_OR_NULL(vif->xenvif_dbg_root)) 224 debugfs_remove_recursive(vif->xenvif_dbg_root); 225 vif->xenvif_dbg_root = NULL; 226 } 227 #endif /* CONFIG_DEBUG_FS */ 228 229 static int netback_remove(struct xenbus_device *dev) 230 { 231 struct backend_info *be = dev_get_drvdata(&dev->dev); 232 233 set_backend_state(be, XenbusStateClosed); 234 235 unregister_hotplug_status_watch(be); 236 if (be->vif) { 237 kobject_uevent(&dev->dev.kobj, KOBJ_OFFLINE); 238 xen_unregister_watchers(be->vif); 239 xenbus_rm(XBT_NIL, dev->nodename, "hotplug-status"); 240 xenvif_free(be->vif); 241 be->vif = NULL; 242 } 243 kfree(be->hotplug_script); 244 kfree(be); 245 dev_set_drvdata(&dev->dev, NULL); 246 return 0; 247 } 248 249 250 /** 251 * Entry point to this code when a new device is created. Allocate the basic 252 * structures and switch to InitWait. 253 */ 254 static int netback_probe(struct xenbus_device *dev, 255 const struct xenbus_device_id *id) 256 { 257 const char *message; 258 struct xenbus_transaction xbt; 259 int err; 260 int sg; 261 const char *script; 262 struct backend_info *be = kzalloc(sizeof(struct backend_info), 263 GFP_KERNEL); 264 if (!be) { 265 xenbus_dev_fatal(dev, -ENOMEM, 266 "allocating backend structure"); 267 return -ENOMEM; 268 } 269 270 be->dev = dev; 271 dev_set_drvdata(&dev->dev, be); 272 273 sg = 1; 274 275 do { 276 err = xenbus_transaction_start(&xbt); 277 if (err) { 278 xenbus_dev_fatal(dev, err, "starting transaction"); 279 goto fail; 280 } 281 282 err = xenbus_printf(xbt, dev->nodename, "feature-sg", "%d", sg); 283 if (err) { 284 message = "writing feature-sg"; 285 goto abort_transaction; 286 } 287 288 err = xenbus_printf(xbt, dev->nodename, "feature-gso-tcpv4", 289 "%d", sg); 290 if (err) { 291 message = "writing feature-gso-tcpv4"; 292 goto abort_transaction; 293 } 294 295 err = xenbus_printf(xbt, dev->nodename, "feature-gso-tcpv6", 296 "%d", sg); 297 if (err) { 298 message = "writing feature-gso-tcpv6"; 299 goto abort_transaction; 300 } 301 302 /* We support partial checksum setup for IPv6 packets */ 303 err = xenbus_printf(xbt, dev->nodename, 304 "feature-ipv6-csum-offload", 305 "%d", 1); 306 if (err) { 307 message = "writing feature-ipv6-csum-offload"; 308 goto abort_transaction; 309 } 310 311 /* We support rx-copy path. */ 312 err = xenbus_printf(xbt, dev->nodename, 313 "feature-rx-copy", "%d", 1); 314 if (err) { 315 message = "writing feature-rx-copy"; 316 goto abort_transaction; 317 } 318 319 /* 320 * We don't support rx-flip path (except old guests who don't 321 * grok this feature flag). 322 */ 323 err = xenbus_printf(xbt, dev->nodename, 324 "feature-rx-flip", "%d", 0); 325 if (err) { 326 message = "writing feature-rx-flip"; 327 goto abort_transaction; 328 } 329 330 /* We support dynamic multicast-control. */ 331 err = xenbus_printf(xbt, dev->nodename, 332 "feature-multicast-control", "%d", 1); 333 if (err) { 334 message = "writing feature-multicast-control"; 335 goto abort_transaction; 336 } 337 338 err = xenbus_printf(xbt, dev->nodename, 339 "feature-dynamic-multicast-control", 340 "%d", 1); 341 if (err) { 342 message = "writing feature-dynamic-multicast-control"; 343 goto abort_transaction; 344 } 345 346 err = xenbus_transaction_end(xbt, 0); 347 } while (err == -EAGAIN); 348 349 if (err) { 350 xenbus_dev_fatal(dev, err, "completing transaction"); 351 goto fail; 352 } 353 354 /* 355 * Split event channels support, this is optional so it is not 356 * put inside the above loop. 357 */ 358 err = xenbus_printf(XBT_NIL, dev->nodename, 359 "feature-split-event-channels", 360 "%u", separate_tx_rx_irq); 361 if (err) 362 pr_debug("Error writing feature-split-event-channels\n"); 363 364 /* Multi-queue support: This is an optional feature. */ 365 err = xenbus_printf(XBT_NIL, dev->nodename, 366 "multi-queue-max-queues", "%u", xenvif_max_queues); 367 if (err) 368 pr_debug("Error writing multi-queue-max-queues\n"); 369 370 script = xenbus_read(XBT_NIL, dev->nodename, "script", NULL); 371 if (IS_ERR(script)) { 372 err = PTR_ERR(script); 373 xenbus_dev_fatal(dev, err, "reading script"); 374 goto fail; 375 } 376 377 be->hotplug_script = script; 378 379 err = xenbus_switch_state(dev, XenbusStateInitWait); 380 if (err) 381 goto fail; 382 383 be->state = XenbusStateInitWait; 384 385 /* This kicks hotplug scripts, so do it immediately. */ 386 err = backend_create_xenvif(be); 387 if (err) 388 goto fail; 389 390 return 0; 391 392 abort_transaction: 393 xenbus_transaction_end(xbt, 1); 394 xenbus_dev_fatal(dev, err, "%s", message); 395 fail: 396 pr_debug("failed\n"); 397 netback_remove(dev); 398 return err; 399 } 400 401 402 /* 403 * Handle the creation of the hotplug script environment. We add the script 404 * and vif variables to the environment, for the benefit of the vif-* hotplug 405 * scripts. 406 */ 407 static int netback_uevent(struct xenbus_device *xdev, 408 struct kobj_uevent_env *env) 409 { 410 struct backend_info *be = dev_get_drvdata(&xdev->dev); 411 412 if (!be) 413 return 0; 414 415 if (add_uevent_var(env, "script=%s", be->hotplug_script)) 416 return -ENOMEM; 417 418 if (!be->vif) 419 return 0; 420 421 return add_uevent_var(env, "vif=%s", be->vif->dev->name); 422 } 423 424 425 static int backend_create_xenvif(struct backend_info *be) 426 { 427 int err; 428 long handle; 429 struct xenbus_device *dev = be->dev; 430 struct xenvif *vif; 431 432 if (be->vif != NULL) 433 return 0; 434 435 err = xenbus_scanf(XBT_NIL, dev->nodename, "handle", "%li", &handle); 436 if (err != 1) { 437 xenbus_dev_fatal(dev, err, "reading handle"); 438 return (err < 0) ? err : -EINVAL; 439 } 440 441 vif = xenvif_alloc(&dev->dev, dev->otherend_id, handle); 442 if (IS_ERR(vif)) { 443 err = PTR_ERR(vif); 444 xenbus_dev_fatal(dev, err, "creating interface"); 445 return err; 446 } 447 be->vif = vif; 448 449 kobject_uevent(&dev->dev.kobj, KOBJ_ONLINE); 450 return 0; 451 } 452 453 static void backend_disconnect(struct backend_info *be) 454 { 455 if (be->vif) { 456 xen_unregister_watchers(be->vif); 457 #ifdef CONFIG_DEBUG_FS 458 xenvif_debugfs_delif(be->vif); 459 #endif /* CONFIG_DEBUG_FS */ 460 xenvif_disconnect(be->vif); 461 } 462 } 463 464 static void backend_connect(struct backend_info *be) 465 { 466 if (be->vif) 467 connect(be); 468 } 469 470 static inline void backend_switch_state(struct backend_info *be, 471 enum xenbus_state state) 472 { 473 struct xenbus_device *dev = be->dev; 474 475 pr_debug("%s -> %s\n", dev->nodename, xenbus_strstate(state)); 476 be->state = state; 477 478 /* If we are waiting for a hotplug script then defer the 479 * actual xenbus state change. 480 */ 481 if (!be->have_hotplug_status_watch) 482 xenbus_switch_state(dev, state); 483 } 484 485 /* Handle backend state transitions: 486 * 487 * The backend state starts in InitWait and the following transitions are 488 * allowed. 489 * 490 * InitWait -> Connected 491 * 492 * ^ \ | 493 * | \ | 494 * | \ | 495 * | \ | 496 * | \ | 497 * | \ | 498 * | V V 499 * 500 * Closed <-> Closing 501 * 502 * The state argument specifies the eventual state of the backend and the 503 * function transitions to that state via the shortest path. 504 */ 505 static void set_backend_state(struct backend_info *be, 506 enum xenbus_state state) 507 { 508 while (be->state != state) { 509 switch (be->state) { 510 case XenbusStateClosed: 511 switch (state) { 512 case XenbusStateInitWait: 513 case XenbusStateConnected: 514 backend_switch_state(be, XenbusStateInitWait); 515 break; 516 case XenbusStateClosing: 517 backend_switch_state(be, XenbusStateClosing); 518 break; 519 default: 520 BUG(); 521 } 522 break; 523 case XenbusStateInitWait: 524 switch (state) { 525 case XenbusStateConnected: 526 backend_connect(be); 527 backend_switch_state(be, XenbusStateConnected); 528 break; 529 case XenbusStateClosing: 530 case XenbusStateClosed: 531 backend_switch_state(be, XenbusStateClosing); 532 break; 533 default: 534 BUG(); 535 } 536 break; 537 case XenbusStateConnected: 538 switch (state) { 539 case XenbusStateInitWait: 540 case XenbusStateClosing: 541 case XenbusStateClosed: 542 backend_disconnect(be); 543 backend_switch_state(be, XenbusStateClosing); 544 break; 545 default: 546 BUG(); 547 } 548 break; 549 case XenbusStateClosing: 550 switch (state) { 551 case XenbusStateInitWait: 552 case XenbusStateConnected: 553 case XenbusStateClosed: 554 backend_switch_state(be, XenbusStateClosed); 555 break; 556 default: 557 BUG(); 558 } 559 break; 560 default: 561 BUG(); 562 } 563 } 564 } 565 566 /** 567 * Callback received when the frontend's state changes. 568 */ 569 static void frontend_changed(struct xenbus_device *dev, 570 enum xenbus_state frontend_state) 571 { 572 struct backend_info *be = dev_get_drvdata(&dev->dev); 573 574 pr_debug("%s -> %s\n", dev->otherend, xenbus_strstate(frontend_state)); 575 576 be->frontend_state = frontend_state; 577 578 switch (frontend_state) { 579 case XenbusStateInitialising: 580 set_backend_state(be, XenbusStateInitWait); 581 break; 582 583 case XenbusStateInitialised: 584 break; 585 586 case XenbusStateConnected: 587 set_backend_state(be, XenbusStateConnected); 588 break; 589 590 case XenbusStateClosing: 591 set_backend_state(be, XenbusStateClosing); 592 break; 593 594 case XenbusStateClosed: 595 set_backend_state(be, XenbusStateClosed); 596 if (xenbus_dev_is_online(dev)) 597 break; 598 /* fall through if not online */ 599 case XenbusStateUnknown: 600 set_backend_state(be, XenbusStateClosed); 601 device_unregister(&dev->dev); 602 break; 603 604 default: 605 xenbus_dev_fatal(dev, -EINVAL, "saw state %d at frontend", 606 frontend_state); 607 break; 608 } 609 } 610 611 612 static void xen_net_read_rate(struct xenbus_device *dev, 613 unsigned long *bytes, unsigned long *usec) 614 { 615 char *s, *e; 616 unsigned long b, u; 617 char *ratestr; 618 619 /* Default to unlimited bandwidth. */ 620 *bytes = ~0UL; 621 *usec = 0; 622 623 ratestr = xenbus_read(XBT_NIL, dev->nodename, "rate", NULL); 624 if (IS_ERR(ratestr)) 625 return; 626 627 s = ratestr; 628 b = simple_strtoul(s, &e, 10); 629 if ((s == e) || (*e != ',')) 630 goto fail; 631 632 s = e + 1; 633 u = simple_strtoul(s, &e, 10); 634 if ((s == e) || (*e != '\0')) 635 goto fail; 636 637 *bytes = b; 638 *usec = u; 639 640 kfree(ratestr); 641 return; 642 643 fail: 644 pr_warn("Failed to parse network rate limit. Traffic unlimited.\n"); 645 kfree(ratestr); 646 } 647 648 static int xen_net_read_mac(struct xenbus_device *dev, u8 mac[]) 649 { 650 char *s, *e, *macstr; 651 int i; 652 653 macstr = s = xenbus_read(XBT_NIL, dev->nodename, "mac", NULL); 654 if (IS_ERR(macstr)) 655 return PTR_ERR(macstr); 656 657 for (i = 0; i < ETH_ALEN; i++) { 658 mac[i] = simple_strtoul(s, &e, 16); 659 if ((s == e) || (*e != ((i == ETH_ALEN-1) ? '\0' : ':'))) { 660 kfree(macstr); 661 return -ENOENT; 662 } 663 s = e+1; 664 } 665 666 kfree(macstr); 667 return 0; 668 } 669 670 static void xen_net_rate_changed(struct xenbus_watch *watch, 671 const char **vec, unsigned int len) 672 { 673 struct xenvif *vif = container_of(watch, struct xenvif, credit_watch); 674 struct xenbus_device *dev = xenvif_to_xenbus_device(vif); 675 unsigned long credit_bytes; 676 unsigned long credit_usec; 677 unsigned int queue_index; 678 679 xen_net_read_rate(dev, &credit_bytes, &credit_usec); 680 for (queue_index = 0; queue_index < vif->num_queues; queue_index++) { 681 struct xenvif_queue *queue = &vif->queues[queue_index]; 682 683 queue->credit_bytes = credit_bytes; 684 queue->credit_usec = credit_usec; 685 if (!mod_timer_pending(&queue->credit_timeout, jiffies) && 686 queue->remaining_credit > queue->credit_bytes) { 687 queue->remaining_credit = queue->credit_bytes; 688 } 689 } 690 } 691 692 static int xen_register_credit_watch(struct xenbus_device *dev, 693 struct xenvif *vif) 694 { 695 int err = 0; 696 char *node; 697 unsigned maxlen = strlen(dev->nodename) + sizeof("/rate"); 698 699 if (vif->credit_watch.node) 700 return -EADDRINUSE; 701 702 node = kmalloc(maxlen, GFP_KERNEL); 703 if (!node) 704 return -ENOMEM; 705 snprintf(node, maxlen, "%s/rate", dev->nodename); 706 vif->credit_watch.node = node; 707 vif->credit_watch.callback = xen_net_rate_changed; 708 err = register_xenbus_watch(&vif->credit_watch); 709 if (err) { 710 pr_err("Failed to set watcher %s\n", vif->credit_watch.node); 711 kfree(node); 712 vif->credit_watch.node = NULL; 713 vif->credit_watch.callback = NULL; 714 } 715 return err; 716 } 717 718 static void xen_unregister_credit_watch(struct xenvif *vif) 719 { 720 if (vif->credit_watch.node) { 721 unregister_xenbus_watch(&vif->credit_watch); 722 kfree(vif->credit_watch.node); 723 vif->credit_watch.node = NULL; 724 } 725 } 726 727 static void xen_mcast_ctrl_changed(struct xenbus_watch *watch, 728 const char **vec, unsigned int len) 729 { 730 struct xenvif *vif = container_of(watch, struct xenvif, 731 mcast_ctrl_watch); 732 struct xenbus_device *dev = xenvif_to_xenbus_device(vif); 733 int val; 734 735 if (xenbus_scanf(XBT_NIL, dev->otherend, 736 "request-multicast-control", "%d", &val) < 0) 737 val = 0; 738 vif->multicast_control = !!val; 739 } 740 741 static int xen_register_mcast_ctrl_watch(struct xenbus_device *dev, 742 struct xenvif *vif) 743 { 744 int err = 0; 745 char *node; 746 unsigned maxlen = strlen(dev->otherend) + 747 sizeof("/request-multicast-control"); 748 749 if (vif->mcast_ctrl_watch.node) { 750 pr_err_ratelimited("Watch is already registered\n"); 751 return -EADDRINUSE; 752 } 753 754 node = kmalloc(maxlen, GFP_KERNEL); 755 if (!node) { 756 pr_err("Failed to allocate memory for watch\n"); 757 return -ENOMEM; 758 } 759 snprintf(node, maxlen, "%s/request-multicast-control", 760 dev->otherend); 761 vif->mcast_ctrl_watch.node = node; 762 vif->mcast_ctrl_watch.callback = xen_mcast_ctrl_changed; 763 err = register_xenbus_watch(&vif->mcast_ctrl_watch); 764 if (err) { 765 pr_err("Failed to set watcher %s\n", 766 vif->mcast_ctrl_watch.node); 767 kfree(node); 768 vif->mcast_ctrl_watch.node = NULL; 769 vif->mcast_ctrl_watch.callback = NULL; 770 } 771 return err; 772 } 773 774 static void xen_unregister_mcast_ctrl_watch(struct xenvif *vif) 775 { 776 if (vif->mcast_ctrl_watch.node) { 777 unregister_xenbus_watch(&vif->mcast_ctrl_watch); 778 kfree(vif->mcast_ctrl_watch.node); 779 vif->mcast_ctrl_watch.node = NULL; 780 } 781 } 782 783 static void xen_register_watchers(struct xenbus_device *dev, 784 struct xenvif *vif) 785 { 786 xen_register_credit_watch(dev, vif); 787 xen_register_mcast_ctrl_watch(dev, vif); 788 } 789 790 static void xen_unregister_watchers(struct xenvif *vif) 791 { 792 xen_unregister_mcast_ctrl_watch(vif); 793 xen_unregister_credit_watch(vif); 794 } 795 796 static void unregister_hotplug_status_watch(struct backend_info *be) 797 { 798 if (be->have_hotplug_status_watch) { 799 unregister_xenbus_watch(&be->hotplug_status_watch); 800 kfree(be->hotplug_status_watch.node); 801 } 802 be->have_hotplug_status_watch = 0; 803 } 804 805 static void hotplug_status_changed(struct xenbus_watch *watch, 806 const char **vec, 807 unsigned int vec_size) 808 { 809 struct backend_info *be = container_of(watch, 810 struct backend_info, 811 hotplug_status_watch); 812 char *str; 813 unsigned int len; 814 815 str = xenbus_read(XBT_NIL, be->dev->nodename, "hotplug-status", &len); 816 if (IS_ERR(str)) 817 return; 818 if (len == sizeof("connected")-1 && !memcmp(str, "connected", len)) { 819 /* Complete any pending state change */ 820 xenbus_switch_state(be->dev, be->state); 821 822 /* Not interested in this watch anymore. */ 823 unregister_hotplug_status_watch(be); 824 } 825 kfree(str); 826 } 827 828 static void connect(struct backend_info *be) 829 { 830 int err; 831 struct xenbus_device *dev = be->dev; 832 unsigned long credit_bytes, credit_usec; 833 unsigned int queue_index; 834 unsigned int requested_num_queues; 835 struct xenvif_queue *queue; 836 837 /* Check whether the frontend requested multiple queues 838 * and read the number requested. 839 */ 840 err = xenbus_scanf(XBT_NIL, dev->otherend, 841 "multi-queue-num-queues", 842 "%u", &requested_num_queues); 843 if (err < 0) { 844 requested_num_queues = 1; /* Fall back to single queue */ 845 } else if (requested_num_queues > xenvif_max_queues) { 846 /* buggy or malicious guest */ 847 xenbus_dev_fatal(dev, err, 848 "guest requested %u queues, exceeding the maximum of %u.", 849 requested_num_queues, xenvif_max_queues); 850 return; 851 } 852 853 err = xen_net_read_mac(dev, be->vif->fe_dev_addr); 854 if (err) { 855 xenbus_dev_fatal(dev, err, "parsing %s/mac", dev->nodename); 856 return; 857 } 858 859 xen_net_read_rate(dev, &credit_bytes, &credit_usec); 860 xen_unregister_watchers(be->vif); 861 xen_register_watchers(dev, be->vif); 862 read_xenbus_vif_flags(be); 863 864 /* Use the number of queues requested by the frontend */ 865 be->vif->queues = vzalloc(requested_num_queues * 866 sizeof(struct xenvif_queue)); 867 if (!be->vif->queues) { 868 xenbus_dev_fatal(dev, -ENOMEM, 869 "allocating queues"); 870 return; 871 } 872 873 be->vif->num_queues = requested_num_queues; 874 be->vif->stalled_queues = requested_num_queues; 875 876 for (queue_index = 0; queue_index < requested_num_queues; ++queue_index) { 877 queue = &be->vif->queues[queue_index]; 878 queue->vif = be->vif; 879 queue->id = queue_index; 880 snprintf(queue->name, sizeof(queue->name), "%s-q%u", 881 be->vif->dev->name, queue->id); 882 883 err = xenvif_init_queue(queue); 884 if (err) { 885 /* xenvif_init_queue() cleans up after itself on 886 * failure, but we need to clean up any previously 887 * initialised queues. Set num_queues to i so that 888 * earlier queues can be destroyed using the regular 889 * disconnect logic. 890 */ 891 be->vif->num_queues = queue_index; 892 goto err; 893 } 894 895 queue->credit_bytes = credit_bytes; 896 queue->remaining_credit = credit_bytes; 897 queue->credit_usec = credit_usec; 898 899 err = connect_rings(be, queue); 900 if (err) { 901 /* connect_rings() cleans up after itself on failure, 902 * but we need to clean up after xenvif_init_queue() here, 903 * and also clean up any previously initialised queues. 904 */ 905 xenvif_deinit_queue(queue); 906 be->vif->num_queues = queue_index; 907 goto err; 908 } 909 } 910 911 #ifdef CONFIG_DEBUG_FS 912 xenvif_debugfs_addif(be->vif); 913 #endif /* CONFIG_DEBUG_FS */ 914 915 /* Initialisation completed, tell core driver the number of 916 * active queues. 917 */ 918 rtnl_lock(); 919 netif_set_real_num_tx_queues(be->vif->dev, requested_num_queues); 920 netif_set_real_num_rx_queues(be->vif->dev, requested_num_queues); 921 rtnl_unlock(); 922 923 xenvif_carrier_on(be->vif); 924 925 unregister_hotplug_status_watch(be); 926 err = xenbus_watch_pathfmt(dev, &be->hotplug_status_watch, 927 hotplug_status_changed, 928 "%s/%s", dev->nodename, "hotplug-status"); 929 if (!err) 930 be->have_hotplug_status_watch = 1; 931 932 netif_tx_wake_all_queues(be->vif->dev); 933 934 return; 935 936 err: 937 if (be->vif->num_queues > 0) 938 xenvif_disconnect(be->vif); /* Clean up existing queues */ 939 vfree(be->vif->queues); 940 be->vif->queues = NULL; 941 be->vif->num_queues = 0; 942 return; 943 } 944 945 946 static int connect_rings(struct backend_info *be, struct xenvif_queue *queue) 947 { 948 struct xenbus_device *dev = be->dev; 949 unsigned int num_queues = queue->vif->num_queues; 950 unsigned long tx_ring_ref, rx_ring_ref; 951 unsigned int tx_evtchn, rx_evtchn; 952 int err; 953 char *xspath; 954 size_t xspathsize; 955 const size_t xenstore_path_ext_size = 11; /* sufficient for "/queue-NNN" */ 956 957 /* If the frontend requested 1 queue, or we have fallen back 958 * to single queue due to lack of frontend support for multi- 959 * queue, expect the remaining XenStore keys in the toplevel 960 * directory. Otherwise, expect them in a subdirectory called 961 * queue-N. 962 */ 963 if (num_queues == 1) { 964 xspath = kzalloc(strlen(dev->otherend) + 1, GFP_KERNEL); 965 if (!xspath) { 966 xenbus_dev_fatal(dev, -ENOMEM, 967 "reading ring references"); 968 return -ENOMEM; 969 } 970 strcpy(xspath, dev->otherend); 971 } else { 972 xspathsize = strlen(dev->otherend) + xenstore_path_ext_size; 973 xspath = kzalloc(xspathsize, GFP_KERNEL); 974 if (!xspath) { 975 xenbus_dev_fatal(dev, -ENOMEM, 976 "reading ring references"); 977 return -ENOMEM; 978 } 979 snprintf(xspath, xspathsize, "%s/queue-%u", dev->otherend, 980 queue->id); 981 } 982 983 err = xenbus_gather(XBT_NIL, xspath, 984 "tx-ring-ref", "%lu", &tx_ring_ref, 985 "rx-ring-ref", "%lu", &rx_ring_ref, NULL); 986 if (err) { 987 xenbus_dev_fatal(dev, err, 988 "reading %s/ring-ref", 989 xspath); 990 goto err; 991 } 992 993 /* Try split event channels first, then single event channel. */ 994 err = xenbus_gather(XBT_NIL, xspath, 995 "event-channel-tx", "%u", &tx_evtchn, 996 "event-channel-rx", "%u", &rx_evtchn, NULL); 997 if (err < 0) { 998 err = xenbus_scanf(XBT_NIL, xspath, 999 "event-channel", "%u", &tx_evtchn); 1000 if (err < 0) { 1001 xenbus_dev_fatal(dev, err, 1002 "reading %s/event-channel(-tx/rx)", 1003 xspath); 1004 goto err; 1005 } 1006 rx_evtchn = tx_evtchn; 1007 } 1008 1009 /* Map the shared frame, irq etc. */ 1010 err = xenvif_connect(queue, tx_ring_ref, rx_ring_ref, 1011 tx_evtchn, rx_evtchn); 1012 if (err) { 1013 xenbus_dev_fatal(dev, err, 1014 "mapping shared-frames %lu/%lu port tx %u rx %u", 1015 tx_ring_ref, rx_ring_ref, 1016 tx_evtchn, rx_evtchn); 1017 goto err; 1018 } 1019 1020 err = 0; 1021 err: /* Regular return falls through with err == 0 */ 1022 kfree(xspath); 1023 return err; 1024 } 1025 1026 static int read_xenbus_vif_flags(struct backend_info *be) 1027 { 1028 struct xenvif *vif = be->vif; 1029 struct xenbus_device *dev = be->dev; 1030 unsigned int rx_copy; 1031 int err, val; 1032 1033 err = xenbus_scanf(XBT_NIL, dev->otherend, "request-rx-copy", "%u", 1034 &rx_copy); 1035 if (err == -ENOENT) { 1036 err = 0; 1037 rx_copy = 0; 1038 } 1039 if (err < 0) { 1040 xenbus_dev_fatal(dev, err, "reading %s/request-rx-copy", 1041 dev->otherend); 1042 return err; 1043 } 1044 if (!rx_copy) 1045 return -EOPNOTSUPP; 1046 1047 if (xenbus_scanf(XBT_NIL, dev->otherend, 1048 "feature-rx-notify", "%d", &val) < 0) 1049 val = 0; 1050 if (!val) { 1051 /* - Reduce drain timeout to poll more frequently for 1052 * Rx requests. 1053 * - Disable Rx stall detection. 1054 */ 1055 be->vif->drain_timeout = msecs_to_jiffies(30); 1056 be->vif->stall_timeout = 0; 1057 } 1058 1059 if (xenbus_scanf(XBT_NIL, dev->otherend, "feature-sg", 1060 "%d", &val) < 0) 1061 val = 0; 1062 vif->can_sg = !!val; 1063 1064 vif->gso_mask = 0; 1065 vif->gso_prefix_mask = 0; 1066 1067 if (xenbus_scanf(XBT_NIL, dev->otherend, "feature-gso-tcpv4", 1068 "%d", &val) < 0) 1069 val = 0; 1070 if (val) 1071 vif->gso_mask |= GSO_BIT(TCPV4); 1072 1073 if (xenbus_scanf(XBT_NIL, dev->otherend, "feature-gso-tcpv4-prefix", 1074 "%d", &val) < 0) 1075 val = 0; 1076 if (val) 1077 vif->gso_prefix_mask |= GSO_BIT(TCPV4); 1078 1079 if (xenbus_scanf(XBT_NIL, dev->otherend, "feature-gso-tcpv6", 1080 "%d", &val) < 0) 1081 val = 0; 1082 if (val) 1083 vif->gso_mask |= GSO_BIT(TCPV6); 1084 1085 if (xenbus_scanf(XBT_NIL, dev->otherend, "feature-gso-tcpv6-prefix", 1086 "%d", &val) < 0) 1087 val = 0; 1088 if (val) 1089 vif->gso_prefix_mask |= GSO_BIT(TCPV6); 1090 1091 if (vif->gso_mask & vif->gso_prefix_mask) { 1092 xenbus_dev_fatal(dev, err, 1093 "%s: gso and gso prefix flags are not " 1094 "mutually exclusive", 1095 dev->otherend); 1096 return -EOPNOTSUPP; 1097 } 1098 1099 if (xenbus_scanf(XBT_NIL, dev->otherend, "feature-no-csum-offload", 1100 "%d", &val) < 0) 1101 val = 0; 1102 vif->ip_csum = !val; 1103 1104 if (xenbus_scanf(XBT_NIL, dev->otherend, "feature-ipv6-csum-offload", 1105 "%d", &val) < 0) 1106 val = 0; 1107 vif->ipv6_csum = !!val; 1108 1109 return 0; 1110 } 1111 1112 static const struct xenbus_device_id netback_ids[] = { 1113 { "vif" }, 1114 { "" } 1115 }; 1116 1117 static struct xenbus_driver netback_driver = { 1118 .ids = netback_ids, 1119 .probe = netback_probe, 1120 .remove = netback_remove, 1121 .uevent = netback_uevent, 1122 .otherend_changed = frontend_changed, 1123 }; 1124 1125 int xenvif_xenbus_init(void) 1126 { 1127 return xenbus_register_backend(&netback_driver); 1128 } 1129 1130 void xenvif_xenbus_fini(void) 1131 { 1132 return xenbus_unregister_driver(&netback_driver); 1133 } 1134