# HG changeset patch # User Brendan Cully # Date 1168646163 28800 # Node ID f6c3f5b0be95efeb0c47318bc6608310cd49c804 # Parent 4fc2fde1b3737554edd795e65701292d8320405d Add unsuspend hook for resuming devices in the checkpoint parent. Nothing uses it at the moment. Signed-off-by: Brendan Cully diff -r 4fc2fde1b373 -r f6c3f5b0be95 linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_probe.c --- a/linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_probe.c Fri Jan 12 15:02:24 2007 -0800 +++ b/linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_probe.c Fri Jan 12 15:56:03 2007 -0800 @@ -672,6 +672,26 @@ static int suspend_dev(struct device *de return 0; } +static int unsuspend_dev(struct device *dev, void *data) +{ + int err = 0; + struct xenbus_driver *drv; + struct xenbus_device *xdev; + + DPRINTK(""); + + if (dev->driver == NULL) + return 0; + drv = to_xenbus_driver(dev->driver); + xdev = container_of(dev, struct xenbus_device, dev); + if (drv->unsuspend) + err = drv->unsuspend(xdev); + if (err) + printk(KERN_WARNING + "xenbus: unsuspend %s failed: %i\n", dev->bus_id, err); + return 0; +} + static int resume_dev(struct device *dev, void *data) { int err; @@ -735,6 +755,9 @@ void xenbus_resume(int reconnect) if (reconnect) { bus_for_each_dev(&xenbus_frontend.bus, NULL, NULL, resume_dev); + } else { + bus_for_each_dev(&xenbus_frontend.bus, NULL, NULL, + unsuspend_dev); } xenbus_backend_resume(resume_dev); } diff -r 4fc2fde1b373 -r f6c3f5b0be95 linux-2.6-xen-sparse/include/xen/xenbus.h --- a/linux-2.6-xen-sparse/include/xen/xenbus.h Fri Jan 12 15:02:24 2007 -0800 +++ b/linux-2.6-xen-sparse/include/xen/xenbus.h Fri Jan 12 15:56:03 2007 -0800 @@ -101,6 +101,7 @@ struct xenbus_driver { enum xenbus_state backend_state); int (*remove)(struct xenbus_device *dev); int (*suspend)(struct xenbus_device *dev); + int (*unsuspend)(struct xenbus_device *dev); int (*resume)(struct xenbus_device *dev); int (*uevent)(struct xenbus_device *, char **, int, char *, int); struct device_driver driver;