mirror of https://github.com/xemu-project/xemu.git
s390/sclpconsole: handle char layer busy conditions
Handle busy conditions (errno=EAGAIN) in char layer by using the new char layer in the sclp console. Signed-off-by: Heinz Graalfs <graalfs@linux.vnet.ibm.com> Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
This commit is contained in:
parent
dbe49aea76
commit
2e14211476
|
@ -184,8 +184,6 @@ static int read_event_data(SCLPEvent *event, EventBufferHeader *evt_buf_hdr,
|
||||||
static ssize_t write_console_data(SCLPEvent *event, const uint8_t *buf,
|
static ssize_t write_console_data(SCLPEvent *event, const uint8_t *buf,
|
||||||
size_t len)
|
size_t len)
|
||||||
{
|
{
|
||||||
ssize_t ret = 0;
|
|
||||||
const uint8_t *iov_offset;
|
|
||||||
SCLPConsole *scon = DO_UPCAST(SCLPConsole, event, event);
|
SCLPConsole *scon = DO_UPCAST(SCLPConsole, event, event);
|
||||||
|
|
||||||
if (!scon->chr) {
|
if (!scon->chr) {
|
||||||
|
@ -193,21 +191,7 @@ static ssize_t write_console_data(SCLPEvent *event, const uint8_t *buf,
|
||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
iov_offset = buf;
|
return qemu_chr_fe_write_all(scon->chr, buf, len);
|
||||||
while (len > 0) {
|
|
||||||
ret = qemu_chr_fe_write(scon->chr, buf, len);
|
|
||||||
if (ret == 0) {
|
|
||||||
/* a pty doesn't seem to be connected - no error */
|
|
||||||
len = 0;
|
|
||||||
} else if (ret == -EAGAIN || (ret > 0 && ret < len)) {
|
|
||||||
len -= ret;
|
|
||||||
iov_offset += ret;
|
|
||||||
} else {
|
|
||||||
len = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int write_event_data(SCLPEvent *event, EventBufferHeader *evt_buf_hdr)
|
static int write_event_data(SCLPEvent *event, EventBufferHeader *evt_buf_hdr)
|
||||||
|
|
Loading…
Reference in New Issue