Разобрался...
код в n_tty делает блокирующее чтение под семафором, поэтому на read(...) нам всегда не удается взять семафор и мы получаем EAGAIN, в тоже время как читающий процесс, дождавшись своего кванта оттуда распрекрасно всё читает.
Буду думать дальше... не хочется писать модуль прозрачной дисциплины ради такой фигни ...