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