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