Linux USB + Roccat Arvo keyboard = panic

20 June 2015 in Kizajournal

Boom. I like boom… mostly. This must be the first, genuine, reproducible kernel panic I have had in a very long time! Some days ago I bought a Roccat Arvo gaming keyboard after my Logitech illuminated keyboard decided that it doesn't need the 'G' key anymore. Apparently a tiny plastic part broke that held the key in place. On ebay some sellers, more like scammers, sell "three key caps" for this exakt model. Turns out you get three random key caps. Hm, 105 keys, one broke, I get three random replacements. Do the math yourself. :)

Anyway, connecting the Arvo produced the following on my laptop:

input: ROCCAT ROCCAT Arvo as /devices/pci0000:00/0000:00:12.0/usb3/3-2/3-2:1.0/0003:1E7D:30D4.000 2/input/input23 arvo 0003:1E7D:30D4.0002: input,hidraw1: USB HID v11.10 Keyboard [ROCCAT ROCCAT Arvo] on usb-0000:00:12.0-2/input0 arvo 0003:1E7D:30D4.0003: usb_submit_urb(ctrl) failed: -1 arvo 0003:1E7D:30D4.0003: timeout initializing reports input: ROCCAT ROCCAT Arvo as /devices/pci0000:00/0000:00:12.0/usb3/3-2/3-2:1.1/0003:1E7D:30D4.0003/input/input24 arvo 0003:1E7D:30D4.0003: input,hidraw2: USB HID v11.10 Device [ROCCAT ROCCAT Arvo] on usb-0000:00:12.0-2/input1 arvo 0003:1E7D:30D4.0003: couldn't init struct arvo_device arvo 0003:1E7D:30D4.0003: couldn't install keyboard arvo: probe of 0003:1E7D:30D4.0003 failed with error -110

Seems some combinations of USB controllers and hid devices are bugged. Using the mode switch for the keyboard's numpad and then pressing some keys on the numpad result in an instant kernel panic in io_watchdog_func() [ohci_hcd].

On another system it works perfectly fine, without the USB error messages if it is plugged-in. At least it seems like the underlying bug is already known:,

The solution!

What I tried is absurd and stupidly simple. Put an USB hub between computer and keyboard. All problems gone! At least until the bug is fixed which seems to be affecting a wide range of kernels. Happened with Debian's 3.16 - 4.0.5.

The real solution

This bug seems to have been fixed in kernel 4.1.4. USB: OHCI: Fix race between ED unlink and URB submission, commit 7d8021c967648accd1b78e5e1ddaad655cd2c61f upstream. Of course even Sid has 4.1.3 at the moment.