On Tue, May 19, 2015 at 10:51:00AM +0000, Fam Zheng wrote: > This callback is called by main loop before polling s->fd, if it returns > false, the fd will not be polled in this iteration. > > This is redundant with checks inside read callback. After this patch, > the data will be copied from s->fd to s->msgvec when it arrives. If the > device can't receive, it will be queued to incoming_queue, and when the > device status changes, this queue will be flushed. This doesn't work because s->msgvec can fill up when qemu_can_send_packet() returns false. At that point we burn 100% CPU because the file descriptor is still being monitored. It really is necessary to stop monitoring the file descriptor until we can send again. Or the code needs to be changed to drop packets in QEMU (currently it's the host kernel where packets may be dropped). Stefan