summaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorHendrik Brueckner <brueckner@linux.vnet.ibm.com>2008-10-13 23:12:50 +0000
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>2008-10-22 10:59:55 +1100
commit3feebbb5492e9e463467cefb633e23a3dfcec132 (patch)
treeaab5c73bbcd799781b8b27f7173c3e726ea403be /arch
parent56ce9e2b2463b3b257098aa966586701d9967f1e (diff)
downloadlinux-3feebbb5492e9e463467cefb633e23a3dfcec132.tar.gz
linux-3feebbb5492e9e463467cefb633e23a3dfcec132.tar.bz2
linux-3feebbb5492e9e463467cefb633e23a3dfcec132.zip
hvc_console: Fix loop if put_char() returns 0
If put_char() routine of a hvc console backend returns 0, then the hvc console starts looping in the following scenarios: 1. hvc_console_print() If put_char() returns 0 then the while loop may loop forever. I have added the missing check for 0 to throw away console messages. 2. khvcd may loop: The thread calls hvc_poll() --> hvc_push()... if there are still buffered data then the HVC_POLL_WRITE bit is set and causes the khvcd thread to loop (if yield() returns immediately). However, instead of looping, the khvcd thread could sleep for MIN_TIMEOUT (doing the same as for get_chars()). The MIN_TIMEOUT is set if hvc_push() was not able to write data to the backend. If data has been written, the timeout is set to 0 to immediately re-schedule hvc_poll(). Reviewed-by: Christian Borntraeger <borntraeger@de.ibm.com> Tested-by: Christian Borntraeger <borntraeger@de.ibm.com> (virtio_console) Signed-off-by: Hendrik Brueckner <brueckner@linux.vnet.ibm.com> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Diffstat (limited to 'arch')
0 files changed, 0 insertions, 0 deletions