X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Fxen%2Fxenbus%2Fxenbus_client.c;h=d1679701dd72ec942bdbb17a6c71f44cc60fc2f1;hb=7a1f7716a86de856303ff47c2e990a7082eef013;hp=24661a861b98eb081e81bfb8a2b5f634277e0ad6;hpb=f3b843e558cd01b1e629d000e2865812b7fd91a4;p=linux-2.6.git diff --git a/drivers/xen/xenbus/xenbus_client.c b/drivers/xen/xenbus/xenbus_client.c index 24661a861..d1679701d 100644 --- a/drivers/xen/xenbus/xenbus_client.c +++ b/drivers/xen/xenbus/xenbus_client.c @@ -35,12 +35,23 @@ #include #include -/* xenbus_probe.c */ -extern char *kasprintf(const char *fmt, ...); - #define DPRINTK(fmt, args...) \ pr_debug("xenbus_client (%s:%d) " fmt ".\n", __FUNCTION__, __LINE__, ##args) +char *xenbus_strstate(enum xenbus_state state) +{ + static char *name[] = { + [ XenbusStateUnknown ] = "Unknown", + [ XenbusStateInitialising ] = "Initialising", + [ XenbusStateInitWait ] = "InitWait", + [ XenbusStateInitialised ] = "Initialised", + [ XenbusStateConnected ] = "Connected", + [ XenbusStateClosing ] = "Closing", + [ XenbusStateClosed ] = "Closed", + }; + return (state < ARRAY_SIZE(name)) ? name[state] : "INVALID"; +} + int xenbus_watch_path(struct xenbus_device *dev, const char *path, struct xenbus_watch *watch, void (*callback)(struct xenbus_watch *, @@ -70,7 +81,7 @@ int xenbus_watch_path2(struct xenbus_device *dev, const char *path, const char **, unsigned int)) { int err; - char *state = kasprintf("%s/%s", path, path2); + char *state = kasprintf(GFP_KERNEL, "%s/%s", path, path2); if (!state) { xenbus_dev_fatal(dev, -ENOMEM, "allocating path for watch"); return -ENOMEM; @@ -124,6 +135,13 @@ int xenbus_switch_state(struct xenbus_device *dev, enum xenbus_state state) } EXPORT_SYMBOL_GPL(xenbus_switch_state); +int xenbus_frontend_closed(struct xenbus_device *dev) +{ + xenbus_switch_state(dev, XenbusStateClosed); + complete(&dev->down); + return 0; +} +EXPORT_SYMBOL_GPL(xenbus_frontend_closed); /** * Return the path to the error node for the given device, or NULL on failure. @@ -131,7 +149,7 @@ EXPORT_SYMBOL_GPL(xenbus_switch_state); */ static char *error_path(struct xenbus_device *dev) { - return kasprintf("error/%s", dev->nodename); + return kasprintf(GFP_KERNEL, "error/%s", dev->nodename); } @@ -274,7 +292,7 @@ enum xenbus_state xenbus_read_driver_state(const char *path) enum xenbus_state result; int err = xenbus_gather(XBT_NIL, path, "state", "%d", &result, NULL); if (err) - result = XenbusStateClosed; + result = XenbusStateUnknown; return result; }