xenbus_probe.c (25885B)
1/****************************************************************************** 2 * Talks to Xen Store to figure out what devices we have. 3 * 4 * Copyright (C) 2005 Rusty Russell, IBM Corporation 5 * Copyright (C) 2005 Mike Wray, Hewlett-Packard 6 * Copyright (C) 2005, 2006 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#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 34#define dev_fmt pr_fmt 35 36#define DPRINTK(fmt, args...) \ 37 pr_debug("xenbus_probe (%s:%d) " fmt ".\n", \ 38 __func__, __LINE__, ##args) 39 40#include <linux/kernel.h> 41#include <linux/err.h> 42#include <linux/string.h> 43#include <linux/ctype.h> 44#include <linux/fcntl.h> 45#include <linux/mm.h> 46#include <linux/proc_fs.h> 47#include <linux/notifier.h> 48#include <linux/kthread.h> 49#include <linux/mutex.h> 50#include <linux/io.h> 51#include <linux/slab.h> 52#include <linux/module.h> 53 54#include <asm/page.h> 55#include <asm/xen/hypervisor.h> 56 57#include <xen/xen.h> 58#include <xen/xenbus.h> 59#include <xen/events.h> 60#include <xen/xen-ops.h> 61#include <xen/page.h> 62 63#include <xen/hvm.h> 64 65#include "xenbus.h" 66 67 68static int xs_init_irq; 69int xen_store_evtchn; 70EXPORT_SYMBOL_GPL(xen_store_evtchn); 71 72struct xenstore_domain_interface *xen_store_interface; 73EXPORT_SYMBOL_GPL(xen_store_interface); 74 75enum xenstore_init xen_store_domain_type; 76EXPORT_SYMBOL_GPL(xen_store_domain_type); 77 78static unsigned long xen_store_gfn; 79 80static BLOCKING_NOTIFIER_HEAD(xenstore_chain); 81 82/* If something in array of ids matches this device, return it. */ 83static const struct xenbus_device_id * 84match_device(const struct xenbus_device_id *arr, struct xenbus_device *dev) 85{ 86 for (; *arr->devicetype != '\0'; arr++) { 87 if (!strcmp(arr->devicetype, dev->devicetype)) 88 return arr; 89 } 90 return NULL; 91} 92 93int xenbus_match(struct device *_dev, struct device_driver *_drv) 94{ 95 struct xenbus_driver *drv = to_xenbus_driver(_drv); 96 97 if (!drv->ids) 98 return 0; 99 100 return match_device(drv->ids, to_xenbus_device(_dev)) != NULL; 101} 102EXPORT_SYMBOL_GPL(xenbus_match); 103 104 105static void free_otherend_details(struct xenbus_device *dev) 106{ 107 kfree(dev->otherend); 108 dev->otherend = NULL; 109} 110 111 112static void free_otherend_watch(struct xenbus_device *dev) 113{ 114 if (dev->otherend_watch.node) { 115 unregister_xenbus_watch(&dev->otherend_watch); 116 kfree(dev->otherend_watch.node); 117 dev->otherend_watch.node = NULL; 118 } 119} 120 121 122static int talk_to_otherend(struct xenbus_device *dev) 123{ 124 struct xenbus_driver *drv = to_xenbus_driver(dev->dev.driver); 125 126 free_otherend_watch(dev); 127 free_otherend_details(dev); 128 129 return drv->read_otherend_details(dev); 130} 131 132 133 134static int watch_otherend(struct xenbus_device *dev) 135{ 136 struct xen_bus_type *bus = 137 container_of(dev->dev.bus, struct xen_bus_type, bus); 138 139 return xenbus_watch_pathfmt(dev, &dev->otherend_watch, 140 bus->otherend_will_handle, 141 bus->otherend_changed, 142 "%s/%s", dev->otherend, "state"); 143} 144 145 146int xenbus_read_otherend_details(struct xenbus_device *xendev, 147 char *id_node, char *path_node) 148{ 149 int err = xenbus_gather(XBT_NIL, xendev->nodename, 150 id_node, "%i", &xendev->otherend_id, 151 path_node, NULL, &xendev->otherend, 152 NULL); 153 if (err) { 154 xenbus_dev_fatal(xendev, err, 155 "reading other end details from %s", 156 xendev->nodename); 157 return err; 158 } 159 if (strlen(xendev->otherend) == 0 || 160 !xenbus_exists(XBT_NIL, xendev->otherend, "")) { 161 xenbus_dev_fatal(xendev, -ENOENT, 162 "unable to read other end from %s. " 163 "missing or inaccessible.", 164 xendev->nodename); 165 free_otherend_details(xendev); 166 return -ENOENT; 167 } 168 169 return 0; 170} 171EXPORT_SYMBOL_GPL(xenbus_read_otherend_details); 172 173void xenbus_otherend_changed(struct xenbus_watch *watch, 174 const char *path, const char *token, 175 int ignore_on_shutdown) 176{ 177 struct xenbus_device *dev = 178 container_of(watch, struct xenbus_device, otherend_watch); 179 struct xenbus_driver *drv = to_xenbus_driver(dev->dev.driver); 180 enum xenbus_state state; 181 182 /* Protect us against watches firing on old details when the otherend 183 details change, say immediately after a resume. */ 184 if (!dev->otherend || 185 strncmp(dev->otherend, path, strlen(dev->otherend))) { 186 dev_dbg(&dev->dev, "Ignoring watch at %s\n", path); 187 return; 188 } 189 190 state = xenbus_read_driver_state(dev->otherend); 191 192 dev_dbg(&dev->dev, "state is %d, (%s), %s, %s\n", 193 state, xenbus_strstate(state), dev->otherend_watch.node, path); 194 195 /* 196 * Ignore xenbus transitions during shutdown. This prevents us doing 197 * work that can fail e.g., when the rootfs is gone. 198 */ 199 if (system_state > SYSTEM_RUNNING) { 200 if (ignore_on_shutdown && (state == XenbusStateClosing)) 201 xenbus_frontend_closed(dev); 202 return; 203 } 204 205 if (drv->otherend_changed) 206 drv->otherend_changed(dev, state); 207} 208EXPORT_SYMBOL_GPL(xenbus_otherend_changed); 209 210#define XENBUS_SHOW_STAT(name) \ 211static ssize_t name##_show(struct device *_dev, \ 212 struct device_attribute *attr, \ 213 char *buf) \ 214{ \ 215 struct xenbus_device *dev = to_xenbus_device(_dev); \ 216 \ 217 return sprintf(buf, "%d\n", atomic_read(&dev->name)); \ 218} \ 219static DEVICE_ATTR_RO(name) 220 221XENBUS_SHOW_STAT(event_channels); 222XENBUS_SHOW_STAT(events); 223XENBUS_SHOW_STAT(spurious_events); 224XENBUS_SHOW_STAT(jiffies_eoi_delayed); 225 226static ssize_t spurious_threshold_show(struct device *_dev, 227 struct device_attribute *attr, 228 char *buf) 229{ 230 struct xenbus_device *dev = to_xenbus_device(_dev); 231 232 return sprintf(buf, "%d\n", dev->spurious_threshold); 233} 234 235static ssize_t spurious_threshold_store(struct device *_dev, 236 struct device_attribute *attr, 237 const char *buf, size_t count) 238{ 239 struct xenbus_device *dev = to_xenbus_device(_dev); 240 unsigned int val; 241 ssize_t ret; 242 243 ret = kstrtouint(buf, 0, &val); 244 if (ret) 245 return ret; 246 247 dev->spurious_threshold = val; 248 249 return count; 250} 251 252static DEVICE_ATTR_RW(spurious_threshold); 253 254static struct attribute *xenbus_attrs[] = { 255 &dev_attr_event_channels.attr, 256 &dev_attr_events.attr, 257 &dev_attr_spurious_events.attr, 258 &dev_attr_jiffies_eoi_delayed.attr, 259 &dev_attr_spurious_threshold.attr, 260 NULL 261}; 262 263static const struct attribute_group xenbus_group = { 264 .name = "xenbus", 265 .attrs = xenbus_attrs, 266}; 267 268int xenbus_dev_probe(struct device *_dev) 269{ 270 struct xenbus_device *dev = to_xenbus_device(_dev); 271 struct xenbus_driver *drv = to_xenbus_driver(_dev->driver); 272 const struct xenbus_device_id *id; 273 int err; 274 275 DPRINTK("%s", dev->nodename); 276 277 if (!drv->probe) { 278 err = -ENODEV; 279 goto fail; 280 } 281 282 id = match_device(drv->ids, dev); 283 if (!id) { 284 err = -ENODEV; 285 goto fail; 286 } 287 288 err = talk_to_otherend(dev); 289 if (err) { 290 dev_warn(&dev->dev, "talk_to_otherend on %s failed.\n", 291 dev->nodename); 292 return err; 293 } 294 295 if (!try_module_get(drv->driver.owner)) { 296 dev_warn(&dev->dev, "failed to acquire module reference on '%s'\n", 297 drv->driver.name); 298 err = -ESRCH; 299 goto fail; 300 } 301 302 down(&dev->reclaim_sem); 303 err = drv->probe(dev, id); 304 up(&dev->reclaim_sem); 305 if (err) 306 goto fail_put; 307 308 err = watch_otherend(dev); 309 if (err) { 310 dev_warn(&dev->dev, "watch_otherend on %s failed.\n", 311 dev->nodename); 312 return err; 313 } 314 315 dev->spurious_threshold = 1; 316 if (sysfs_create_group(&dev->dev.kobj, &xenbus_group)) 317 dev_warn(&dev->dev, "sysfs_create_group on %s failed.\n", 318 dev->nodename); 319 320 return 0; 321fail_put: 322 module_put(drv->driver.owner); 323fail: 324 xenbus_dev_error(dev, err, "xenbus_dev_probe on %s", dev->nodename); 325 return err; 326} 327EXPORT_SYMBOL_GPL(xenbus_dev_probe); 328 329void xenbus_dev_remove(struct device *_dev) 330{ 331 struct xenbus_device *dev = to_xenbus_device(_dev); 332 struct xenbus_driver *drv = to_xenbus_driver(_dev->driver); 333 334 DPRINTK("%s", dev->nodename); 335 336 sysfs_remove_group(&dev->dev.kobj, &xenbus_group); 337 338 free_otherend_watch(dev); 339 340 if (drv->remove) { 341 down(&dev->reclaim_sem); 342 drv->remove(dev); 343 up(&dev->reclaim_sem); 344 } 345 346 module_put(drv->driver.owner); 347 348 free_otherend_details(dev); 349 350 /* 351 * If the toolstack has forced the device state to closing then set 352 * the state to closed now to allow it to be cleaned up. 353 * Similarly, if the driver does not support re-bind, set the 354 * closed. 355 */ 356 if (!drv->allow_rebind || 357 xenbus_read_driver_state(dev->nodename) == XenbusStateClosing) 358 xenbus_switch_state(dev, XenbusStateClosed); 359} 360EXPORT_SYMBOL_GPL(xenbus_dev_remove); 361 362int xenbus_register_driver_common(struct xenbus_driver *drv, 363 struct xen_bus_type *bus, 364 struct module *owner, const char *mod_name) 365{ 366 drv->driver.name = drv->name ? drv->name : drv->ids[0].devicetype; 367 drv->driver.bus = &bus->bus; 368 drv->driver.owner = owner; 369 drv->driver.mod_name = mod_name; 370 371 return driver_register(&drv->driver); 372} 373EXPORT_SYMBOL_GPL(xenbus_register_driver_common); 374 375void xenbus_unregister_driver(struct xenbus_driver *drv) 376{ 377 driver_unregister(&drv->driver); 378} 379EXPORT_SYMBOL_GPL(xenbus_unregister_driver); 380 381struct xb_find_info { 382 struct xenbus_device *dev; 383 const char *nodename; 384}; 385 386static int cmp_dev(struct device *dev, void *data) 387{ 388 struct xenbus_device *xendev = to_xenbus_device(dev); 389 struct xb_find_info *info = data; 390 391 if (!strcmp(xendev->nodename, info->nodename)) { 392 info->dev = xendev; 393 get_device(dev); 394 return 1; 395 } 396 return 0; 397} 398 399static struct xenbus_device *xenbus_device_find(const char *nodename, 400 struct bus_type *bus) 401{ 402 struct xb_find_info info = { .dev = NULL, .nodename = nodename }; 403 404 bus_for_each_dev(bus, NULL, &info, cmp_dev); 405 return info.dev; 406} 407 408static int cleanup_dev(struct device *dev, void *data) 409{ 410 struct xenbus_device *xendev = to_xenbus_device(dev); 411 struct xb_find_info *info = data; 412 int len = strlen(info->nodename); 413 414 DPRINTK("%s", info->nodename); 415 416 /* Match the info->nodename path, or any subdirectory of that path. */ 417 if (strncmp(xendev->nodename, info->nodename, len)) 418 return 0; 419 420 /* If the node name is longer, ensure it really is a subdirectory. */ 421 if ((strlen(xendev->nodename) > len) && (xendev->nodename[len] != '/')) 422 return 0; 423 424 info->dev = xendev; 425 get_device(dev); 426 return 1; 427} 428 429static void xenbus_cleanup_devices(const char *path, struct bus_type *bus) 430{ 431 struct xb_find_info info = { .nodename = path }; 432 433 do { 434 info.dev = NULL; 435 bus_for_each_dev(bus, NULL, &info, cleanup_dev); 436 if (info.dev) { 437 device_unregister(&info.dev->dev); 438 put_device(&info.dev->dev); 439 } 440 } while (info.dev); 441} 442 443static void xenbus_dev_release(struct device *dev) 444{ 445 if (dev) 446 kfree(to_xenbus_device(dev)); 447} 448 449static ssize_t nodename_show(struct device *dev, 450 struct device_attribute *attr, char *buf) 451{ 452 return sprintf(buf, "%s\n", to_xenbus_device(dev)->nodename); 453} 454static DEVICE_ATTR_RO(nodename); 455 456static ssize_t devtype_show(struct device *dev, 457 struct device_attribute *attr, char *buf) 458{ 459 return sprintf(buf, "%s\n", to_xenbus_device(dev)->devicetype); 460} 461static DEVICE_ATTR_RO(devtype); 462 463static ssize_t modalias_show(struct device *dev, 464 struct device_attribute *attr, char *buf) 465{ 466 return sprintf(buf, "%s:%s\n", dev->bus->name, 467 to_xenbus_device(dev)->devicetype); 468} 469static DEVICE_ATTR_RO(modalias); 470 471static ssize_t state_show(struct device *dev, 472 struct device_attribute *attr, char *buf) 473{ 474 return sprintf(buf, "%s\n", 475 xenbus_strstate(to_xenbus_device(dev)->state)); 476} 477static DEVICE_ATTR_RO(state); 478 479static struct attribute *xenbus_dev_attrs[] = { 480 &dev_attr_nodename.attr, 481 &dev_attr_devtype.attr, 482 &dev_attr_modalias.attr, 483 &dev_attr_state.attr, 484 NULL, 485}; 486 487static const struct attribute_group xenbus_dev_group = { 488 .attrs = xenbus_dev_attrs, 489}; 490 491const struct attribute_group *xenbus_dev_groups[] = { 492 &xenbus_dev_group, 493 NULL, 494}; 495EXPORT_SYMBOL_GPL(xenbus_dev_groups); 496 497int xenbus_probe_node(struct xen_bus_type *bus, 498 const char *type, 499 const char *nodename) 500{ 501 char devname[XEN_BUS_ID_SIZE]; 502 int err; 503 struct xenbus_device *xendev; 504 size_t stringlen; 505 char *tmpstring; 506 507 enum xenbus_state state = xenbus_read_driver_state(nodename); 508 509 if (state != XenbusStateInitialising) { 510 /* Device is not new, so ignore it. This can happen if a 511 device is going away after switching to Closed. */ 512 return 0; 513 } 514 515 stringlen = strlen(nodename) + 1 + strlen(type) + 1; 516 xendev = kzalloc(sizeof(*xendev) + stringlen, GFP_KERNEL); 517 if (!xendev) 518 return -ENOMEM; 519 520 xendev->state = XenbusStateInitialising; 521 522 /* Copy the strings into the extra space. */ 523 524 tmpstring = (char *)(xendev + 1); 525 strcpy(tmpstring, nodename); 526 xendev->nodename = tmpstring; 527 528 tmpstring += strlen(tmpstring) + 1; 529 strcpy(tmpstring, type); 530 xendev->devicetype = tmpstring; 531 init_completion(&xendev->down); 532 533 xendev->dev.bus = &bus->bus; 534 xendev->dev.release = xenbus_dev_release; 535 536 err = bus->get_bus_id(devname, xendev->nodename); 537 if (err) 538 goto fail; 539 540 dev_set_name(&xendev->dev, "%s", devname); 541 sema_init(&xendev->reclaim_sem, 1); 542 543 /* Register with generic device framework. */ 544 err = device_register(&xendev->dev); 545 if (err) { 546 put_device(&xendev->dev); 547 xendev = NULL; 548 goto fail; 549 } 550 551 return 0; 552fail: 553 kfree(xendev); 554 return err; 555} 556EXPORT_SYMBOL_GPL(xenbus_probe_node); 557 558static int xenbus_probe_device_type(struct xen_bus_type *bus, const char *type) 559{ 560 int err = 0; 561 char **dir; 562 unsigned int dir_n = 0; 563 int i; 564 565 dir = xenbus_directory(XBT_NIL, bus->root, type, &dir_n); 566 if (IS_ERR(dir)) 567 return PTR_ERR(dir); 568 569 for (i = 0; i < dir_n; i++) { 570 err = bus->probe(bus, type, dir[i]); 571 if (err) 572 break; 573 } 574 575 kfree(dir); 576 return err; 577} 578 579int xenbus_probe_devices(struct xen_bus_type *bus) 580{ 581 int err = 0; 582 char **dir; 583 unsigned int i, dir_n; 584 585 dir = xenbus_directory(XBT_NIL, bus->root, "", &dir_n); 586 if (IS_ERR(dir)) 587 return PTR_ERR(dir); 588 589 for (i = 0; i < dir_n; i++) { 590 err = xenbus_probe_device_type(bus, dir[i]); 591 if (err) 592 break; 593 } 594 595 kfree(dir); 596 return err; 597} 598EXPORT_SYMBOL_GPL(xenbus_probe_devices); 599 600static unsigned int char_count(const char *str, char c) 601{ 602 unsigned int i, ret = 0; 603 604 for (i = 0; str[i]; i++) 605 if (str[i] == c) 606 ret++; 607 return ret; 608} 609 610static int strsep_len(const char *str, char c, unsigned int len) 611{ 612 unsigned int i; 613 614 for (i = 0; str[i]; i++) 615 if (str[i] == c) { 616 if (len == 0) 617 return i; 618 len--; 619 } 620 return (len == 0) ? i : -ERANGE; 621} 622 623void xenbus_dev_changed(const char *node, struct xen_bus_type *bus) 624{ 625 int exists, rootlen; 626 struct xenbus_device *dev; 627 char type[XEN_BUS_ID_SIZE]; 628 const char *p, *root; 629 630 if (char_count(node, '/') < 2) 631 return; 632 633 exists = xenbus_exists(XBT_NIL, node, ""); 634 if (!exists) { 635 xenbus_cleanup_devices(node, &bus->bus); 636 return; 637 } 638 639 /* backend/<type>/... or device/<type>/... */ 640 p = strchr(node, '/') + 1; 641 snprintf(type, XEN_BUS_ID_SIZE, "%.*s", (int)strcspn(p, "/"), p); 642 type[XEN_BUS_ID_SIZE-1] = '\0'; 643 644 rootlen = strsep_len(node, '/', bus->levels); 645 if (rootlen < 0) 646 return; 647 root = kasprintf(GFP_KERNEL, "%.*s", rootlen, node); 648 if (!root) 649 return; 650 651 dev = xenbus_device_find(root, &bus->bus); 652 if (!dev) 653 xenbus_probe_node(bus, type, root); 654 else 655 put_device(&dev->dev); 656 657 kfree(root); 658} 659EXPORT_SYMBOL_GPL(xenbus_dev_changed); 660 661int xenbus_dev_suspend(struct device *dev) 662{ 663 int err = 0; 664 struct xenbus_driver *drv; 665 struct xenbus_device *xdev 666 = container_of(dev, struct xenbus_device, dev); 667 668 DPRINTK("%s", xdev->nodename); 669 670 if (dev->driver == NULL) 671 return 0; 672 drv = to_xenbus_driver(dev->driver); 673 if (drv->suspend) 674 err = drv->suspend(xdev); 675 if (err) 676 dev_warn(dev, "suspend failed: %i\n", err); 677 return 0; 678} 679EXPORT_SYMBOL_GPL(xenbus_dev_suspend); 680 681int xenbus_dev_resume(struct device *dev) 682{ 683 int err; 684 struct xenbus_driver *drv; 685 struct xenbus_device *xdev 686 = container_of(dev, struct xenbus_device, dev); 687 688 DPRINTK("%s", xdev->nodename); 689 690 if (dev->driver == NULL) 691 return 0; 692 drv = to_xenbus_driver(dev->driver); 693 err = talk_to_otherend(xdev); 694 if (err) { 695 dev_warn(dev, "resume (talk_to_otherend) failed: %i\n", err); 696 return err; 697 } 698 699 xdev->state = XenbusStateInitialising; 700 701 if (drv->resume) { 702 err = drv->resume(xdev); 703 if (err) { 704 dev_warn(dev, "resume failed: %i\n", err); 705 return err; 706 } 707 } 708 709 err = watch_otherend(xdev); 710 if (err) { 711 dev_warn(dev, "resume (watch_otherend) failed: %d\n", err); 712 return err; 713 } 714 715 return 0; 716} 717EXPORT_SYMBOL_GPL(xenbus_dev_resume); 718 719int xenbus_dev_cancel(struct device *dev) 720{ 721 /* Do nothing */ 722 DPRINTK("cancel"); 723 return 0; 724} 725EXPORT_SYMBOL_GPL(xenbus_dev_cancel); 726 727/* A flag to determine if xenstored is 'ready' (i.e. has started) */ 728int xenstored_ready; 729 730 731int register_xenstore_notifier(struct notifier_block *nb) 732{ 733 int ret = 0; 734 735 if (xenstored_ready > 0) 736 ret = nb->notifier_call(nb, 0, NULL); 737 else 738 blocking_notifier_chain_register(&xenstore_chain, nb); 739 740 return ret; 741} 742EXPORT_SYMBOL_GPL(register_xenstore_notifier); 743 744void unregister_xenstore_notifier(struct notifier_block *nb) 745{ 746 blocking_notifier_chain_unregister(&xenstore_chain, nb); 747} 748EXPORT_SYMBOL_GPL(unregister_xenstore_notifier); 749 750static void xenbus_probe(void) 751{ 752 xenstored_ready = 1; 753 754 if (!xen_store_interface) { 755 xen_store_interface = memremap(xen_store_gfn << XEN_PAGE_SHIFT, 756 XEN_PAGE_SIZE, MEMREMAP_WB); 757 /* 758 * Now it is safe to free the IRQ used for xenstore late 759 * initialization. No need to unbind: it is about to be 760 * bound again from xb_init_comms. Note that calling 761 * unbind_from_irqhandler now would result in xen_evtchn_close() 762 * being called and the event channel not being enabled again 763 * afterwards, resulting in missed event notifications. 764 */ 765 free_irq(xs_init_irq, &xb_waitq); 766 } 767 768 /* 769 * In the HVM case, xenbus_init() deferred its call to 770 * xs_init() in case callbacks were not operational yet. 771 * So do it now. 772 */ 773 if (xen_store_domain_type == XS_HVM) 774 xs_init(); 775 776 /* Notify others that xenstore is up */ 777 blocking_notifier_call_chain(&xenstore_chain, 0, NULL); 778} 779 780/* 781 * Returns true when XenStore init must be deferred in order to 782 * allow the PCI platform device to be initialised, before we 783 * can actually have event channel interrupts working. 784 */ 785static bool xs_hvm_defer_init_for_callback(void) 786{ 787#ifdef CONFIG_XEN_PVHVM 788 return xen_store_domain_type == XS_HVM && 789 !xen_have_vector_callback; 790#else 791 return false; 792#endif 793} 794 795static int xenbus_probe_thread(void *unused) 796{ 797 DEFINE_WAIT(w); 798 799 /* 800 * We actually just want to wait for *any* trigger of xb_waitq, 801 * and run xenbus_probe() the moment it occurs. 802 */ 803 prepare_to_wait(&xb_waitq, &w, TASK_INTERRUPTIBLE); 804 schedule(); 805 finish_wait(&xb_waitq, &w); 806 807 DPRINTK("probing"); 808 xenbus_probe(); 809 return 0; 810} 811 812static int __init xenbus_probe_initcall(void) 813{ 814 /* 815 * Probe XenBus here in the XS_PV case, and also XS_HVM unless we 816 * need to wait for the platform PCI device to come up or 817 * xen_store_interface is not ready. 818 */ 819 if (xen_store_domain_type == XS_PV || 820 (xen_store_domain_type == XS_HVM && 821 !xs_hvm_defer_init_for_callback() && 822 xen_store_interface != NULL)) 823 xenbus_probe(); 824 825 /* 826 * For XS_LOCAL or when xen_store_interface is not ready, spawn a 827 * thread which will wait for xenstored or a xenstore-stubdom to be 828 * started, then probe. It will be triggered when communication 829 * starts happening, by waiting on xb_waitq. 830 */ 831 if (xen_store_domain_type == XS_LOCAL || xen_store_interface == NULL) { 832 struct task_struct *probe_task; 833 834 probe_task = kthread_run(xenbus_probe_thread, NULL, 835 "xenbus_probe"); 836 if (IS_ERR(probe_task)) 837 return PTR_ERR(probe_task); 838 } 839 return 0; 840} 841device_initcall(xenbus_probe_initcall); 842 843int xen_set_callback_via(uint64_t via) 844{ 845 struct xen_hvm_param a; 846 int ret; 847 848 a.domid = DOMID_SELF; 849 a.index = HVM_PARAM_CALLBACK_IRQ; 850 a.value = via; 851 852 ret = HYPERVISOR_hvm_op(HVMOP_set_param, &a); 853 if (ret) 854 return ret; 855 856 /* 857 * If xenbus_probe_initcall() deferred the xenbus_probe() 858 * due to the callback not functioning yet, we can do it now. 859 */ 860 if (!xenstored_ready && xs_hvm_defer_init_for_callback()) 861 xenbus_probe(); 862 863 return ret; 864} 865EXPORT_SYMBOL_GPL(xen_set_callback_via); 866 867/* Set up event channel for xenstored which is run as a local process 868 * (this is normally used only in dom0) 869 */ 870static int __init xenstored_local_init(void) 871{ 872 int err = -ENOMEM; 873 unsigned long page = 0; 874 struct evtchn_alloc_unbound alloc_unbound; 875 876 /* Allocate Xenstore page */ 877 page = get_zeroed_page(GFP_KERNEL); 878 if (!page) 879 goto out_err; 880 881 xen_store_gfn = virt_to_gfn((void *)page); 882 883 /* Next allocate a local port which xenstored can bind to */ 884 alloc_unbound.dom = DOMID_SELF; 885 alloc_unbound.remote_dom = DOMID_SELF; 886 887 err = HYPERVISOR_event_channel_op(EVTCHNOP_alloc_unbound, 888 &alloc_unbound); 889 if (err == -ENOSYS) 890 goto out_err; 891 892 BUG_ON(err); 893 xen_store_evtchn = alloc_unbound.port; 894 895 return 0; 896 897 out_err: 898 if (page != 0) 899 free_page(page); 900 return err; 901} 902 903static int xenbus_resume_cb(struct notifier_block *nb, 904 unsigned long action, void *data) 905{ 906 int err = 0; 907 908 if (xen_hvm_domain()) { 909 uint64_t v = 0; 910 911 err = hvm_get_parameter(HVM_PARAM_STORE_EVTCHN, &v); 912 if (!err && v) 913 xen_store_evtchn = v; 914 else 915 pr_warn("Cannot update xenstore event channel: %d\n", 916 err); 917 } else 918 xen_store_evtchn = xen_start_info->store_evtchn; 919 920 return err; 921} 922 923static struct notifier_block xenbus_resume_nb = { 924 .notifier_call = xenbus_resume_cb, 925}; 926 927static irqreturn_t xenbus_late_init(int irq, void *unused) 928{ 929 int err; 930 uint64_t v = 0; 931 932 err = hvm_get_parameter(HVM_PARAM_STORE_PFN, &v); 933 if (err || !v || !~v) 934 return IRQ_HANDLED; 935 xen_store_gfn = (unsigned long)v; 936 937 wake_up(&xb_waitq); 938 return IRQ_HANDLED; 939} 940 941static int __init xenbus_init(void) 942{ 943 int err; 944 uint64_t v = 0; 945 bool wait = false; 946 xen_store_domain_type = XS_UNKNOWN; 947 948 if (!xen_domain()) 949 return -ENODEV; 950 951 xenbus_ring_ops_init(); 952 953 if (xen_pv_domain()) 954 xen_store_domain_type = XS_PV; 955 if (xen_hvm_domain()) 956 xen_store_domain_type = XS_HVM; 957 if (xen_hvm_domain() && xen_initial_domain()) 958 xen_store_domain_type = XS_LOCAL; 959 if (xen_pv_domain() && !xen_start_info->store_evtchn) 960 xen_store_domain_type = XS_LOCAL; 961 if (xen_pv_domain() && xen_start_info->store_evtchn) 962 xenstored_ready = 1; 963 964 switch (xen_store_domain_type) { 965 case XS_LOCAL: 966 err = xenstored_local_init(); 967 if (err) 968 goto out_error; 969 xen_store_interface = gfn_to_virt(xen_store_gfn); 970 break; 971 case XS_PV: 972 xen_store_evtchn = xen_start_info->store_evtchn; 973 xen_store_gfn = xen_start_info->store_mfn; 974 xen_store_interface = gfn_to_virt(xen_store_gfn); 975 break; 976 case XS_HVM: 977 err = hvm_get_parameter(HVM_PARAM_STORE_EVTCHN, &v); 978 if (err) 979 goto out_error; 980 xen_store_evtchn = (int)v; 981 err = hvm_get_parameter(HVM_PARAM_STORE_PFN, &v); 982 if (err) 983 goto out_error; 984 /* 985 * Uninitialized hvm_params are zero and return no error. 986 * Although it is theoretically possible to have 987 * HVM_PARAM_STORE_PFN set to zero on purpose, in reality it is 988 * not zero when valid. If zero, it means that Xenstore hasn't 989 * been properly initialized. Instead of attempting to map a 990 * wrong guest physical address return error. 991 * 992 * Also recognize all bits set as an invalid/uninitialized value. 993 */ 994 if (!v) { 995 err = -ENOENT; 996 goto out_error; 997 } 998 if (v == ~0ULL) { 999 wait = true; 1000 } else { 1001 /* Avoid truncation on 32-bit. */ 1002#if BITS_PER_LONG == 32 1003 if (v > ULONG_MAX) { 1004 pr_err("%s: cannot handle HVM_PARAM_STORE_PFN=%llx > ULONG_MAX\n", 1005 __func__, v); 1006 err = -EINVAL; 1007 goto out_error; 1008 } 1009#endif 1010 xen_store_gfn = (unsigned long)v; 1011 xen_store_interface = 1012 memremap(xen_store_gfn << XEN_PAGE_SHIFT, 1013 XEN_PAGE_SIZE, MEMREMAP_WB); 1014 if (xen_store_interface->connection != XENSTORE_CONNECTED) 1015 wait = true; 1016 } 1017 if (wait) { 1018 err = bind_evtchn_to_irqhandler(xen_store_evtchn, 1019 xenbus_late_init, 1020 0, "xenstore_late_init", 1021 &xb_waitq); 1022 if (err < 0) { 1023 pr_err("xenstore_late_init couldn't bind irq err=%d\n", 1024 err); 1025 return err; 1026 } 1027 1028 xs_init_irq = err; 1029 } 1030 break; 1031 default: 1032 pr_warn("Xenstore state unknown\n"); 1033 break; 1034 } 1035 1036 /* 1037 * HVM domains may not have a functional callback yet. In that 1038 * case let xs_init() be called from xenbus_probe(), which will 1039 * get invoked at an appropriate time. 1040 */ 1041 if (xen_store_domain_type != XS_HVM) { 1042 err = xs_init(); 1043 if (err) { 1044 pr_warn("Error initializing xenstore comms: %i\n", err); 1045 goto out_error; 1046 } 1047 } 1048 1049 if ((xen_store_domain_type != XS_LOCAL) && 1050 (xen_store_domain_type != XS_UNKNOWN)) 1051 xen_resume_notifier_register(&xenbus_resume_nb); 1052 1053#ifdef CONFIG_XEN_COMPAT_XENFS 1054 /* 1055 * Create xenfs mountpoint in /proc for compatibility with 1056 * utilities that expect to find "xenbus" under "/proc/xen". 1057 */ 1058 proc_create_mount_point("xen"); 1059#endif 1060 return 0; 1061 1062out_error: 1063 xen_store_domain_type = XS_UNKNOWN; 1064 return err; 1065} 1066 1067postcore_initcall(xenbus_init); 1068 1069MODULE_LICENSE("GPL");