diff options
| author | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2010-10-05 05:41:40 +0000 |
|---|---|---|
| committer | Henrik Rydberg <rydberg@euromail.se> | 2010-10-15 15:16:36 +0200 |
| commit | 17b16c55244b750e5b523baffeb533026022463c (patch) | |
| tree | a865a5cf7e5290ec6cfb4cbf67f6c07136e7d9df /usr/src/dkms_source_tree/wacom_sys.c | |
| parent | 2c06b47c113544965a8d99078ae2c8bda883f72b (diff) | |
wacom + runtime PM = AA deadlock
On Mon, Oct 04, 2010 at 09:24:24PM +0200, Oliver Neukum wrote:
> Am Montag, 4. Oktober 2010, 20:38:49 schrieb Dmitry Torokhov:
> > On Mon, Oct 04, 2010 at 08:33:53PM +0200, Oliver Neukum wrote:
> > > Am Montag, 4. Oktober 2010, 18:13:20 schrieb Dmitry Torokhov:
> > > > Lost track of this issue for a while. So I think we still need to fix
> > > > the deadlock for .36 and I think that the following will do that. Then
> > > > we'll adjust the driver to actually enable runtime PM for .37.
> > >
> > > That's a viable plan.
> > >
> >
> > I take it as an "acked-by" for this patch, right?
>
> Sure. Just in case:
>
> Acked-by: Oliver Neukum <oneukum@suse.de>
>
Thanks Oliver. And the patch below is for .37 properly enabling runtime
PM for wacom.
Acked-by: Oliver Neukum <oneukum@suse.de>
Diffstat (limited to 'usr/src/dkms_source_tree/wacom_sys.c')
| -rw-r--r-- | usr/src/dkms_source_tree/wacom_sys.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/usr/src/dkms_source_tree/wacom_sys.c b/usr/src/dkms_source_tree/wacom_sys.c index 02de653..fc38149 100644 --- a/usr/src/dkms_source_tree/wacom_sys.c +++ b/usr/src/dkms_source_tree/wacom_sys.c | |||
| @@ -120,14 +120,16 @@ static int wacom_open(struct input_dev *dev) | |||
| 120 | 120 | ||
| 121 | out: | 121 | out: |
| 122 | mutex_unlock(&wacom->lock); | 122 | mutex_unlock(&wacom->lock); |
| 123 | if (retval) | 123 | usb_autopm_put_interface(wacom->intf); |
| 124 | usb_autopm_put_interface(wacom->intf); | ||
| 125 | return retval; | 124 | return retval; |
| 126 | } | 125 | } |
| 127 | 126 | ||
| 128 | static void wacom_close(struct input_dev *dev) | 127 | static void wacom_close(struct input_dev *dev) |
| 129 | { | 128 | { |
| 130 | struct wacom *wacom = input_get_drvdata(dev); | 129 | struct wacom *wacom = input_get_drvdata(dev); |
| 130 | int autopm_error; | ||
| 131 | |||
| 132 | autopm_error = usb_autopm_get_interface(wacom->intf); | ||
| 131 | 133 | ||
| 132 | mutex_lock(&wacom->lock); | 134 | mutex_lock(&wacom->lock); |
| 133 | usb_kill_urb(wacom->irq); | 135 | usb_kill_urb(wacom->irq); |
| @@ -135,7 +137,8 @@ static void wacom_close(struct input_dev *dev) | |||
| 135 | wacom->intf->needs_remote_wakeup = 0; | 137 | wacom->intf->needs_remote_wakeup = 0; |
| 136 | mutex_unlock(&wacom->lock); | 138 | mutex_unlock(&wacom->lock); |
| 137 | 139 | ||
| 138 | usb_autopm_put_interface(wacom->intf); | 140 | if (!autopm_error) |
| 141 | usb_autopm_put_interface(wacom->intf); | ||
| 139 | } | 142 | } |
| 140 | 143 | ||
| 141 | static int wacom_parse_hid(struct usb_interface *intf, struct hid_descriptor *hid_desc, | 144 | static int wacom_parse_hid(struct usb_interface *intf, struct hid_descriptor *hid_desc, |
