Hi, This version fixes potential races in v2 when putting tty kref and setting it to NULL. Comments in speakup_set_selection() and speakup_cancel_selection() explain the changes. Changes in v2: - change the only mb() in selection.c into rmb() - add a wmb() to speakup_set_selection() - set tty references inside selection.c to NULL when cancelling work Original intro: Speakup's selection functionality parallels that of drivers/tty/vt/selection.c. This patch set replaces speakup's implementation with calls to vt's selection code. This is one of the remaining items in our TODO file and it's needed for moving speakup out of staging. The patches seem to be working on my side but I haven't done extensive testing. Can someone please check they work for them too? Since there is a change in tty code, it will require kernel re-compile. One thing that's different with vt's selection.c is that it highlights the selected text on screen. If that is a problem then let me know and we can take it out. Please note that in speakup selection is set inside interrupt context of keyboard handler. Set selection code in vt happens in process context and hence expects ability to sleep. To address this, there were two options: farm out speakup's set selection into a work_struct thread, or create atomic version of vt's set_selection. These patches implement the former option. Here's a summary: Patch 1 re-arranges code in vt and exports some functions. Patch 2 replaces speakup's selection code with calls to vt's functions exported in patch 1. Thanks, Okash _______________________________________________ Speakup mailing list Speakup@xxxxxxxxxxxxxxxxx http://linux-speakup.org/cgi-bin/mailman/listinfo/speakup