[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-block] [PATCH v3 03/13] l2tpv3: Drop l2tpv3_can_send
From: |
Fam Zheng |
Subject: |
Re: [Qemu-block] [PATCH v3 03/13] l2tpv3: Drop l2tpv3_can_send |
Date: |
Tue, 26 May 2015 14:52:48 +0800 |
User-agent: |
Mutt/1.5.23 (2014-03-12) |
On Tue, 05/19 15:48, Stefan Hajnoczi wrote:
> 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.
If qemu_can_send_packet returns false, we do stop monitoring the fd. In
net_l2tpv3_process_queue:
size = qemu_send_packet_async(
&s->nc,
vec->iov_base,
data_size,
l2tpv3_send_completed
);
if (size == 0) {
l2tpv3_read_poll(s, false);
}
The packet is queued and size is 0, so the read poll will be disabled until
it's flushed.
What am I missing?
Fam
[Qemu-block] [PATCH v3 01/13] stubs: Add qemu_set_fd_handler, Fam Zheng, 2015/05/18
[Qemu-block] [PATCH v3 05/13] net/socket: Drop net_socket_can_send, Fam Zheng, 2015/05/18
[Qemu-block] [PATCH v3 09/13] alsaaudio: Remove unused error handling of qemu_set_fd_handler, Fam Zheng, 2015/05/18
[Qemu-block] [PATCH v3 10/13] oss: Remove unused error handling of qemu_set_fd_handler, Fam Zheng, 2015/05/18