mirror of
https://github.com/torvalds/linux.git
synced 2024-11-23 20:51:44 +00:00
tty: hvc: hvc_write() fix break condition
Commit 550ddadcc7
("tty: hvc: hvc_write() may sleep") broke the
termination condition in case the driver stops accepting characters.
This can result in unnecessary polling of the busy driver.
Restore it by testing the hvc_push return code.
Tested-by: Matteo Croce <mcroce@redhat.com>
Tested-by: Jason Gunthorpe <jgg@mellanox.com>
Tested-by: Leon Romanovsky <leonro@mellanox.com>
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
68b2fc714f
commit
7f2bf7840b
@ -522,6 +522,8 @@ static int hvc_write(struct tty_struct *tty, const unsigned char *buf, int count
|
||||
return -EIO;
|
||||
|
||||
while (count > 0) {
|
||||
int ret = 0;
|
||||
|
||||
spin_lock_irqsave(&hp->lock, flags);
|
||||
|
||||
rsize = hp->outbuf_size - hp->n_outbuf;
|
||||
@ -537,10 +539,13 @@ static int hvc_write(struct tty_struct *tty, const unsigned char *buf, int count
|
||||
}
|
||||
|
||||
if (hp->n_outbuf > 0)
|
||||
hvc_push(hp);
|
||||
ret = hvc_push(hp);
|
||||
|
||||
spin_unlock_irqrestore(&hp->lock, flags);
|
||||
|
||||
if (!ret)
|
||||
break;
|
||||
|
||||
if (count) {
|
||||
if (hp->n_outbuf > 0)
|
||||
hvc_flush(hp);
|
||||
|
Loading…
Reference in New Issue
Block a user