Okay then it must be that speakup_fake_down_arrow() is called from inside a different interrupt when on serial synth. Otherwise it would have caused kernel lock up. Thanks very much for testing. I'll try to fix my serial synth. Cheers, Okash On 21 Aug 2017 4:33 am, "John Covici" <covici@xxxxxxxxxxxxxx> wrote: I tried the new patch, but no joy. I hope you can fix your serial synth to test. Thanks for trying. On Sun, 20 Aug 2017 17:45:27 -0400, Okash Khawaja wrote: > > Hi, > > Here's one thing I think worth trying. I have updated the patch so that > the net difference between before and after the patch is that > speakup_fake_down_arrow() is not called when inside interrupt context. > > Calling speakup_fake_down_arrow() inside interrupt causes the kernel > lock up because this itself generates same interrupt, leading to > infinite recursion. > > I didn't think this code was triggered outside of interrupt context, but > it possibly is when using a serial console - which is the only > explanation I can think of for the behaviour you've described. > > Thanks > > > --- > drivers/staging/speakup/main.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > --- a/drivers/staging/speakup/main.c > +++ b/drivers/staging/speakup/main.c > @@ -1408,7 +1408,10 @@ 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); > + if (!in_interrupt()) > + speakup_fake_down_arrow(); > + 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