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        if (be->vif) {
 496                xen_unregister_watchers(be->vif);
 497#ifdef CONFIG_DEBUG_FS
 498                xenvif_debugfs_delif(be->vif);
 499#endif /* CONFIG_DEBUG_FS */
 500                xenvif_disconnect_data(be->vif);
 501                xenvif_disconnect_ctrl(be->vif);
 502        }
 503}
 504
 505static void backend_connect(struct backend_info *be)
 506{
 507        if (be->vif)
 508                connect(be);
 509}
 510
 511static inline void backend_switch_state(struct backend_info *be,
 512                                        enum xenbus_state state)
 513{
 514        struct xenbus_device *dev = be->dev;
 515
 516        pr_debug("%s -> %s\n", dev->nodename, xenbus_strstate(state));
 517        be->state = state;
 518
 519        /* If we are waiting for a hotplug script then defer the
 520         * actual xenbus state change.
 521         */
 522        if (!be->have_hotplug_status_watch)
 523                xenbus_switch_state(dev, state);
 524}
 525
 526/* Handle backend state transitions:
 527 *
 528 * The backend state starts in Initialising and the following transitions are
 529 * allowed.
 530 *
 531 * Initialising -> InitWait -> Connected
 532 *          \
 533 *           \        ^    \         |
 534 *            \       |     \        |
 535 *             \      |      \       |
 536 *              \     |       \      |
 537 *               \    |        \     |
 538 *                \   |         \    |
 539 *                 V  |          V   V
 540 *
 541 *                  Closed  <-> Closing
 542 *
 543 * The state argument specifies the eventual state of the backend and the
 544 * function transitions to that state via the shortest path.
 545 */
 546static void set_backend_state(struct backend_info *be,
 547                              enum xenbus_state state)
 548{
 549        while (be->state != state) {
 550                switch (be->state) {
 551                case XenbusStateInitialising:
 552                        switch (state) {
 553                        case XenbusStateInitWait:
 554                        case XenbusStateConnected:
 555                        case XenbusStateClosing:
 556                                backend_switch_state(be, XenbusStateInitWait);
 557                                break;
 558                        case XenbusStateClosed:
 559                                backend_switch_state(be, XenbusStateClosed);
 560                                break;
 561                        default:
 562                                BUG();
 563                        }
 564                        break;
 565                case XenbusStateClosed:
 566                        switch (state) {
 567                        case XenbusStateInitWait:
 568                        case XenbusStateConnected:
 569                                backend_switch_state(be, XenbusStateInitWait);
 570                                break;
 571                        case XenbusStateClosing:
 572                                backend_switch_state(be, XenbusStateClosing);
 573                                break;
 574                        default:
 575                                BUG();
 576                        }
 577                        break;
 578                case XenbusStateInitWait:
 579                        switch (state) {
 580                        case XenbusStateConnected:
 581                                backend_connect(be);
 582                                backend_switch_state(be, XenbusStateConnected);
 583                                break;
 584                        case XenbusStateClosing:
 585                        case XenbusStateClosed:
 586                                backend_switch_state(be, XenbusStateClosing);
 587                                break;
 588                        default:
 589                                BUG();
 590                        }
 591                        break;
 592                case XenbusStateConnected:
 593                        switch (state) {
 594                        case XenbusStateInitWait:
 595                        case XenbusStateClosing:
 596                        case XenbusStateClosed:
 597                                backend_disconnect(be);
 598                                backend_switch_state(be, XenbusStateClosing);
 599                                break;
 600                        default:
 601                                BUG();
 602                        }
 603                        break;
 604                case XenbusStateClosing:
 605                        switch (state) {
 606                        case XenbusStateInitWait:
 607                        case XenbusStateConnected:
 608                        case XenbusStateClosed:
 609                                backend_switch_state(be, XenbusStateClosed);
 610                                break;
 611                        default:
 612                                BUG();
 613                        }
 614                        break;
 615                default:
 616                        BUG();
 617                }
 618        }
 619}
 620
 621/**
 622 * Callback received when the frontend's state changes.
 623 */
 624static void frontend_changed(struct xenbus_device *dev,
 625                             enum xenbus_state frontend_state)
 626{
 627        struct backend_info *be = dev_get_drvdata(&dev->dev);
 628
 629        pr_debug("%s -> %s\n", dev->otherend, xenbus_strstate(frontend_state));
 630
 631        be->frontend_state = frontend_state;
 632
 633        switch (frontend_state) {
 634        case XenbusStateInitialising:
 635                set_backend_state(be, XenbusStateInitWait);
 636                break;
 637
 638        case XenbusStateInitialised:
 639                break;
 640
 641        case XenbusStateConnected:
 642                set_backend_state(be, XenbusStateConnected);
 643                break;
 644
 645        case XenbusStateClosing:
 646                set_backend_state(be, XenbusStateClosing);
 647                break;
 648
 649        case XenbusStateClosed:
 650                set_backend_state(be, XenbusStateClosed);
 651                if (xenbus_dev_is_online(dev))
 652                        break;
 653                /* fall through if not online */
 654        case XenbusStateUnknown:
 655                set_backend_state(be, XenbusStateClosed);
 656                device_unregister(&dev->dev);
 657                break;
 658
 659        default:
 660                xenbus_dev_fatal(dev, -EINVAL, "saw state %d at frontend",
 661                                 frontend_state);
 662                break;
 663        }
 664}
 665
 666
 667static void xen_net_read_rate(struct xenbus_device *dev,
 668                              unsigned long *bytes, unsigned long *usec)
 669{
 670        char *s, *e;
 671        unsigned long b, u;
 672        char *ratestr;
 673
 674        /* Default to unlimited bandwidth. */
 675        *bytes = ~0UL;
 676        *usec = 0;
 677
 678        ratestr = xenbus_read(XBT_NIL, dev->nodename, "rate", NULL);
 679        if (IS_ERR(ratestr))
 680                return;
 681
 682        s = ratestr;
 683        b = simple_strtoul(s, &e, 10);
 684        if ((s == e) || (*e != ','))
 685                goto fail;
 686
 687        s = e + 1;
 688        u = simple_strtoul(s, &e, 10);
 689        if ((s == e) || (*e != '\0'))
 690                goto fail;
 691
 692        *bytes = b;
 693        *usec = u;
 694
 695        kfree(ratestr);
 696        return;
 697
 698 fail:
 699        pr_warn("Failed to parse network rate limit. Traffic unlimited.\n");
 700        kfree(ratestr);
 701}
 702
 703static int xen_net_read_mac(struct xenbus_device *dev, u8 mac[])
 704{
 705        char *s, *e, *macstr;
 706        int i;
 707
 708        macstr = s = xenbus_read(XBT_NIL, dev->nodename, "mac", NULL);
 709        if (IS_ERR(macstr))
 710                return PTR_ERR(macstr);
 711
 712        for (i = 0; i < ETH_ALEN; i++) {
 713                mac[i] = simple_strtoul(s, &e, 16);
 714                if ((s == e) || (*e != ((i == ETH_ALEN-1) ? '\0' : ':'))) {
 715                        kfree(macstr);
 716                        return -ENOENT;
 717                }
 718                s = e+1;
 719        }
 720
 721        kfree(macstr);
 722        return 0;
 723}
 724
 725static void xen_net_rate_changed(struct xenbus_watch *watch,
 726                                const char **vec, unsigned int len)
 727{
 728        struct xenvif *vif = container_of(watch, struct xenvif, credit_watch);
 729        struct xenbus_device *dev = xenvif_to_xenbus_device(vif);
 730        unsigned long   credit_bytes;
 731        unsigned long   credit_usec;
 732        unsigned int queue_index;
 733
 734        xen_net_read_rate(dev, &credit_bytes, &credit_usec);
 735        for (queue_index = 0; queue_index < vif->num_queues; queue_index++) {
 736                struct xenvif_queue *queue = &vif->queues[queue_index];
 737
 738                queue->credit_bytes = credit_bytes;
 739                queue->credit_usec = credit_usec;
 740                if (!mod_timer_pending(&queue->credit_timeout, jiffies) &&
 741                        queue->remaining_credit > queue->credit_bytes) {
 742                        queue->remaining_credit = queue->credit_bytes;
 743                }
 744        }
 745}
 746
 747static int xen_register_credit_watch(struct xenbus_device *dev,
 748                                     struct xenvif *vif)
 749{
 750        int err = 0;
 751        char *node;
 752        unsigned maxlen = strlen(dev->nodename) + sizeof("/rate");
 753
 754        if (vif->credit_watch.node)
 755                return -EADDRINUSE;
 756
 757        node = kmalloc(maxlen, GFP_KERNEL);
 758        if (!node)
 759                return -ENOMEM;
 760        snprintf(node, maxlen, "%s/rate", dev->nodename);
 761        vif->credit_watch.node = node;
 762        vif->credit_watch.callback = xen_net_rate_changed;
 763        err = register_xenbus_watch(&vif->credit_watch);
 764        if (err) {
 765                pr_err("Failed to set watcher %s\n", vif->credit_watch.node);
 766                kfree(node);
 767                vif->credit_watch.node = NULL;
 768                vif->credit_watch.callback = NULL;
 769        }
 770        return err;
 771}
 772
 773static void xen_unregister_credit_watch(struct xenvif *vif)
 774{
 775        if (vif->credit_watch.node) {
 776                unregister_xenbus_watch(&vif->credit_watch);
 777                kfree(vif->credit_watch.node);
 778                vif->credit_watch.node = NULL;
 779        }
 780}
 781
 782static void xen_mcast_ctrl_changed(struct xenbus_watch *watch,
 783                                   const char **vec, unsigned int len)
 784{
 785        struct xenvif *vif = container_of(watch, struct xenvif,
 786                                          mcast_ctrl_watch);
 787        struct xenbus_device *dev = xenvif_to_xenbus_device(vif);
 788        int val;
 789
 790        if (xenbus_scanf(XBT_NIL, dev->otherend,
 791                         "request-multicast-control", "%d", &val) < 0)
 792                val = 0;
 793        vif->multicast_control = !!val;
 794}
 795
 796static int xen_register_mcast_ctrl_watch(struct xenbus_device *dev,
 797                                         struct xenvif *vif)
 798{
 799        int err = 0;
 800        char *node;
 801        unsigned maxlen = strlen(dev->otherend) +
 802                sizeof("/request-multicast-control");
 803
 804        if (vif->mcast_ctrl_watch.node) {
 805                pr_err_ratelimited("Watch is already registered\n");
 806                return -EADDRINUSE;
 807        }
 808
 809        node = kmalloc(maxlen, GFP_KERNEL);
 810        if (!node) {
 811                pr_err("Failed to allocate memory for watch\n");
 812                return -ENOMEM;
 813        }
 814        snprintf(node, maxlen, "%s/request-multicast-control",
 815                 dev->otherend);
 816        vif->mcast_ctrl_watch.node = node;
 817        vif->mcast_ctrl_watch.callback = xen_mcast_ctrl_changed;
 818        err = register_xenbus_watch(&vif->mcast_ctrl_watch);
 819        if (err) {
 820                pr_err("Failed to set watcher %s\n",
 821                       vif->mcast_ctrl_watch.node);
 822                kfree(node);
 823                vif->mcast_ctrl_watch.node = NULL;
 824                vif->mcast_ctrl_watch.callback = NULL;
 825        }
 826        return err;
 827}
 828
 829static void xen_unregister_mcast_ctrl_watch(struct xenvif *vif)
 830{
 831        if (vif->mcast_ctrl_watch.node) {
 832                unregister_xenbus_watch(&vif->mcast_ctrl_watch);
 833                kfree(vif->mcast_ctrl_watch.node);
 834                vif->mcast_ctrl_watch.node = NULL;
 835        }
 836}
 837
 838static void xen_register_watchers(struct xenbus_device *dev,
 839                                  struct xenvif *vif)
 840{
 841        xen_register_credit_watch(dev, vif);
 842        xen_register_mcast_ctrl_watch(dev, vif);
 843}
 844
 845static void xen_unregister_watchers(struct xenvif *vif)
 846{
 847        xen_unregister_mcast_ctrl_watch(vif);
 848        xen_unregister_credit_watch(vif);
 849}
 850
 851static void unregister_hotplug_status_watch(struct backend_info *be)
 852{
 853        if (be->have_hotplug_status_watch) {
 854                unregister_xenbus_watch(&be->hotplug_status_watch);
 855                kfree(be->hotplug_status_watch.node);
 856        }
 857        be->have_hotplug_status_watch = 0;
 858}
 859
 860static void hotplug_status_changed(struct xenbus_watch *watch,
 861                                   const char **vec,
 862                                   unsigned int vec_size)
 863{
 864        struct backend_info *be = container_of(watch,
 865                                               struct backend_info,
 866                                               hotplug_status_watch);
 867        char *str;
 868        unsigned int len;
 869
 870        str = xenbus_read(XBT_NIL, be->dev->nodename, "hotplug-status", &len);
 871        if (IS_ERR(str))
 872                return;
 873        if (len == sizeof("connected")-1 && !memcmp(str, "connected", len)) {
 874                /* Complete any pending state change */
 875                xenbus_switch_state(be->dev, be->state);
 876
 877                /* Not interested in this watch anymore. */
 878                unregister_hotplug_status_watch(be);
 879        }
 880        kfree(str);
 881}
 882
 883static int connect_ctrl_ring(struct backend_info *be)
 884{
 885        struct xenbus_device *dev = be->dev;
 886        struct xenvif *vif = be->vif;
 887        unsigned int val;
 888        grant_ref_t ring_ref;
 889        unsigned int evtchn;
 890        int err;
 891
 892        err = xenbus_gather(XBT_NIL, dev->otherend,
 893                            "ctrl-ring-ref", "%u", &val, NULL);
 894        if (err)
 895                goto done; /* The frontend does not have a control ring */
 896
 897        ring_ref = val;
 898
 899        err = xenbus_gather(XBT_NIL, dev->otherend,
 900                            "event-channel-ctrl", "%u", &val, NULL);
 901        if (err) {
 902                xenbus_dev_fatal(dev, err,
 903                                 "reading %s/event-channel-ctrl",
 904                                 dev->otherend);
 905                goto fail;
 906        }
 907
 908        evtchn = val;
 909
 910        err = xenvif_connect_ctrl(vif, ring_ref, evtchn);
 911        if (err) {
 912                xenbus_dev_fatal(dev, err,
 913                                 "mapping shared-frame %u port %u",
 914                                 ring_ref, evtchn);
 915                goto fail;
 916        }
 917
 918done:
 919        return 0;
 920
 921fail:
 922        return err;
 923}
 924
 925static void connect(struct backend_info *be)
 926{
 927        int err;
 928        struct xenbus_device *dev = be->dev;
 929        unsigned long credit_bytes, credit_usec;
 930        unsigned int queue_index;
 931        unsigned int requested_num_queues;
 932        struct xenvif_queue *queue;
 933
 934        /* Check whether the frontend requested multiple queues
 935         * and read the number requested.
 936         */
 937        err = xenbus_scanf(XBT_NIL, dev->otherend,
 938                           "multi-queue-num-queues",
 939                           "%u", &requested_num_queues);
 940        if (err < 0) {
 941                requested_num_queues = 1; /* Fall back to single queue */
 942        } else if (requested_num_queues > xenvif_max_queues) {
 943                /* buggy or malicious guest */
 944                xenbus_dev_fatal(dev, err,
 945                                 "guest requested %u queues, exceeding the maximum of %u.",
 946                                 requested_num_queues, xenvif_max_queues);
 947                return;
 948        }
 949
 950        err = xen_net_read_mac(dev, be->vif->fe_dev_addr);
 951        if (err) {
 952                xenbus_dev_fatal(dev, err, "parsing %s/mac", dev->nodename);
 953                return;
 954        }
 955
 956        xen_net_read_rate(dev, &credit_bytes, &credit_usec);
 957        xen_unregister_watchers(be->vif);
 958        xen_register_watchers(dev, be->vif);
 959        read_xenbus_vif_flags(be);
 960
 961        err = connect_ctrl_ring(be);
 962        if (err) {
 963                xenbus_dev_fatal(dev, err, "connecting control ring");
 964                return;
 965        }
 966
 967        /* Use the number of queues requested by the frontend */
 968        be->vif->queues = vzalloc(requested_num_queues *
 969                                  sizeof(struct xenvif_queue));
 970        if (!be->vif->queues) {
 971                xenbus_dev_fatal(dev, -ENOMEM,
 972                                 "allocating queues");
 973                return;
 974        }
 975
 976        be->vif->num_queues = requested_num_queues;
 977        be->vif->stalled_queues = requested_num_queues;
 978
 979        for (queue_index = 0; queue_index < requested_num_queues; ++queue_index) {
 980                queue = &be->vif->queues[queue_index];
 981                queue->vif = be->vif;
 982                queue->id = queue_index;
 983                snprintf(queue->name, sizeof(queue->name), "%s-q%u",
 984                                be->vif->dev->name, queue->id);
 985
 986                err = xenvif_init_queue(queue);
 987                if (err) {
 988                        /* xenvif_init_queue() cleans up after itself on
 989                         * failure, but we need to clean up any previously
 990                         * initialised queues. Set num_queues to i so that
 991                         * earlier queues can be destroyed using the regular
 992                         * disconnect logic.
 993                         */
 994                        be->vif->num_queues = queue_index;
 995                        goto err;
 996                }
 997
 998                queue->credit_bytes = credit_bytes;
 999                queue->remaining_credit = credit_bytes;
1000                queue->credit_usec = credit_usec;
1001
1002                err = connect_data_rings(be, queue);
1003                if (err) {
1004                        /* connect_data_rings() cleans up after itself on
1005                         * failure, but we need to clean up after
1006                         * xenvif_init_queue() here, and also clean up any
1007                         * previously initialised queues.
1008                         */
1009                        xenvif_deinit_queue(queue);
1010                        be->vif->num_queues = queue_index;
1011                        goto err;
1012                }
1013        }
1014
1015#ifdef CONFIG_DEBUG_FS
1016        xenvif_debugfs_addif(be->vif);
1017#endif /* CONFIG_DEBUG_FS */
1018
1019        /* Initialisation completed, tell core driver the number of
1020         * active queues.
1021         */
1022        rtnl_lock();
1023        netif_set_real_num_tx_queues(be->vif->dev, requested_num_queues);
1024        netif_set_real_num_rx_queues(be->vif->dev, requested_num_queues);
1025        rtnl_unlock();
1026
1027        xenvif_carrier_on(be->vif);
1028
1029        unregister_hotplug_status_watch(be);
1030        err = xenbus_watch_pathfmt(dev, &be->hotplug_status_watch,
1031                                   hotplug_status_changed,
1032                                   "%s/%s", dev->nodename, "hotplug-status");
1033        if (!err)
1034                be->have_hotplug_status_watch = 1;
1035
1036        netif_tx_wake_all_queues(be->vif->dev);
1037
1038        return;
1039
1040err:
1041        if (be->vif->num_queues > 0)
1042                xenvif_disconnect_data(be->vif); /* Clean up existing queues */
1043        vfree(be->vif->queues);
1044        be->vif->queues = NULL;
1045        be->vif->num_queues = 0;
1046        xenvif_disconnect_ctrl(be->vif);
1047        return;
1048}
1049
1050
1051static int connect_data_rings(struct backend_info *be,
1052                              struct xenvif_queue *queue)
1053{
1054        struct xenbus_device *dev = be->dev;
1055        unsigned int num_queues = queue->vif->num_queues;
1056        unsigned long tx_ring_ref, rx_ring_ref;
1057        unsigned int tx_evtchn, rx_evtchn;
1058        int err;
1059        char *xspath;
1060        size_t xspathsize;
1061        const size_t xenstore_path_ext_size = 11; /* sufficient for "/queue-NNN" */
1062
1063        /* If the frontend requested 1 queue, or we have fallen back
1064         * to single queue due to lack of frontend support for multi-
1065         * queue, expect the remaining XenStore keys in the toplevel
1066         * directory. Otherwise, expect them in a subdirectory called
1067         * queue-N.
1068         */
1069        if (num_queues == 1) {
1070                xspath = kzalloc(strlen(dev->otherend) + 1, GFP_KERNEL);
1071                if (!xspath) {
1072                        xenbus_dev_fatal(dev, -ENOMEM,
1073                                         "reading ring references");
1074                        return -ENOMEM;
1075                }
1076                strcpy(xspath, dev->otherend);
1077        } else {
1078                xspathsize = strlen(dev->otherend) + xenstore_path_ext_size;
1079                xspath = kzalloc(xspathsize, GFP_KERNEL);
1080                if (!xspath) {
1081                        xenbus_dev_fatal(dev, -ENOMEM,
1082                                         "reading ring references");
1083                        return -ENOMEM;
1084                }
1085                snprintf(xspath, xspathsize, "%s/queue-%u", dev->otherend,
1086                         queue->id);
1087        }
1088
1089        err = xenbus_gather(XBT_NIL, xspath,
1090                            "tx-ring-ref", "%lu", &tx_ring_ref,
1091                            "rx-ring-ref", "%lu", &rx_ring_ref, NULL);
1092        if (err) {
1093                xenbus_dev_fatal(dev, err,
1094                                 "reading %s/ring-ref",
1095                                 xspath);
1096                goto err;
1097        }
1098
1099        /* Try split event channels first, then single event channel. */
1100        err = xenbus_gather(XBT_NIL, xspath,
1101                            "event-channel-tx", "%u", &tx_evtchn,
1102                            "event-channel-rx", "%u", &rx_evtchn, NULL);
1103        if (err < 0) {
1104                err = xenbus_scanf(XBT_NIL, xspath,
1105                                   "event-channel", "%u", &tx_evtchn);
1106                if (err < 0) {
1107                        xenbus_dev_fatal(dev, err,
1108                                         "reading %s/event-channel(-tx/rx)",
1109                                         xspath);
1110                        goto err;
1111                }
1112                rx_evtchn = tx_evtchn;
1113        }
1114
1115        /* Map the shared frame, irq etc. */
1116        err = xenvif_connect_data(queue, tx_ring_ref, rx_ring_ref,
1117                                  tx_evtchn, rx_evtchn);
1118        if (err) {
1119                xenbus_dev_fatal(dev, err,
1120                                 "mapping shared-frames %lu/%lu port tx %u rx %u",
1121                                 tx_ring_ref, rx_ring_ref,
1122                                 tx_evtchn, rx_evtchn);
1123                goto err;
1124        }
1125
1126        err = 0;
1127err: /* Regular return falls through with err == 0 */
1128        kfree(xspath);
1129        return err;
1130}
1131
1132static int read_xenbus_vif_flags(struct backend_info *be)
1133{
1134        struct xenvif *vif = be->vif;
1135        struct xenbus_device *dev = be->dev;
1136        unsigned int rx_copy;
1137        int err, val;
1138
1139        err = xenbus_scanf(XBT_NIL, dev->otherend, "request-rx-copy", "%u",
1140                           &rx_copy);
1141        if (err == -ENOENT) {
1142                err = 0;
1143                rx_copy = 0;
1144        }
1145        if (err < 0) {
1146                xenbus_dev_fatal(dev, err, "reading %s/request-rx-copy",
1147                                 dev->otherend);
1148                return err;
1149        }
1150        if (!rx_copy)
1151                return -EOPNOTSUPP;
1152
1153        if (xenbus_scanf(XBT_NIL, dev->otherend,
1154                         "feature-rx-notify", "%d", &val) < 0)
1155                val = 0;
1156        if (!val) {
1157                /* - Reduce drain timeout to poll more frequently for
1158                 *   Rx requests.
1159                 * - Disable Rx stall detection.
1160                 */
1161                be->vif->drain_timeout = msecs_to_jiffies(30);
1162                be->vif->stall_timeout = 0;
1163        }
1164
1165        if (xenbus_scanf(XBT_NIL, dev->otherend, "feature-sg",
1166                         "%d", &val) < 0)
1167                val = 0;
1168        vif->can_sg = !!val;
1169
1170        vif->gso_mask = 0;
1171
1172        if (xenbus_scanf(XBT_NIL, dev->otherend, "feature-gso-tcpv4",
1173                         "%d", &val) < 0)
1174                val = 0;
1175        if (val)
1176                vif->gso_mask |= GSO_BIT(TCPV4);
1177
1178        if (xenbus_scanf(XBT_NIL, dev->otherend, "feature-gso-tcpv6",
1179                         "%d", &val) < 0)
1180                val = 0;
1181        if (val)
1182                vif->gso_mask |= GSO_BIT(TCPV6);
1183
1184        if (xenbus_scanf(XBT_NIL, dev->otherend, "feature-no-csum-offload",
1185                         "%d", &val) < 0)
1186                val = 0;
1187        vif->ip_csum = !val;
1188
1189        if (xenbus_scanf(XBT_NIL, dev->otherend, "feature-ipv6-csum-offload",
1190                         "%d", &val) < 0)
1191                val = 0;
1192        vif->ipv6_csum = !!val;
1193
1194        return 0;
1195}
1196
1197static const struct xenbus_device_id netback_ids[] = {
1198        { "vif" },
1199        { "" }
1200};
1201
1202static struct xenbus_driver netback_driver = {
1203        .ids = netback_ids,
1204        .probe = netback_probe,
1205        .remove = netback_remove,
1206        .uevent = netback_uevent,
1207        .otherend_changed = frontend_changed,
1208};
1209
1210int xenvif_xenbus_init(void)
1211{
1212        return xenbus_register_backend(&netback_driver);
1213}
1214
1215void xenvif_xenbus_fini(void)
1216{
1217        return xenbus_unregister_driver(&netback_driver);
1218}
1219