|
So, as it turns out, the TTY and serial layers were fine.
The actual problem I'm having is with the schedule_delayed_work call.
The function tty_flip_buffer_push in drivers/char/tty_buffer.c calls flush_to_ldisc, which pushes the data to user space, if the tty->low_latency flag is set. Otherwise, it will push onto the scheduler with schedule_delayed_work. The problem here is that this delayed work is never revisited. Thus, my character input was never sent through to user space because the scheduler never called the process to do it again.
For the time being, I have hard coded it to always call flush_to_ldisc instead of the schedule_delayed_work, but this is not a fix, this is a workaround. Does anyone have any suggestions as to why this scheduling call wouldn't behave correctly?
|