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 DPRINTK(fmt, args...) \ 34 pr_debug("xenbus_probe (%s:%d) " fmt ".\n", \ 35 __func__, __LINE__, ##args) 36 37 #include <linux/kernel.h> 38 #include <linux/err.h> 39 #include <linux/string.h> 40 #include <linux/ctype.h> 41 #include <linux/fcntl.h> 42 #include <linux/mm.h> 43 #include <linux/proc_fs.h> 44 #include <linux/notifier.h> 45 #include <linux/kthread.h> 46 #include <linux/mutex.h> 47 #include <linux/io.h> 48 49 #include <asm/page.h> 50 #include <asm/pgtable.h> 51 #include <asm/xen/hypervisor.h> 52 #include <xen/xenbus.h> 53 #include <xen/events.h> 54 #include <xen/page.h> 55 56 #include "xenbus_comms.h" 57 #include "xenbus_probe.h" 58 59 60 int xen_store_evtchn; 61 EXPORT_SYMBOL(xen_store_evtchn); 62 63 struct xenstore_domain_interface *xen_store_interface; 64 static unsigned long xen_store_mfn; 65 66 static BLOCKING_NOTIFIER_HEAD(xenstore_chain); 67 68 static void wait_for_devices(struct xenbus_driver *xendrv); 69 70 static int xenbus_probe_frontend(const char *type, const char *name); 71 72 static void xenbus_dev_shutdown(struct device *_dev); 73 74 /* If something in array of ids matches this device, return it. */ 75 static const struct xenbus_device_id * 76 match_device(const struct xenbus_device_id *arr, struct xenbus_device *dev) 77 { 78 for (; *arr->devicetype != '\0'; arr++) { 79 if (!strcmp(arr->devicetype, dev->devicetype)) 80 return arr; 81 } 82 return NULL; 83 } 84 85 int xenbus_match(struct device *_dev, struct device_driver *_drv) 86 { 87 struct xenbus_driver *drv = to_xenbus_driver(_drv); 88 89 if (!drv->ids) 90 return 0; 91 92 return match_device(drv->ids, to_xenbus_device(_dev)) != NULL; 93 } 94 95 static int xenbus_uevent(struct device *_dev, struct kobj_uevent_env *env) 96 { 97 struct xenbus_device *dev = to_xenbus_device(_dev); 98 99 if (add_uevent_var(env, "MODALIAS=xen:%s", dev->devicetype)) 100 return -ENOMEM; 101 102 return 0; 103 } 104 105 /* device/<type>/<id> => <type>-<id> */ 106 static int frontend_bus_id(char bus_id[XEN_BUS_ID_SIZE], const char *nodename) 107 { 108 nodename = strchr(nodename, '/'); 109 if (!nodename || strlen(nodename + 1) >= XEN_BUS_ID_SIZE) { 110 printk(KERN_WARNING "XENBUS: bad frontend %s\n", nodename); 111 return -EINVAL; 112 } 113 114 strlcpy(bus_id, nodename + 1, XEN_BUS_ID_SIZE); 115 if (!strchr(bus_id, '/')) { 116 printk(KERN_WARNING "XENBUS: bus_id %s no slash\n", bus_id); 117 return -EINVAL; 118 } 119 *strchr(bus_id, '/') = '-'; 120 return 0; 121 } 122 123 124 static void free_otherend_details(struct xenbus_device *dev) 125 { 126 kfree(dev->otherend); 127 dev->otherend = NULL; 128 } 129 130 131 static void free_otherend_watch(struct xenbus_device *dev) 132 { 133 if (dev->otherend_watch.node) { 134 unregister_xenbus_watch(&dev->otherend_watch); 135 kfree(dev->otherend_watch.node); 136 dev->otherend_watch.node = NULL; 137 } 138 } 139 140 141 int read_otherend_details(struct xenbus_device *xendev, 142 char *id_node, char *path_node) 143 { 144 int err = xenbus_gather(XBT_NIL, xendev->nodename, 145 id_node, "%i", &xendev->otherend_id, 146 path_node, NULL, &xendev->otherend, 147 NULL); 148 if (err) { 149 xenbus_dev_fatal(xendev, err, 150 "reading other end details from %s", 151 xendev->nodename); 152 return err; 153 } 154 if (strlen(xendev->otherend) == 0 || 155 !xenbus_exists(XBT_NIL, xendev->otherend, "")) { 156 xenbus_dev_fatal(xendev, -ENOENT, 157 "unable to read other end from %s. " 158 "missing or inaccessible.", 159 xendev->nodename); 160 free_otherend_details(xendev); 161 return -ENOENT; 162 } 163 164 return 0; 165 } 166 167 168 static int read_backend_details(struct xenbus_device *xendev) 169 { 170 return read_otherend_details(xendev, "backend-id", "backend"); 171 } 172 173 static struct device_attribute xenbus_dev_attrs[] = { 174 __ATTR_NULL 175 }; 176 177 /* Bus type for frontend drivers. */ 178 static struct xen_bus_type xenbus_frontend = { 179 .root = "device", 180 .levels = 2, /* device/type/<id> */ 181 .get_bus_id = frontend_bus_id, 182 .probe = xenbus_probe_frontend, 183 .bus = { 184 .name = "xen", 185 .match = xenbus_match, 186 .uevent = xenbus_uevent, 187 .probe = xenbus_dev_probe, 188 .remove = xenbus_dev_remove, 189 .shutdown = xenbus_dev_shutdown, 190 .dev_attrs = xenbus_dev_attrs, 191 }, 192 }; 193 194 static void otherend_changed(struct xenbus_watch *watch, 195 const char **vec, unsigned int len) 196 { 197 struct xenbus_device *dev = 198 container_of(watch, struct xenbus_device, otherend_watch); 199 struct xenbus_driver *drv = to_xenbus_driver(dev->dev.driver); 200 enum xenbus_state state; 201 202 /* Protect us against watches firing on old details when the otherend 203 details change, say immediately after a resume. */ 204 if (!dev->otherend || 205 strncmp(dev->otherend, vec[XS_WATCH_PATH], 206 strlen(dev->otherend))) { 207 dev_dbg(&dev->dev, "Ignoring watch at %s\n", 208 vec[XS_WATCH_PATH]); 209 return; 210 } 211 212 state = xenbus_read_driver_state(dev->otherend); 213 214 dev_dbg(&dev->dev, "state is %d, (%s), %s, %s\n", 215 state, xenbus_strstate(state), dev->otherend_watch.node, 216 vec[XS_WATCH_PATH]); 217 218 /* 219 * Ignore xenbus transitions during shutdown. This prevents us doing 220 * work that can fail e.g., when the rootfs is gone. 221 */ 222 if (system_state > SYSTEM_RUNNING) { 223 struct xen_bus_type *bus = bus; 224 bus = container_of(dev->dev.bus, struct xen_bus_type, bus); 225 /* If we're frontend, drive the state machine to Closed. */ 226 /* This should cause the backend to release our resources. */ 227 if ((bus == &xenbus_frontend) && (state == XenbusStateClosing)) 228 xenbus_frontend_closed(dev); 229 return; 230 } 231 232 if (drv->otherend_changed) 233 drv->otherend_changed(dev, state); 234 } 235 236 237 static int talk_to_otherend(struct xenbus_device *dev) 238 { 239 struct xenbus_driver *drv = to_xenbus_driver(dev->dev.driver); 240 241 free_otherend_watch(dev); 242 free_otherend_details(dev); 243 244 return drv->read_otherend_details(dev); 245 } 246 247 248 static int watch_otherend(struct xenbus_device *dev) 249 { 250 return xenbus_watch_pathfmt(dev, &dev->otherend_watch, otherend_changed, 251 "%s/%s", dev->otherend, "state"); 252 } 253 254 255 int xenbus_dev_probe(struct device *_dev) 256 { 257 struct xenbus_device *dev = to_xenbus_device(_dev); 258 struct xenbus_driver *drv = to_xenbus_driver(_dev->driver); 259 const struct xenbus_device_id *id; 260 int err; 261 262 DPRINTK("%s", dev->nodename); 263 264 if (!drv->probe) { 265 err = -ENODEV; 266 goto fail; 267 } 268 269 id = match_device(drv->ids, dev); 270 if (!id) { 271 err = -ENODEV; 272 goto fail; 273 } 274 275 err = talk_to_otherend(dev); 276 if (err) { 277 dev_warn(&dev->dev, "talk_to_otherend on %s failed.\n", 278 dev->nodename); 279 return err; 280 } 281 282 err = drv->probe(dev, id); 283 if (err) 284 goto fail; 285 286 err = watch_otherend(dev); 287 if (err) { 288 dev_warn(&dev->dev, "watch_otherend on %s failed.\n", 289 dev->nodename); 290 return err; 291 } 292 293 return 0; 294 fail: 295 xenbus_dev_error(dev, err, "xenbus_dev_probe on %s", dev->nodename); 296 xenbus_switch_state(dev, XenbusStateClosed); 297 return -ENODEV; 298 } 299 300 int xenbus_dev_remove(struct device *_dev) 301 { 302 struct xenbus_device *dev = to_xenbus_device(_dev); 303 struct xenbus_driver *drv = to_xenbus_driver(_dev->driver); 304 305 DPRINTK("%s", dev->nodename); 306 307 free_otherend_watch(dev); 308 free_otherend_details(dev); 309 310 if (drv->remove) 311 drv->remove(dev); 312 313 xenbus_switch_state(dev, XenbusStateClosed); 314 return 0; 315 } 316 317 static void xenbus_dev_shutdown(struct device *_dev) 318 { 319 struct xenbus_device *dev = to_xenbus_device(_dev); 320 unsigned long timeout = 5*HZ; 321 322 DPRINTK("%s", dev->nodename); 323 324 get_device(&dev->dev); 325 if (dev->state != XenbusStateConnected) { 326 printk(KERN_INFO "%s: %s: %s != Connected, skipping\n", __func__, 327 dev->nodename, xenbus_strstate(dev->state)); 328 goto out; 329 } 330 xenbus_switch_state(dev, XenbusStateClosing); 331 timeout = wait_for_completion_timeout(&dev->down, timeout); 332 if (!timeout) 333 printk(KERN_INFO "%s: %s timeout closing device\n", 334 __func__, dev->nodename); 335 out: 336 put_device(&dev->dev); 337 } 338 339 int xenbus_register_driver_common(struct xenbus_driver *drv, 340 struct xen_bus_type *bus, 341 struct module *owner, 342 const char *mod_name) 343 { 344 drv->driver.name = drv->name; 345 drv->driver.bus = &bus->bus; 346 drv->driver.owner = owner; 347 drv->driver.mod_name = mod_name; 348 349 return driver_register(&drv->driver); 350 } 351 352 int __xenbus_register_frontend(struct xenbus_driver *drv, 353 struct module *owner, const char *mod_name) 354 { 355 int ret; 356 357 drv->read_otherend_details = read_backend_details; 358 359 ret = xenbus_register_driver_common(drv, &xenbus_frontend, 360 owner, mod_name); 361 if (ret) 362 return ret; 363 364 /* If this driver is loaded as a module wait for devices to attach. */ 365 wait_for_devices(drv); 366 367 return 0; 368 } 369 EXPORT_SYMBOL_GPL(__xenbus_register_frontend); 370 371 void xenbus_unregister_driver(struct xenbus_driver *drv) 372 { 373 driver_unregister(&drv->driver); 374 } 375 EXPORT_SYMBOL_GPL(xenbus_unregister_driver); 376 377 struct xb_find_info 378 { 379 struct xenbus_device *dev; 380 const char *nodename; 381 }; 382 383 static int cmp_dev(struct device *dev, void *data) 384 { 385 struct xenbus_device *xendev = to_xenbus_device(dev); 386 struct xb_find_info *info = data; 387 388 if (!strcmp(xendev->nodename, info->nodename)) { 389 info->dev = xendev; 390 get_device(dev); 391 return 1; 392 } 393 return 0; 394 } 395 396 struct xenbus_device *xenbus_device_find(const char *nodename, 397 struct bus_type *bus) 398 { 399 struct xb_find_info info = { .dev = NULL, .nodename = nodename }; 400 401 bus_for_each_dev(bus, NULL, &info, cmp_dev); 402 return info.dev; 403 } 404 405 static int cleanup_dev(struct device *dev, void *data) 406 { 407 struct xenbus_device *xendev = to_xenbus_device(dev); 408 struct xb_find_info *info = data; 409 int len = strlen(info->nodename); 410 411 DPRINTK("%s", info->nodename); 412 413 /* Match the info->nodename path, or any subdirectory of that path. */ 414 if (strncmp(xendev->nodename, info->nodename, len)) 415 return 0; 416 417 /* If the node name is longer, ensure it really is a subdirectory. */ 418 if ((strlen(xendev->nodename) > len) && (xendev->nodename[len] != '/')) 419 return 0; 420 421 info->dev = xendev; 422 get_device(dev); 423 return 1; 424 } 425 426 static void xenbus_cleanup_devices(const char *path, struct bus_type *bus) 427 { 428 struct xb_find_info info = { .nodename = path }; 429 430 do { 431 info.dev = NULL; 432 bus_for_each_dev(bus, NULL, &info, cleanup_dev); 433 if (info.dev) { 434 device_unregister(&info.dev->dev); 435 put_device(&info.dev->dev); 436 } 437 } while (info.dev); 438 } 439 440 static void xenbus_dev_release(struct device *dev) 441 { 442 if (dev) 443 kfree(to_xenbus_device(dev)); 444 } 445 446 static ssize_t xendev_show_nodename(struct device *dev, 447 struct device_attribute *attr, char *buf) 448 { 449 return sprintf(buf, "%s\n", to_xenbus_device(dev)->nodename); 450 } 451 DEVICE_ATTR(nodename, S_IRUSR | S_IRGRP | S_IROTH, xendev_show_nodename, NULL); 452 453 static ssize_t xendev_show_devtype(struct device *dev, 454 struct device_attribute *attr, char *buf) 455 { 456 return sprintf(buf, "%s\n", to_xenbus_device(dev)->devicetype); 457 } 458 DEVICE_ATTR(devtype, S_IRUSR | S_IRGRP | S_IROTH, xendev_show_devtype, NULL); 459 460 static ssize_t xendev_show_modalias(struct device *dev, 461 struct device_attribute *attr, char *buf) 462 { 463 return sprintf(buf, "xen:%s\n", to_xenbus_device(dev)->devicetype); 464 } 465 DEVICE_ATTR(modalias, S_IRUSR | S_IRGRP | S_IROTH, xendev_show_modalias, NULL); 466 467 int xenbus_probe_node(struct xen_bus_type *bus, 468 const char *type, 469 const char *nodename) 470 { 471 char devname[XEN_BUS_ID_SIZE]; 472 int err; 473 struct xenbus_device *xendev; 474 size_t stringlen; 475 char *tmpstring; 476 477 enum xenbus_state state = xenbus_read_driver_state(nodename); 478 479 if (state != XenbusStateInitialising) { 480 /* Device is not new, so ignore it. This can happen if a 481 device is going away after switching to Closed. */ 482 return 0; 483 } 484 485 stringlen = strlen(nodename) + 1 + strlen(type) + 1; 486 xendev = kzalloc(sizeof(*xendev) + stringlen, GFP_KERNEL); 487 if (!xendev) 488 return -ENOMEM; 489 490 xendev->state = XenbusStateInitialising; 491 492 /* Copy the strings into the extra space. */ 493 494 tmpstring = (char *)(xendev + 1); 495 strcpy(tmpstring, nodename); 496 xendev->nodename = tmpstring; 497 498 tmpstring += strlen(tmpstring) + 1; 499 strcpy(tmpstring, type); 500 xendev->devicetype = tmpstring; 501 init_completion(&xendev->down); 502 503 xendev->dev.bus = &bus->bus; 504 xendev->dev.release = xenbus_dev_release; 505 506 err = bus->get_bus_id(devname, xendev->nodename); 507 if (err) 508 goto fail; 509 510 dev_set_name(&xendev->dev, devname); 511 512 /* Register with generic device framework. */ 513 err = device_register(&xendev->dev); 514 if (err) 515 goto fail; 516 517 err = device_create_file(&xendev->dev, &dev_attr_nodename); 518 if (err) 519 goto fail_unregister; 520 521 err = device_create_file(&xendev->dev, &dev_attr_devtype); 522 if (err) 523 goto fail_remove_nodename; 524 525 err = device_create_file(&xendev->dev, &dev_attr_modalias); 526 if (err) 527 goto fail_remove_devtype; 528 529 return 0; 530 fail_remove_devtype: 531 device_remove_file(&xendev->dev, &dev_attr_devtype); 532 fail_remove_nodename: 533 device_remove_file(&xendev->dev, &dev_attr_nodename); 534 fail_unregister: 535 device_unregister(&xendev->dev); 536 fail: 537 kfree(xendev); 538 return err; 539 } 540 541 /* device/<typename>/<name> */ 542 static int xenbus_probe_frontend(const char *type, const char *name) 543 { 544 char *nodename; 545 int err; 546 547 nodename = kasprintf(GFP_KERNEL, "%s/%s/%s", 548 xenbus_frontend.root, type, name); 549 if (!nodename) 550 return -ENOMEM; 551 552 DPRINTK("%s", nodename); 553 554 err = xenbus_probe_node(&xenbus_frontend, type, nodename); 555 kfree(nodename); 556 return err; 557 } 558 559 static int xenbus_probe_device_type(struct xen_bus_type *bus, const char *type) 560 { 561 int err = 0; 562 char **dir; 563 unsigned int dir_n = 0; 564 int i; 565 566 dir = xenbus_directory(XBT_NIL, bus->root, type, &dir_n); 567 if (IS_ERR(dir)) 568 return PTR_ERR(dir); 569 570 for (i = 0; i < dir_n; i++) { 571 err = bus->probe(type, dir[i]); 572 if (err) 573 break; 574 } 575 kfree(dir); 576 return err; 577 } 578 579 int 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 kfree(dir); 595 return err; 596 } 597 598 static unsigned int char_count(const char *str, char c) 599 { 600 unsigned int i, ret = 0; 601 602 for (i = 0; str[i]; i++) 603 if (str[i] == c) 604 ret++; 605 return ret; 606 } 607 608 static int strsep_len(const char *str, char c, unsigned int len) 609 { 610 unsigned int i; 611 612 for (i = 0; str[i]; i++) 613 if (str[i] == c) { 614 if (len == 0) 615 return i; 616 len--; 617 } 618 return (len == 0) ? i : -ERANGE; 619 } 620 621 void xenbus_dev_changed(const char *node, struct xen_bus_type *bus) 622 { 623 int exists, rootlen; 624 struct xenbus_device *dev; 625 char type[XEN_BUS_ID_SIZE]; 626 const char *p, *root; 627 628 if (char_count(node, '/') < 2) 629 return; 630 631 exists = xenbus_exists(XBT_NIL, node, ""); 632 if (!exists) { 633 xenbus_cleanup_devices(node, &bus->bus); 634 return; 635 } 636 637 /* backend/<type>/... or device/<type>/... */ 638 p = strchr(node, '/') + 1; 639 snprintf(type, XEN_BUS_ID_SIZE, "%.*s", (int)strcspn(p, "/"), p); 640 type[XEN_BUS_ID_SIZE-1] = '\0'; 641 642 rootlen = strsep_len(node, '/', bus->levels); 643 if (rootlen < 0) 644 return; 645 root = kasprintf(GFP_KERNEL, "%.*s", rootlen, node); 646 if (!root) 647 return; 648 649 dev = xenbus_device_find(root, &bus->bus); 650 if (!dev) 651 xenbus_probe_node(bus, type, root); 652 else 653 put_device(&dev->dev); 654 655 kfree(root); 656 } 657 658 static void frontend_changed(struct xenbus_watch *watch, 659 const char **vec, unsigned int len) 660 { 661 DPRINTK(""); 662 663 xenbus_dev_changed(vec[XS_WATCH_PATH], &xenbus_frontend); 664 } 665 666 /* We watch for devices appearing and vanishing. */ 667 static struct xenbus_watch fe_watch = { 668 .node = "device", 669 .callback = frontend_changed, 670 }; 671 672 static int suspend_dev(struct device *dev, void *data) 673 { 674 int err = 0; 675 struct xenbus_driver *drv; 676 struct xenbus_device *xdev; 677 678 DPRINTK(""); 679 680 if (dev->driver == NULL) 681 return 0; 682 drv = to_xenbus_driver(dev->driver); 683 xdev = container_of(dev, struct xenbus_device, dev); 684 if (drv->suspend) 685 err = drv->suspend(xdev); 686 if (err) 687 printk(KERN_WARNING 688 "xenbus: suspend %s failed: %i\n", dev_name(dev), err); 689 return 0; 690 } 691 692 static int suspend_cancel_dev(struct device *dev, void *data) 693 { 694 int err = 0; 695 struct xenbus_driver *drv; 696 struct xenbus_device *xdev; 697 698 DPRINTK(""); 699 700 if (dev->driver == NULL) 701 return 0; 702 drv = to_xenbus_driver(dev->driver); 703 xdev = container_of(dev, struct xenbus_device, dev); 704 if (drv->suspend_cancel) 705 err = drv->suspend_cancel(xdev); 706 if (err) 707 printk(KERN_WARNING 708 "xenbus: suspend_cancel %s failed: %i\n", 709 dev_name(dev), err); 710 return 0; 711 } 712 713 static int resume_dev(struct device *dev, void *data) 714 { 715 int err; 716 struct xenbus_driver *drv; 717 struct xenbus_device *xdev; 718 719 DPRINTK(""); 720 721 if (dev->driver == NULL) 722 return 0; 723 724 drv = to_xenbus_driver(dev->driver); 725 xdev = container_of(dev, struct xenbus_device, dev); 726 727 err = talk_to_otherend(xdev); 728 if (err) { 729 printk(KERN_WARNING 730 "xenbus: resume (talk_to_otherend) %s failed: %i\n", 731 dev_name(dev), err); 732 return err; 733 } 734 735 xdev->state = XenbusStateInitialising; 736 737 if (drv->resume) { 738 err = drv->resume(xdev); 739 if (err) { 740 printk(KERN_WARNING 741 "xenbus: resume %s failed: %i\n", 742 dev_name(dev), err); 743 return err; 744 } 745 } 746 747 err = watch_otherend(xdev); 748 if (err) { 749 printk(KERN_WARNING 750 "xenbus_probe: resume (watch_otherend) %s failed: " 751 "%d.\n", dev_name(dev), err); 752 return err; 753 } 754 755 return 0; 756 } 757 758 void xenbus_suspend(void) 759 { 760 DPRINTK(""); 761 762 bus_for_each_dev(&xenbus_frontend.bus, NULL, NULL, suspend_dev); 763 xenbus_backend_suspend(suspend_dev); 764 xs_suspend(); 765 } 766 EXPORT_SYMBOL_GPL(xenbus_suspend); 767 768 void xenbus_resume(void) 769 { 770 xb_init_comms(); 771 xs_resume(); 772 bus_for_each_dev(&xenbus_frontend.bus, NULL, NULL, resume_dev); 773 xenbus_backend_resume(resume_dev); 774 } 775 EXPORT_SYMBOL_GPL(xenbus_resume); 776 777 void xenbus_suspend_cancel(void) 778 { 779 xs_suspend_cancel(); 780 bus_for_each_dev(&xenbus_frontend.bus, NULL, NULL, suspend_cancel_dev); 781 xenbus_backend_resume(suspend_cancel_dev); 782 } 783 EXPORT_SYMBOL_GPL(xenbus_suspend_cancel); 784 785 /* A flag to determine if xenstored is 'ready' (i.e. has started) */ 786 int xenstored_ready = 0; 787 788 789 int register_xenstore_notifier(struct notifier_block *nb) 790 { 791 int ret = 0; 792 793 if (xenstored_ready > 0) 794 ret = nb->notifier_call(nb, 0, NULL); 795 else 796 blocking_notifier_chain_register(&xenstore_chain, nb); 797 798 return ret; 799 } 800 EXPORT_SYMBOL_GPL(register_xenstore_notifier); 801 802 void unregister_xenstore_notifier(struct notifier_block *nb) 803 { 804 blocking_notifier_chain_unregister(&xenstore_chain, nb); 805 } 806 EXPORT_SYMBOL_GPL(unregister_xenstore_notifier); 807 808 void xenbus_probe(struct work_struct *unused) 809 { 810 BUG_ON((xenstored_ready <= 0)); 811 812 /* Enumerate devices in xenstore and watch for changes. */ 813 xenbus_probe_devices(&xenbus_frontend); 814 register_xenbus_watch(&fe_watch); 815 xenbus_backend_probe_and_watch(); 816 817 /* Notify others that xenstore is up */ 818 blocking_notifier_call_chain(&xenstore_chain, 0, NULL); 819 } 820 821 static int __init xenbus_probe_init(void) 822 { 823 int err = 0; 824 825 DPRINTK(""); 826 827 err = -ENODEV; 828 if (!xen_domain()) 829 goto out_error; 830 831 /* Register ourselves with the kernel bus subsystem */ 832 err = bus_register(&xenbus_frontend.bus); 833 if (err) 834 goto out_error; 835 836 err = xenbus_backend_bus_register(); 837 if (err) 838 goto out_unreg_front; 839 840 /* 841 * Domain0 doesn't have a store_evtchn or store_mfn yet. 842 */ 843 if (xen_initial_domain()) { 844 /* dom0 not yet supported */ 845 } else { 846 xenstored_ready = 1; 847 xen_store_evtchn = xen_start_info->store_evtchn; 848 xen_store_mfn = xen_start_info->store_mfn; 849 } 850 xen_store_interface = mfn_to_virt(xen_store_mfn); 851 852 /* Initialize the interface to xenstore. */ 853 err = xs_init(); 854 if (err) { 855 printk(KERN_WARNING 856 "XENBUS: Error initializing xenstore comms: %i\n", err); 857 goto out_unreg_back; 858 } 859 860 if (!xen_initial_domain()) 861 xenbus_probe(NULL); 862 863 #ifdef CONFIG_XEN_COMPAT_XENFS 864 /* 865 * Create xenfs mountpoint in /proc for compatibility with 866 * utilities that expect to find "xenbus" under "/proc/xen". 867 */ 868 proc_mkdir("xen", NULL); 869 #endif 870 871 return 0; 872 873 out_unreg_back: 874 xenbus_backend_bus_unregister(); 875 876 out_unreg_front: 877 bus_unregister(&xenbus_frontend.bus); 878 879 out_error: 880 return err; 881 } 882 883 postcore_initcall(xenbus_probe_init); 884 885 MODULE_LICENSE("GPL"); 886 887 static int is_disconnected_device(struct device *dev, void *data) 888 { 889 struct xenbus_device *xendev = to_xenbus_device(dev); 890 struct device_driver *drv = data; 891 struct xenbus_driver *xendrv; 892 893 /* 894 * A device with no driver will never connect. We care only about 895 * devices which should currently be in the process of connecting. 896 */ 897 if (!dev->driver) 898 return 0; 899 900 /* Is this search limited to a particular driver? */ 901 if (drv && (dev->driver != drv)) 902 return 0; 903 904 xendrv = to_xenbus_driver(dev->driver); 905 return (xendev->state != XenbusStateConnected || 906 (xendrv->is_ready && !xendrv->is_ready(xendev))); 907 } 908 909 static int exists_disconnected_device(struct device_driver *drv) 910 { 911 return bus_for_each_dev(&xenbus_frontend.bus, NULL, drv, 912 is_disconnected_device); 913 } 914 915 static int print_device_status(struct device *dev, void *data) 916 { 917 struct xenbus_device *xendev = to_xenbus_device(dev); 918 struct device_driver *drv = data; 919 920 /* Is this operation limited to a particular driver? */ 921 if (drv && (dev->driver != drv)) 922 return 0; 923 924 if (!dev->driver) { 925 /* Information only: is this too noisy? */ 926 printk(KERN_INFO "XENBUS: Device with no driver: %s\n", 927 xendev->nodename); 928 } else if (xendev->state != XenbusStateConnected) { 929 printk(KERN_WARNING "XENBUS: Timeout connecting " 930 "to device: %s (state %d)\n", 931 xendev->nodename, xendev->state); 932 } 933 934 return 0; 935 } 936 937 /* We only wait for device setup after most initcalls have run. */ 938 static int ready_to_wait_for_devices; 939 940 /* 941 * On a 10 second timeout, wait for all devices currently configured. We need 942 * to do this to guarantee that the filesystems and / or network devices 943 * needed for boot are available, before we can allow the boot to proceed. 944 * 945 * This needs to be on a late_initcall, to happen after the frontend device 946 * drivers have been initialised, but before the root fs is mounted. 947 * 948 * A possible improvement here would be to have the tools add a per-device 949 * flag to the store entry, indicating whether it is needed at boot time. 950 * This would allow people who knew what they were doing to accelerate their 951 * boot slightly, but of course needs tools or manual intervention to set up 952 * those flags correctly. 953 */ 954 static void wait_for_devices(struct xenbus_driver *xendrv) 955 { 956 unsigned long timeout = jiffies + 10*HZ; 957 struct device_driver *drv = xendrv ? &xendrv->driver : NULL; 958 959 if (!ready_to_wait_for_devices || !xen_domain()) 960 return; 961 962 while (exists_disconnected_device(drv)) { 963 if (time_after(jiffies, timeout)) 964 break; 965 schedule_timeout_interruptible(HZ/10); 966 } 967 968 bus_for_each_dev(&xenbus_frontend.bus, NULL, drv, 969 print_device_status); 970 } 971 972 #ifndef MODULE 973 static int __init boot_wait_for_devices(void) 974 { 975 ready_to_wait_for_devices = 1; 976 wait_for_devices(NULL); 977 return 0; 978 } 979 980 late_initcall(boot_wait_for_devices); 981 #endif 982