linux/drivers/xen/xenbus/xenbus_client.c
<<
>>
Prefs
   1/******************************************************************************
   2 * Client-facing interface for the Xenbus driver.  In other words, the
   3 * interface between the Xenbus and the device-specific code, be it the
   4 * frontend or the backend of that driver.
   5 *
   6 * Copyright (C) 2005 XenSource Ltd
   7 *
   8 * This program is free software; you can redistribute it and/or
   9 * modify it under the terms of the GNU General Public License version 2
  10 * as published by the Free Software Foundation; or, when distributed
  11 * separately from the Linux kernel or incorporated into other
  12 * software packages, subject to the following license:
  13 *
  14 * Permission is hereby granted, free of charge, to any person obtaining a copy
  15 * of this source file (the "Software"), to deal in the Software without
  16 * restriction, including without limitation the rights to use, copy, modify,
  17 * merge, publish, distribute, sublicense, and/or sell copies of the Software,
  18 * and to permit persons to whom the Software is furnished to do so, subject to
  19 * the following conditions:
  20 *
  21 * The above copyright notice and this permission notice shall be included in
  22 * all copies or substantial portions of the Software.
  23 *
  24 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  25 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  26 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  27 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  28 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
  29 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  30 * IN THE SOFTWARE.
  31 */
  32
  33#include <linux/mm.h>
  34#include <linux/slab.h>
  35#include <linux/types.h>
  36#include <linux/spinlock.h>
  37#include <linux/vmalloc.h>
  38#include <linux/export.h>
  39#include <asm/xen/hypervisor.h>
  40#include <xen/page.h>
  41#include <xen/interface/xen.h>
  42#include <xen/interface/event_channel.h>
  43#include <xen/balloon.h>
  44#include <xen/events.h>
  45#include <xen/grant_table.h>
  46#include <xen/xenbus.h>
  47#include <xen/xen.h>
  48#include <xen/features.h>
  49
  50#include "xenbus.h"
  51
  52#define XENBUS_PAGES(_grants)   (DIV_ROUND_UP(_grants, XEN_PFN_PER_PAGE))
  53
  54#define XENBUS_MAX_RING_PAGES   (XENBUS_PAGES(XENBUS_MAX_RING_GRANTS))
  55
  56struct xenbus_map_node {
  57        struct list_head next;
  58        union {
  59                struct {
  60                        struct vm_struct *area;
  61                } pv;
  62                struct {
  63                        struct page *pages[XENBUS_MAX_RING_PAGES];
  64                        unsigned long addrs[XENBUS_MAX_RING_GRANTS];
  65                        void *addr;
  66                } hvm;
  67        };
  68        grant_handle_t handles[XENBUS_MAX_RING_GRANTS];
  69        unsigned int   nr_handles;
  70};
  71
  72struct map_ring_valloc {
  73        struct xenbus_map_node *node;
  74
  75        /* Why do we need two arrays? See comment of __xenbus_map_ring */
  76        union {
  77                unsigned long addrs[XENBUS_MAX_RING_GRANTS];
  78                pte_t *ptes[XENBUS_MAX_RING_GRANTS];
  79        };
  80        phys_addr_t phys_addrs[XENBUS_MAX_RING_GRANTS];
  81
  82        struct gnttab_map_grant_ref map[XENBUS_MAX_RING_GRANTS];
  83        struct gnttab_unmap_grant_ref unmap[XENBUS_MAX_RING_GRANTS];
  84
  85        unsigned int idx;       /* HVM only. */
  86};
  87
  88static DEFINE_SPINLOCK(xenbus_valloc_lock);
  89static LIST_HEAD(xenbus_valloc_pages);
  90
  91struct xenbus_ring_ops {
  92        int (*map)(struct xenbus_device *dev, struct map_ring_valloc *info,
  93                   grant_ref_t *gnt_refs, unsigned int nr_grefs,
  94                   void **vaddr);
  95        int (*unmap)(struct xenbus_device *dev, void *vaddr);
  96};
  97
  98static const struct xenbus_ring_ops *ring_ops __read_mostly;
  99
 100const char *xenbus_strstate(enum xenbus_state state)
 101{
 102        static const char *const name[] = {
 103                [ XenbusStateUnknown      ] = "Unknown",
 104                [ XenbusStateInitialising ] = "Initialising",
 105                [ XenbusStateInitWait     ] = "InitWait",
 106                [ XenbusStateInitialised  ] = "Initialised",
 107                [ XenbusStateConnected    ] = "Connected",
 108                [ XenbusStateClosing      ] = "Closing",
 109                [ XenbusStateClosed       ] = "Closed",
 110                [XenbusStateReconfiguring] = "Reconfiguring",
 111                [XenbusStateReconfigured] = "Reconfigured",
 112        };
 113        return (state < ARRAY_SIZE(name)) ? name[state] : "INVALID";
 114}
 115EXPORT_SYMBOL_GPL(xenbus_strstate);
 116
 117/**
 118 * xenbus_watch_path - register a watch
 119 * @dev: xenbus device
 120 * @path: path to watch
 121 * @watch: watch to register
 122 * @callback: callback to register
 123 *
 124 * Register a @watch on the given path, using the given xenbus_watch structure
 125 * for storage, and the given @callback function as the callback.  Return 0 on
 126 * success, or -errno on error.  On success, the given @path will be saved as
 127 * @watch->node, and remains the caller's to free.  On error, @watch->node will
 128 * be NULL, the device will switch to %XenbusStateClosing, and the error will
 129 * be saved in the store.
 130 */
 131int xenbus_watch_path(struct xenbus_device *dev, const char *path,
 132                      struct xenbus_watch *watch,
 133                      void (*callback)(struct xenbus_watch *,
 134                                       const char *, const char *))
 135{
 136        int err;
 137
 138        watch->node = path;
 139        watch->callback = callback;
 140
 141        err = register_xenbus_watch(watch);
 142
 143        if (err) {
 144                watch->node = NULL;
 145                watch->callback = NULL;
 146                xenbus_dev_fatal(dev, err, "adding watch on %s", path);
 147        }
 148
 149        return err;
 150}
 151EXPORT_SYMBOL_GPL(xenbus_watch_path);
 152
 153
 154/**
 155 * xenbus_watch_pathfmt - register a watch on a sprintf-formatted path
 156 * @dev: xenbus device
 157 * @watch: watch to register
 158 * @callback: callback to register
 159 * @pathfmt: format of path to watch
 160 *
 161 * Register a watch on the given @path, using the given xenbus_watch
 162 * structure for storage, and the given @callback function as the callback.
 163 * Return 0 on success, or -errno on error.  On success, the watched path
 164 * (@path/@path2) will be saved as @watch->node, and becomes the caller's to
 165 * kfree().  On error, watch->node will be NULL, so the caller has nothing to
 166 * free, the device will switch to %XenbusStateClosing, and the error will be
 167 * saved in the store.
 168 */
 169int xenbus_watch_pathfmt(struct xenbus_device *dev,
 170                         struct xenbus_watch *watch,
 171                         void (*callback)(struct xenbus_watch *,
 172                                          const char *, const char *),
 173                         const char *pathfmt, ...)
 174{
 175        int err;
 176        va_list ap;
 177        char *path;
 178
 179        va_start(ap, pathfmt);
 180        path = kvasprintf(GFP_NOIO | __GFP_HIGH, pathfmt, ap);
 181        va_end(ap);
 182
 183        if (!path) {
 184                xenbus_dev_fatal(dev, -ENOMEM, "allocating path for watch");
 185                return -ENOMEM;
 186        }
 187        err = xenbus_watch_path(dev, path, watch, callback);
 188
 189        if (err)
 190                kfree(path);
 191        return err;
 192}
 193EXPORT_SYMBOL_GPL(xenbus_watch_pathfmt);
 194
 195static void xenbus_switch_fatal(struct xenbus_device *, int, int,
 196                                const char *, ...);
 197
 198static int
 199__xenbus_switch_state(struct xenbus_device *dev,
 200                      enum xenbus_state state, int depth)
 201{
 202        /* We check whether the state is currently set to the given value, and
 203           if not, then the state is set.  We don't want to unconditionally
 204           write the given state, because we don't want to fire watches
 205           unnecessarily.  Furthermore, if the node has gone, we don't write
 206           to it, as the device will be tearing down, and we don't want to
 207           resurrect that directory.
 208
 209           Note that, because of this cached value of our state, this
 210           function will not take a caller's Xenstore transaction
 211           (something it was trying to in the past) because dev->state
 212           would not get reset if the transaction was aborted.
 213         */
 214
 215        struct xenbus_transaction xbt;
 216        int current_state;
 217        int err, abort;
 218
 219        if (state == dev->state)
 220                return 0;
 221
 222again:
 223        abort = 1;
 224
 225        err = xenbus_transaction_start(&xbt);
 226        if (err) {
 227                xenbus_switch_fatal(dev, depth, err, "starting transaction");
 228                return 0;
 229        }
 230
 231        err = xenbus_scanf(xbt, dev->nodename, "state", "%d", &current_state);
 232        if (err != 1)
 233                goto abort;
 234
 235        err = xenbus_printf(xbt, dev->nodename, "state", "%d", state);
 236        if (err) {
 237                xenbus_switch_fatal(dev, depth, err, "writing new state");
 238                goto abort;
 239        }
 240
 241        abort = 0;
 242abort:
 243        err = xenbus_transaction_end(xbt, abort);
 244        if (err) {
 245                if (err == -EAGAIN && !abort)
 246                        goto again;
 247                xenbus_switch_fatal(dev, depth, err, "ending transaction");
 248        } else
 249                dev->state = state;
 250
 251        return 0;
 252}
 253
 254/**
 255 * xenbus_switch_state
 256 * @dev: xenbus device
 257 * @state: new state
 258 *
 259 * Advertise in the store a change of the given driver to the given new_state.
 260 * Return 0 on success, or -errno on error.  On error, the device will switch
 261 * to XenbusStateClosing, and the error will be saved in the store.
 262 */
 263int xenbus_switch_state(struct xenbus_device *dev, enum xenbus_state state)
 264{
 265        return __xenbus_switch_state(dev, state, 0);
 266}
 267
 268EXPORT_SYMBOL_GPL(xenbus_switch_state);
 269
 270int xenbus_frontend_closed(struct xenbus_device *dev)
 271{
 272        xenbus_switch_state(dev, XenbusStateClosed);
 273        complete(&dev->down);
 274        return 0;
 275}
 276EXPORT_SYMBOL_GPL(xenbus_frontend_closed);
 277
 278static void xenbus_va_dev_error(struct xenbus_device *dev, int err,
 279                                const char *fmt, va_list ap)
 280{
 281        unsigned int len;
 282        char *printf_buffer;
 283        char *path_buffer;
 284
 285#define PRINTF_BUFFER_SIZE 4096
 286
 287        printf_buffer = kmalloc(PRINTF_BUFFER_SIZE, GFP_KERNEL);
 288        if (!printf_buffer)
 289                return;
 290
 291        len = sprintf(printf_buffer, "%i ", -err);
 292        vsnprintf(printf_buffer + len, PRINTF_BUFFER_SIZE - len, fmt, ap);
 293
 294        dev_err(&dev->dev, "%s\n", printf_buffer);
 295
 296        path_buffer = kasprintf(GFP_KERNEL, "error/%s", dev->nodename);
 297        if (path_buffer)
 298                xenbus_write(XBT_NIL, path_buffer, "error", printf_buffer);
 299
 300        kfree(printf_buffer);
 301        kfree(path_buffer);
 302}
 303
 304/**
 305 * xenbus_dev_error
 306 * @dev: xenbus device
 307 * @err: error to report
 308 * @fmt: error message format
 309 *
 310 * Report the given negative errno into the store, along with the given
 311 * formatted message.
 312 */
 313void xenbus_dev_error(struct xenbus_device *dev, int err, const char *fmt, ...)
 314{
 315        va_list ap;
 316
 317        va_start(ap, fmt);
 318        xenbus_va_dev_error(dev, err, fmt, ap);
 319        va_end(ap);
 320}
 321EXPORT_SYMBOL_GPL(xenbus_dev_error);
 322
 323/**
 324 * xenbus_dev_fatal
 325 * @dev: xenbus device
 326 * @err: error to report
 327 * @fmt: error message format
 328 *
 329 * Equivalent to xenbus_dev_error(dev, err, fmt, args), followed by
 330 * xenbus_switch_state(dev, XenbusStateClosing) to schedule an orderly
 331 * closedown of this driver and its peer.
 332 */
 333
 334void xenbus_dev_fatal(struct xenbus_device *dev, int err, const char *fmt, ...)
 335{
 336        va_list ap;
 337
 338        va_start(ap, fmt);
 339        xenbus_va_dev_error(dev, err, fmt, ap);
 340        va_end(ap);
 341
 342        xenbus_switch_state(dev, XenbusStateClosing);
 343}
 344EXPORT_SYMBOL_GPL(xenbus_dev_fatal);
 345
 346/**
 347 * Equivalent to xenbus_dev_fatal(dev, err, fmt, args), but helps
 348 * avoiding recursion within xenbus_switch_state.
 349 */
 350static void xenbus_switch_fatal(struct xenbus_device *dev, int depth, int err,
 351                                const char *fmt, ...)
 352{
 353        va_list ap;
 354
 355        va_start(ap, fmt);
 356        xenbus_va_dev_error(dev, err, fmt, ap);
 357        va_end(ap);
 358
 359        if (!depth)
 360                __xenbus_switch_state(dev, XenbusStateClosing, 1);
 361}
 362
 363/**
 364 * xenbus_grant_ring
 365 * @dev: xenbus device
 366 * @vaddr: starting virtual address of the ring
 367 * @nr_pages: number of pages to be granted
 368 * @grefs: grant reference array to be filled in
 369 *
 370 * Grant access to the given @vaddr to the peer of the given device.
 371 * Then fill in @grefs with grant references.  Return 0 on success, or
 372 * -errno on error.  On error, the device will switch to
 373 * XenbusStateClosing, and the error will be saved in the store.
 374 */
 375int xenbus_grant_ring(struct xenbus_device *dev, void *vaddr,
 376                      unsigned int nr_pages, grant_ref_t *grefs)
 377{
 378        int err;
 379        int i, j;
 380
 381        for (i = 0; i < nr_pages; i++) {
 382                unsigned long gfn;
 383
 384                if (is_vmalloc_addr(vaddr))
 385                        gfn = pfn_to_gfn(vmalloc_to_pfn(vaddr));
 386                else
 387                        gfn = virt_to_gfn(vaddr);
 388
 389                err = gnttab_grant_foreign_access(dev->otherend_id, gfn, 0);
 390                if (err < 0) {
 391                        xenbus_dev_fatal(dev, err,
 392                                         "granting access to ring page");
 393                        goto fail;
 394                }
 395                grefs[i] = err;
 396
 397                vaddr = vaddr + XEN_PAGE_SIZE;
 398        }
 399
 400        return 0;
 401
 402fail:
 403        for (j = 0; j < i; j++)
 404                gnttab_end_foreign_access_ref(grefs[j], 0);
 405        return err;
 406}
 407EXPORT_SYMBOL_GPL(xenbus_grant_ring);
 408
 409
 410/**
 411 * Allocate an event channel for the given xenbus_device, assigning the newly
 412 * created local port to *port.  Return 0 on success, or -errno on error.  On
 413 * error, the device will switch to XenbusStateClosing, and the error will be
 414 * saved in the store.
 415 */
 416int xenbus_alloc_evtchn(struct xenbus_device *dev, evtchn_port_t *port)
 417{
 418        struct evtchn_alloc_unbound alloc_unbound;
 419        int err;
 420
 421        alloc_unbound.dom = DOMID_SELF;
 422        alloc_unbound.remote_dom = dev->otherend_id;
 423
 424        err = HYPERVISOR_event_channel_op(EVTCHNOP_alloc_unbound,
 425                                          &alloc_unbound);
 426        if (err)
 427                xenbus_dev_fatal(dev, err, "allocating event channel");
 428        else
 429                *port = alloc_unbound.port;
 430
 431        return err;
 432}
 433EXPORT_SYMBOL_GPL(xenbus_alloc_evtchn);
 434
 435
 436/**
 437 * Free an existing event channel. Returns 0 on success or -errno on error.
 438 */
 439int xenbus_free_evtchn(struct xenbus_device *dev, evtchn_port_t port)
 440{
 441        struct evtchn_close close;
 442        int err;
 443
 444        close.port = port;
 445
 446        err = HYPERVISOR_event_channel_op(EVTCHNOP_close, &close);
 447        if (err)
 448                xenbus_dev_error(dev, err, "freeing event channel %u", port);
 449
 450        return err;
 451}
 452EXPORT_SYMBOL_GPL(xenbus_free_evtchn);
 453
 454
 455/**
 456 * xenbus_map_ring_valloc
 457 * @dev: xenbus device
 458 * @gnt_refs: grant reference array
 459 * @nr_grefs: number of grant references
 460 * @vaddr: pointer to address to be filled out by mapping
 461 *
 462 * Map @nr_grefs pages of memory into this domain from another
 463 * domain's grant table.  xenbus_map_ring_valloc allocates @nr_grefs
 464 * pages of virtual address space, maps the pages to that address, and
 465 * sets *vaddr to that address.  Returns 0 on success, and -errno on
 466 * error. If an error is returned, device will switch to
 467 * XenbusStateClosing and the error message will be saved in XenStore.
 468 */
 469int xenbus_map_ring_valloc(struct xenbus_device *dev, grant_ref_t *gnt_refs,
 470                           unsigned int nr_grefs, void **vaddr)
 471{
 472        int err;
 473        struct map_ring_valloc *info;
 474
 475        *vaddr = NULL;
 476
 477        if (nr_grefs > XENBUS_MAX_RING_GRANTS)
 478                return -EINVAL;
 479
 480        info = kzalloc(sizeof(*info), GFP_KERNEL);
 481        if (!info)
 482                return -ENOMEM;
 483
 484        info->node = kzalloc(sizeof(*info->node), GFP_KERNEL);
 485        if (!info->node)
 486                err = -ENOMEM;
 487        else
 488                err = ring_ops->map(dev, info, gnt_refs, nr_grefs, vaddr);
 489
 490        kfree(info->node);
 491        kfree(info);
 492        return err;
 493}
 494EXPORT_SYMBOL_GPL(xenbus_map_ring_valloc);
 495
 496/* N.B. sizeof(phys_addr_t) doesn't always equal to sizeof(unsigned
 497 * long), e.g. 32-on-64.  Caller is responsible for preparing the
 498 * right array to feed into this function */
 499static int __xenbus_map_ring(struct xenbus_device *dev,
 500                             grant_ref_t *gnt_refs,
 501                             unsigned int nr_grefs,
 502                             grant_handle_t *handles,
 503                             struct map_ring_valloc *info,
 504                             unsigned int flags,
 505                             bool *leaked)
 506{
 507        int i, j;
 508
 509        if (nr_grefs > XENBUS_MAX_RING_GRANTS)
 510                return -EINVAL;
 511
 512        for (i = 0; i < nr_grefs; i++) {
 513                gnttab_set_map_op(&info->map[i], info->phys_addrs[i], flags,
 514                                  gnt_refs[i], dev->otherend_id);
 515                handles[i] = INVALID_GRANT_HANDLE;
 516        }
 517
 518        gnttab_batch_map(info->map, i);
 519
 520        for (i = 0; i < nr_grefs; i++) {
 521                if (info->map[i].status != GNTST_okay) {
 522                        xenbus_dev_fatal(dev, info->map[i].status,
 523                                         "mapping in shared page %d from domain %d",
 524                                         gnt_refs[i], dev->otherend_id);
 525                        goto fail;
 526                } else
 527                        handles[i] = info->map[i].handle;
 528        }
 529
 530        return 0;
 531
 532 fail:
 533        for (i = j = 0; i < nr_grefs; i++) {
 534                if (handles[i] != INVALID_GRANT_HANDLE) {
 535                        gnttab_set_unmap_op(&info->unmap[j],
 536                                            info->phys_addrs[i],
 537                                            GNTMAP_host_map, handles[i]);
 538                        j++;
 539                }
 540        }
 541
 542        if (HYPERVISOR_grant_table_op(GNTTABOP_unmap_grant_ref, info->unmap, j))
 543                BUG();
 544
 545        *leaked = false;
 546        for (i = 0; i < j; i++) {
 547                if (info->unmap[i].status != GNTST_okay) {
 548                        *leaked = true;
 549                        break;
 550                }
 551        }
 552
 553        return -ENOENT;
 554}
 555
 556/**
 557 * xenbus_unmap_ring
 558 * @dev: xenbus device
 559 * @handles: grant handle array
 560 * @nr_handles: number of handles in the array
 561 * @vaddrs: addresses to unmap
 562 *
 563 * Unmap memory in this domain that was imported from another domain.
 564 * Returns 0 on success and returns GNTST_* on error
 565 * (see xen/include/interface/grant_table.h).
 566 */
 567static int xenbus_unmap_ring(struct xenbus_device *dev, grant_handle_t *handles,
 568                             unsigned int nr_handles, unsigned long *vaddrs)
 569{
 570        struct gnttab_unmap_grant_ref unmap[XENBUS_MAX_RING_GRANTS];
 571        int i;
 572        int err;
 573
 574        if (nr_handles > XENBUS_MAX_RING_GRANTS)
 575                return -EINVAL;
 576
 577        for (i = 0; i < nr_handles; i++)
 578                gnttab_set_unmap_op(&unmap[i], vaddrs[i],
 579                                    GNTMAP_host_map, handles[i]);
 580
 581        if (HYPERVISOR_grant_table_op(GNTTABOP_unmap_grant_ref, unmap, i))
 582                BUG();
 583
 584        err = GNTST_okay;
 585        for (i = 0; i < nr_handles; i++) {
 586                if (unmap[i].status != GNTST_okay) {
 587                        xenbus_dev_error(dev, unmap[i].status,
 588                                         "unmapping page at handle %d error %d",
 589                                         handles[i], unmap[i].status);
 590                        err = unmap[i].status;
 591                        break;
 592                }
 593        }
 594
 595        return err;
 596}
 597
 598static void xenbus_map_ring_setup_grant_hvm(unsigned long gfn,
 599                                            unsigned int goffset,
 600                                            unsigned int len,
 601                                            void *data)
 602{
 603        struct map_ring_valloc *info = data;
 604        unsigned long vaddr = (unsigned long)gfn_to_virt(gfn);
 605
 606        info->phys_addrs[info->idx] = vaddr;
 607        info->addrs[info->idx] = vaddr;
 608
 609        info->idx++;
 610}
 611
 612static int xenbus_map_ring_hvm(struct xenbus_device *dev,
 613                               struct map_ring_valloc *info,
 614                               grant_ref_t *gnt_ref,
 615                               unsigned int nr_grefs,
 616                               void **vaddr)
 617{
 618        struct xenbus_map_node *node = info->node;
 619        int err;
 620        void *addr;
 621        bool leaked = false;
 622        unsigned int nr_pages = XENBUS_PAGES(nr_grefs);
 623
 624        err = xen_alloc_unpopulated_pages(nr_pages, node->hvm.pages);
 625        if (err)
 626                goto out_err;
 627
 628        gnttab_foreach_grant(node->hvm.pages, nr_grefs,
 629                             xenbus_map_ring_setup_grant_hvm,
 630                             info);
 631
 632        err = __xenbus_map_ring(dev, gnt_ref, nr_grefs, node->handles,
 633                                info, GNTMAP_host_map, &leaked);
 634        node->nr_handles = nr_grefs;
 635
 636        if (err)
 637                goto out_free_ballooned_pages;
 638
 639        addr = vmap(node->hvm.pages, nr_pages, VM_MAP | VM_IOREMAP,
 640                    PAGE_KERNEL);
 641        if (!addr) {
 642                err = -ENOMEM;
 643                goto out_xenbus_unmap_ring;
 644        }
 645
 646        node->hvm.addr = addr;
 647
 648        spin_lock(&xenbus_valloc_lock);
 649        list_add(&node->next, &xenbus_valloc_pages);
 650        spin_unlock(&xenbus_valloc_lock);
 651
 652        *vaddr = addr;
 653        info->node = NULL;
 654
 655        return 0;
 656
 657 out_xenbus_unmap_ring:
 658        if (!leaked)
 659                xenbus_unmap_ring(dev, node->handles, nr_grefs, info->addrs);
 660        else
 661                pr_alert("leaking %p size %u page(s)",
 662                         addr, nr_pages);
 663 out_free_ballooned_pages:
 664        if (!leaked)
 665                xen_free_unpopulated_pages(nr_pages, node->hvm.pages);
 666 out_err:
 667        return err;
 668}
 669
 670/**
 671 * xenbus_unmap_ring_vfree
 672 * @dev: xenbus device
 673 * @vaddr: addr to unmap
 674 *
 675 * Based on Rusty Russell's skeleton driver's unmap_page.
 676 * Unmap a page of memory in this domain that was imported from another domain.
 677 * Use xenbus_unmap_ring_vfree if you mapped in your memory with
 678 * xenbus_map_ring_valloc (it will free the virtual address space).
 679 * Returns 0 on success and returns GNTST_* on error
 680 * (see xen/include/interface/grant_table.h).
 681 */
 682int xenbus_unmap_ring_vfree(struct xenbus_device *dev, void *vaddr)
 683{
 684        return ring_ops->unmap(dev, vaddr);
 685}
 686EXPORT_SYMBOL_GPL(xenbus_unmap_ring_vfree);
 687
 688#ifdef CONFIG_XEN_PV
 689static int xenbus_map_ring_pv(struct xenbus_device *dev,
 690                              struct map_ring_valloc *info,
 691                              grant_ref_t *gnt_refs,
 692                              unsigned int nr_grefs,
 693                              void **vaddr)
 694{
 695        struct xenbus_map_node *node = info->node;
 696        struct vm_struct *area;
 697        int err = GNTST_okay;
 698        int i;
 699        bool leaked;
 700
 701        area = alloc_vm_area(XEN_PAGE_SIZE * nr_grefs, info->ptes);
 702        if (!area)
 703                return -ENOMEM;
 704
 705        for (i = 0; i < nr_grefs; i++)
 706                info->phys_addrs[i] =
 707                        arbitrary_virt_to_machine(info->ptes[i]).maddr;
 708
 709        err = __xenbus_map_ring(dev, gnt_refs, nr_grefs, node->handles,
 710                                info, GNTMAP_host_map | GNTMAP_contains_pte,
 711                                &leaked);
 712        if (err)
 713                goto failed;
 714
 715        node->nr_handles = nr_grefs;
 716        node->pv.area = area;
 717
 718        spin_lock(&xenbus_valloc_lock);
 719        list_add(&node->next, &xenbus_valloc_pages);
 720        spin_unlock(&xenbus_valloc_lock);
 721
 722        *vaddr = area->addr;
 723        info->node = NULL;
 724
 725        return 0;
 726
 727failed:
 728        if (!leaked)
 729                free_vm_area(area);
 730        else
 731                pr_alert("leaking VM area %p size %u page(s)", area, nr_grefs);
 732
 733        return err;
 734}
 735
 736static int xenbus_unmap_ring_pv(struct xenbus_device *dev, void *vaddr)
 737{
 738        struct xenbus_map_node *node;
 739        struct gnttab_unmap_grant_ref unmap[XENBUS_MAX_RING_GRANTS];
 740        unsigned int level;
 741        int i;
 742        bool leaked = false;
 743        int err;
 744
 745        spin_lock(&xenbus_valloc_lock);
 746        list_for_each_entry(node, &xenbus_valloc_pages, next) {
 747                if (node->pv.area->addr == vaddr) {
 748                        list_del(&node->next);
 749                        goto found;
 750                }
 751        }
 752        node = NULL;
 753 found:
 754        spin_unlock(&xenbus_valloc_lock);
 755
 756        if (!node) {
 757                xenbus_dev_error(dev, -ENOENT,
 758                                 "can't find mapped virtual address %p", vaddr);
 759                return GNTST_bad_virt_addr;
 760        }
 761
 762        for (i = 0; i < node->nr_handles; i++) {
 763                unsigned long addr;
 764
 765                memset(&unmap[i], 0, sizeof(unmap[i]));
 766                addr = (unsigned long)vaddr + (XEN_PAGE_SIZE * i);
 767                unmap[i].host_addr = arbitrary_virt_to_machine(
 768                        lookup_address(addr, &level)).maddr;
 769                unmap[i].dev_bus_addr = 0;
 770                unmap[i].handle = node->handles[i];
 771        }
 772
 773        if (HYPERVISOR_grant_table_op(GNTTABOP_unmap_grant_ref, unmap, i))
 774                BUG();
 775
 776        err = GNTST_okay;
 777        leaked = false;
 778        for (i = 0; i < node->nr_handles; i++) {
 779                if (unmap[i].status != GNTST_okay) {
 780                        leaked = true;
 781                        xenbus_dev_error(dev, unmap[i].status,
 782                                         "unmapping page at handle %d error %d",
 783                                         node->handles[i], unmap[i].status);
 784                        err = unmap[i].status;
 785                        break;
 786                }
 787        }
 788
 789        if (!leaked)
 790                free_vm_area(node->pv.area);
 791        else
 792                pr_alert("leaking VM area %p size %u page(s)",
 793                         node->pv.area, node->nr_handles);
 794
 795        kfree(node);
 796        return err;
 797}
 798
 799static const struct xenbus_ring_ops ring_ops_pv = {
 800        .map = xenbus_map_ring_pv,
 801        .unmap = xenbus_unmap_ring_pv,
 802};
 803#endif
 804
 805struct unmap_ring_hvm
 806{
 807        unsigned int idx;
 808        unsigned long addrs[XENBUS_MAX_RING_GRANTS];
 809};
 810
 811static void xenbus_unmap_ring_setup_grant_hvm(unsigned long gfn,
 812                                              unsigned int goffset,
 813                                              unsigned int len,
 814                                              void *data)
 815{
 816        struct unmap_ring_hvm *info = data;
 817
 818        info->addrs[info->idx] = (unsigned long)gfn_to_virt(gfn);
 819
 820        info->idx++;
 821}
 822
 823static int xenbus_unmap_ring_hvm(struct xenbus_device *dev, void *vaddr)
 824{
 825        int rv;
 826        struct xenbus_map_node *node;
 827        void *addr;
 828        struct unmap_ring_hvm info = {
 829                .idx = 0,
 830        };
 831        unsigned int nr_pages;
 832
 833        spin_lock(&xenbus_valloc_lock);
 834        list_for_each_entry(node, &xenbus_valloc_pages, next) {
 835                addr = node->hvm.addr;
 836                if (addr == vaddr) {
 837                        list_del(&node->next);
 838                        goto found;
 839                }
 840        }
 841        node = addr = NULL;
 842 found:
 843        spin_unlock(&xenbus_valloc_lock);
 844
 845        if (!node) {
 846                xenbus_dev_error(dev, -ENOENT,
 847                                 "can't find mapped virtual address %p", vaddr);
 848                return GNTST_bad_virt_addr;
 849        }
 850
 851        nr_pages = XENBUS_PAGES(node->nr_handles);
 852
 853        gnttab_foreach_grant(node->hvm.pages, node->nr_handles,
 854                             xenbus_unmap_ring_setup_grant_hvm,
 855                             &info);
 856
 857        rv = xenbus_unmap_ring(dev, node->handles, node->nr_handles,
 858                               info.addrs);
 859        if (!rv) {
 860                vunmap(vaddr);
 861                xen_free_unpopulated_pages(nr_pages, node->hvm.pages);
 862        }
 863        else
 864                WARN(1, "Leaking %p, size %u page(s)\n", vaddr, nr_pages);
 865
 866        kfree(node);
 867        return rv;
 868}
 869
 870/**
 871 * xenbus_read_driver_state
 872 * @path: path for driver
 873 *
 874 * Return the state of the driver rooted at the given store path, or
 875 * XenbusStateUnknown if no state can be read.
 876 */
 877enum xenbus_state xenbus_read_driver_state(const char *path)
 878{
 879        enum xenbus_state result;
 880        int err = xenbus_gather(XBT_NIL, path, "state", "%d", &result, NULL);
 881        if (err)
 882                result = XenbusStateUnknown;
 883
 884        return result;
 885}
 886EXPORT_SYMBOL_GPL(xenbus_read_driver_state);
 887
 888static const struct xenbus_ring_ops ring_ops_hvm = {
 889        .map = xenbus_map_ring_hvm,
 890        .unmap = xenbus_unmap_ring_hvm,
 891};
 892
 893void __init xenbus_ring_ops_init(void)
 894{
 895#ifdef CONFIG_XEN_PV
 896        if (!xen_feature(XENFEAT_auto_translated_physmap))
 897                ring_ops = &ring_ops_pv;
 898        else
 899#endif
 900                ring_ops = &ring_ops_hvm;
 901}
 902