[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [linux-2.6.18-xen] usbfront: fix some bugs



# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1268659221 0
# Node ID 505690874cd9d5220b7864f2a3c8e1b28b8add79
# Parent  f66d155ce457dab7a191bc199e878c07c2d2aead
usbfront: fix some bugs

Signed-off-by: K. Y. Srinivasan <ksrinivasan@xxxxxxxxxx>
---
 drivers/xen/usbfront/xenbus.c |   24 ++++++++++++++----------
 1 files changed, 14 insertions(+), 10 deletions(-)

diff -r f66d155ce457 -r 505690874cd9 drivers/xen/usbfront/xenbus.c
--- a/drivers/xen/usbfront/xenbus.c     Mon Mar 01 10:19:41 2010 +0000
+++ b/drivers/xen/usbfront/xenbus.c     Mon Mar 15 13:20:21 2010 +0000
@@ -192,11 +192,23 @@ static int connect(struct xenbus_device 
        usbif_conn_request_t *req;
        int i, idx, err;
        int notify;
+       char name[TASK_COMM_LEN];
+       struct usb_hcd *hcd;
+
+       hcd = info_to_hcd(info);
+       snprintf(name, TASK_COMM_LEN, "xenhcd.%d", hcd->self.busnum);
 
        err = talk_to_backend(dev, info);
        if (err)
                return err;
 
+       info->kthread = kthread_run(xenhcd_schedule, info, name);
+       if (IS_ERR(info->kthread)) {
+               err = PTR_ERR(info->kthread);
+               info->kthread = NULL;
+               xenbus_dev_fatal(dev, err, "Error creating thread");
+               return err;
+       }
        /* prepare ring for hotplug notification */
        for (idx = 0, i = 0; i < USB_CONN_RING_SIZE; i++) {
                req = RING_GET_REQUEST(&info->conn_ring, idx);
@@ -274,7 +286,6 @@ static int usbfront_probe(struct xenbus_
        int err;
        struct usb_hcd *hcd;
        struct usbfront_info *info;
-       char name[TASK_COMM_LEN];
 
        if (usb_disabled())
                return -ENODEV;
@@ -298,13 +309,6 @@ static int usbfront_probe(struct xenbus_
        }
 
        init_waitqueue_head(&info->wq);
-       snprintf(name, TASK_COMM_LEN, "xenhcd.%d", hcd->self.busnum);
-       info->kthread = kthread_run(xenhcd_schedule, info, name);
-       if (IS_ERR(info->kthread)) {
-               err = PTR_ERR(info->kthread);
-               info->kthread = NULL;
-               goto fail;
-       }
 
        return 0;
 
@@ -343,8 +347,8 @@ static void backend_changed(struct xenbu
        case XenbusStateInitWait:
                if (dev->state != XenbusStateInitialising)
                        break;
-               connect(dev);
-               xenbus_switch_state(dev, XenbusStateConnected);
+               if (!connect(dev))
+                       xenbus_switch_state(dev, XenbusStateConnected);
                break;
 
        case XenbusStateClosing:

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.