Re: [PATCH] tty: cleanup duplicate functions in tty_buffer
From: Alan Cox <hidden>
Date: 2012-09-24 09:25:47
Also in:
linux-serial
From: Alan Cox <hidden>
Date: 2012-09-24 09:25:47
Also in:
linux-serial
I agree that when the tty->low_latency flag is set on these machines, the drivers that were modified by my patch will behave differently: they will call the flush_to_ldisc() function directly instead of using the work queue. So that indeed introduces different functionality.
flush_to_ldisc calls into the tty core code which sleeps. The rule is that you may not call flush_to_ldisc except from a workqueue context. If you break that rule then various bad things will occur (eg rx -> flush_to_ldisc -> n_tty -> flow control -> tx -> deadlock) in a lot of drivers.
But what I don't understand is how this would cause the machine to crash? Even when the flush_to_ldisc() function is called from hard IRQ context this would cause no problems: the flush_to_ldisc() function uses IRQ save spin locks instead of mutexes to protect it's critical section. Right? Furthermore the majority of TTY drivers currently already use the tty_flip_buffer_push() function.
Several of them are ones that shouldn't. Alan