[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


 


Rackspace

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