[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel][PATCH]: Fix some bugs in usbfront
>>> On 3/12/2010 at 5:30 PM, in message <20100312223035.GM1878@xxxxxxxxxxx>, >>> Pasi KÃrkkÃinen<pasik@xxxxxx> wrote: > On Fri, Mar 12, 2010 at 11:25:21AM -0700, Ky Srinivasan wrote: >> The attached patch fixes some bugs in usbfront. >> > > What kernel version is this patch against? linux-2.6.18-xen? Once again this patch is against 2.6.32 kernel (sles11 sp1). Sorry for not making this clear in the patch. Regards, K. Y > -- Pasi > >> Signed-off-by: K. Y. Srinivasan <ksrinivasan@xxxxxxxxxx> >> >> >> >> > >> Bug#584218: Fix a scheduling race in usbfront. Create the thread only after > we >> are connected. The current code schedules the thread at a point where the >> communication rings are not initialized yet. >> >> Signed-off-by: K. Y. Srinivasan <ksrinivasan@xxxxxxxxxx> >> >> Index: linux/drivers/xen/usbfront/xenbus.c >> =================================================================== >> --- linux.orig/drivers/xen/usbfront/xenbus.c 2010-03-10 12:10:58.000000000 >> -0700 >> +++ linux/drivers/xen/usbfront/xenbus.c 2010-03-10 12:17:24.000000000 >> -0700 >> @@ -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-devel mailing list >> Xen-devel@xxxxxxxxxxxxxxxxxxx >> http://lists.xensource.com/xen-devel _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |