# letting version tracking do its work tags 409349 - squeeze tags 409349 + patch moreinfo quit
Hi again, Steven Chamberlain wrote: > On 05/04/12 13:48, hugo vanwoerkom wrote: >> apcupsd 3.14.10-1 with MODEL: Back-UPS RS 700G and Sid kernel >> 3.2.0-2-amd64. Can't reproduce problem. > > Thanks a lot. So far I've not experienced this in 3.2.0-2-amd64 > 3.2.12-1 either but I've only been testing for a few hours. Great, thanks. If this is still reproducible on 2.6.37, based on $ git log --no-merges --oneline v2.6.37..v3.2.12 -- drivers/hid/usbhid/hid-core.c fad9fbe8651e HID: usbhid: cancel timer for retry synchronously 5b1b0b812a7b PM / Runtime: Add macro to test for runtime PM events 6dc1418e1314 HID: yurex: recognize GeneralKeys wireless presenter as generic HID b4dbde9da8ec HID: Add Support for Setting and Getting Feature Reports from hidraw 68229689b6dc HID: usbhid: base runtime PM on modern API 4291ee305e9b HID: Add and use hid_<level>: dev_<level> equivalents a path-limited bisect[1] to find the fix should not take many iterations. Let me know and I can send some commands to try. The topmost and second-to-bottom commits look especially interesting. (Unfortunately none of these looks too promising.) I'm attaching a copy of the topmost backported to 2.6.32.y. Results from trying it against the squeeze kernel, following instructions from [2], would be interesting, though I am not too optimistic. Hope that helps. Grasping at straws, Jonathan [1] http://git-htmldocs.googlecode.com/git/git-bisect-lk2009.html [2] http://kernel-handbook.alioth.debian.org/ch-common-tasks.html#s-common-official or the corresponding page from the debian-kernel-handbook package
From: Oliver Neukum <oli...@neukum.org> Date: Thu, 13 Oct 2011 18:21:58 +0200 Subject: HID: usbhid: cancel timer for retry synchronously commit fad9fbe8651e8abd9794d4b4c4133241aa3093b5 upstream. This makes sure IO is never restarted while a reset is going on In particular there seems to be no protection from hid_retry_timeout() calling hid_start_in() which would start IO after hid_pre_reset() has already called hid_cease_io() because that uses del_timer(), not del_timer_sync() Signed-off-by: Oliver Neukum <oneu...@suse.de> Signed-off-by: Jiri Kosina <jkos...@suse.cz> Signed-off-by: Jonathan Nieder <jrnie...@gmail.com> --- drivers/hid/usbhid/hid-core.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/hid/usbhid/hid-core.c b/drivers/hid/usbhid/hid-core.c index e9add5b3481d..a8bdd6bc7ef2 100644 --- a/drivers/hid/usbhid/hid-core.c +++ b/drivers/hid/usbhid/hid-core.c @@ -1216,7 +1216,7 @@ static void hid_cancel_delayed_stuff(struct usbhid_device *usbhid) static void hid_cease_io(struct usbhid_device *usbhid) { - del_timer(&usbhid->io_retry); + del_timer_sync(&usbhid->io_retry); usb_kill_urb(usbhid->urbin); usb_kill_urb(usbhid->urbctrl); usb_kill_urb(usbhid->urbout); -- 1.7.10.2