[PATCH v3 0/2] staging: speakup factor out selection code

Okash Khawaja okash.khawaja at gmail.com
Thu Apr 4 05:04:40 EDT 2019


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




More information about the Speakup mailing list