summaryrefslogtreecommitdiffstats
path: root/drivers/staging/speakup/main.c
diff options
context:
space:
mode:
authorBen Hutchings <ben@decadent.org.uk>2014-05-19 00:56:22 +0100
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2014-05-24 02:25:10 +0900
commitd7500135802ca55b3f4e01a16544e8b34082f8c3 (patch)
tree67baa0387aee5792f9d62e485e1add9dec14675d /drivers/staging/speakup/main.c
parentffed54dced86723f352323f15789d9ad6bee25e1 (diff)
downloadop-kernel-dev-d7500135802ca55b3f4e01a16544e8b34082f8c3.zip
op-kernel-dev-d7500135802ca55b3f4e01a16544e8b34082f8c3.tar.gz
Staging: speakup: Move pasting into a work item
Input is handled in softirq context, but when pasting we may need to sleep. speakup_paste_selection() currently tries to bodge this by busy-waiting if in_atomic(), but that doesn't help because the ldisc may also sleep. For bonus breakage, speakup_paste_selection() changes the state of current, even though it's not running in process context. Move it into a work item and make sure to cancel it on exit. References: https://bugs.debian.org/735202 References: https://bugs.debian.org/744015 Reported-by: Paul Gevers <elbrus@debian.org> Reported-and-tested-by: Jarek Czekalski <jarekczek@poczta.onet.pl> Signed-off-by: Ben Hutchings <ben@decadent.org.uk> Cc: stable@vger.kernel.org Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/staging/speakup/main.c')
-rw-r--r--drivers/staging/speakup/main.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/drivers/staging/speakup/main.c b/drivers/staging/speakup/main.c
index 3b6e535..7de79d5 100644
--- a/drivers/staging/speakup/main.c
+++ b/drivers/staging/speakup/main.c
@@ -2218,6 +2218,7 @@ static void __exit speakup_exit(void)
unregister_keyboard_notifier(&keyboard_notifier_block);
unregister_vt_notifier(&vt_notifier_block);
speakup_unregister_devsynth();
+ speakup_cancel_paste();
del_timer(&cursor_timer);
kthread_stop(speakup_task);
speakup_task = NULL;
OpenPOWER on IntegriCloud