Yes export-tty.patch on the repo has been updated. Let me know if you get any problems. Cheers, Okash > On 24 Jun 2017, at 11:12, John Covici <covici@xxxxxxxxxxxxxx> wrote: > > Thanks a lot, I will definitely test this -- do I need a new > export.patch as well? > > On Sat, 24 Jun 2017 05:06:45 -0400, > Okash Khawaja wrote: >> >> Hi, >> >> The lockup when running speakup-r at start of an empty line occurs >> because simulated key press is generated (using speakup_fake_down_arrow) >> from context of keyboard_notifier_call callback which is called in >> interrupt context. The simulated keypress leads to >> keybaord_notifier_call to be trigerred again from the same context >> leading to the lockup. The exact cause could be priority inversion where >> simulated keypress cannot be processed because there is a real keyboard >> interrupt already being processed (the one from which simulated keypress >> was triggered), hence causing a deadlock. Please share your thoughts on >> this. Here is the call chain. >> >> (speakup-r) --> keyboard_notifier_call --> speakup_key --> do_spkup --> >> read_all_doc --> get_sentence_buf [which returns -1 because of empty >> line] --> kbd_fakekey2(RA_DOWN_ARROW) --> speakup_fake_down_arrow >> >> The following patch resolves this by not simulating the keypress inside >> keyboard notifier callback but instead delegating it to cursor_timer. In >> the above chain, when get_sentence_buf returns -1, this patch starts >> timer and passes RA_DOWN_ARROW as argument. When timer handler runs and >> sees RA_DOWN_ARROW, it will then call kbd_fakekey2(RA_DOWN_ARROW) which >> will correctly simulate the keypress inside timer context. I've tested >> this succesfully. >> >> It's the first time I've worked on this side of the code so please >> review carefully :) >> >> Finally, I have updated the test repo on github so you can test from >> there. >> >> Thanks, >> Okash >> >> --- >> drivers/staging/speakup/main.c | 3 ++- >> 1 file changed, 2 insertions(+), 1 deletion(-) >> >> --- a/drivers/staging/speakup/main.c >> +++ b/drivers/staging/speakup/main.c >> @@ -1408,7 +1408,8 @@ static void read_all_doc(struct vc_data >> cursor_track = read_all_mode; >> spk_reset_index_count(0); >> if (get_sentence_buf(vc, 0) == -1) { >> - kbd_fakekey2(vc, RA_DOWN_ARROW); >> + del_timer(&cursor_timer); >> + start_read_all_timer(vc, RA_DOWN_ARROW); >> } else { >> say_sentence_num(0, 0); >> synth_insert_next_index(0); > > -- > Your life is like a penny. You're going to lose it. The question is: > How do > you spend it? > > John Covici > covici@xxxxxxxxxxxxxx _______________________________________________ Speakup mailing list Speakup@xxxxxxxxxxxxxxxxx http://linux-speakup.org/cgi-bin/mailman/listinfo/speakup