HID: sony: Send FF commands in non-atomic context
authorSven Eckelmann <sven@narfation.org>
Sun, 17 Nov 2013 19:38:21 +0000 (20:38 +0100)
committerJiri Kosina <jkosina@suse.cz>
Tue, 19 Nov 2013 08:37:45 +0000 (09:37 +0100)
commit9f323b681139d99beb456aff08cf339b29f3c78d
tree170dfa3046d5dcddf3f5bd7ce490f8ed0b990712
parente0da5c9a49b927d9e5f62b21a7abc283e99022e2
HID: sony: Send FF commands in non-atomic context

The ff_memless has a timer running which gets run in an atomic context and
calls the play_effect callback. The callback function for sony uses the
hid_output_raw_report (overwritten by sixaxis_usb_output_raw_report) function
to handle differences in the control message format. It is not safe for an
atomic context because it may sleep later in usb_start_wait_urb.

This "scheduling while atomic" can cause the system to lock up. A workaround is
to make the force feedback state update using work_queues and use the
play_effect function only to enqueue the work item.

Reported-by: Simon Wood <simon@mungewell.org>
Reported-by: David Herrmann <dh.herrmann@gmail.com>
Signed-off-by: Sven Eckelmann <sven@narfation.org>
Signed-off-by: Simon Wood <simon@mungewell.org>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
drivers/hid/hid-sony.c