On (Thu) 29 Dec 2011 [15:32:14], Christian Borntraeger wrote: > > port->throttled never becomes true for qemu. > > Huh? What did I miss below? > > if (ret == -EAGAIN || (ret >= 0 && ret < buf_size)) { > virtio_serial_throttle_port(port, true);
'ret' here is the return value from info->have_data(), which is hw/virtio-console.c:flush_buf(). That function returns the value that qemu_chr_fe_write() returns, which is qemu-char.c:send_all() for pty, tcp, unix sockets. send_all() just keeps spinning here if it can't write, doesn't signal EAGAIN at all (or even a partial write). Can you print out the return values of have_data to check what's going on? Maybe you're hitting a case I never hit earlier and throttling indeed does get enabled? Amit