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