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