summaryrefslogtreecommitdiff
path: root/usr
diff options
context:
space:
mode:
authorDmitry Torokhov <dmitry.torokhov@gmail.com>2010-10-05 05:41:40 +0000
committerHenrik Rydberg <rydberg@euromail.se>2010-10-15 15:16:36 +0200
commit17b16c55244b750e5b523baffeb533026022463c (patch)
treea865a5cf7e5290ec6cfb4cbf67f6c07136e7d9df /usr
parent2c06b47c113544965a8d99078ae2c8bda883f72b (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')
-rw-r--r--usr/src/dkms_source_tree/wacom_sys.c9
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
121out: 121out:
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
128static void wacom_close(struct input_dev *dev) 127static 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
141static int wacom_parse_hid(struct usb_interface *intf, struct hid_descriptor *hid_desc, 144static int wacom_parse_hid(struct usb_interface *intf, struct hid_descriptor *hid_desc,