Messages in this thread | | | From | Oliver Neukum <> | Subject | Re: [PATCH] hci_usb: implement suspend/resume | Date | Wed, 18 Jan 2006 14:25:34 +0100 |
| |
Am Mittwoch, 18. Januar 2006 00:21 schrieb Johannes Berg: > The attached patch implements suspend/resume for the hci_usb bluetooth > driver by simply killing all outstanding urbs on suspend, and re-issuing > them on resume. > > This allows me to actually use the internal bluetooth "dongle" in my > powerbook after suspend-to-ram without taking down all userland programs > (sdpd, ...) and the hci device and reloading the module. > > Signed-Off-By: Johannes Berg <johannes@sipsolutions.net> > > --- linux-2.6.15.1.orig/drivers/bluetooth/hci_usb.c 2006-01-18 00:08:54.840000000 +0100 > +++ linux-2.6.15.1/drivers/bluetooth/hci_usb.c 2006-01-18 00:06:35.080000000 +0100 > @@ -1043,11 +1043,55 @@ > hci_free_dev(hdev); > } > > +static int hci_usb_suspend(struct usb_interface *intf, pm_message_t message) > +{ > + struct hci_usb *husb = usb_get_intfdata(intf); > + int i; > + unsigned long flags; > + if (!husb || intf == husb->isoc_iface) > + return 0; > + > + for (i = 0; i < 4; i++) { > + struct _urb_queue *q = &husb->pending_q[i]; > + struct _urb *_urb; > + spin_lock_irqsave(&q->lock, flags); > + list_for_each_entry(_urb, &q->head, list) > + usb_kill_urb(&_urb->urb); > + spin_unlock_irqrestore(&q->lock, flags); > + } > + return 0;
This patch is wrong. usb_kill_urb() will sleep. You must not use it under a spinlock.
Regards Oliver - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |