Skip to content

Commit

Permalink
netmap: Drop netmap_can_send
Browse files Browse the repository at this point in the history
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->iov 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.

Also remove the qemu_can_send_packet() check in netmap_send. If it's
true, we are good; if it's false, the qemu_sendv_packet_async would
return 0 and read poll will be disabled until netmap_send_completed is
called.

Signed-off-by: Fam Zheng <famz@redhat.com>
Message-id: 1433400324-7358-5-git-send-email-famz@redhat.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
  • Loading branch information
Fam Zheng authored and stefanhaRH committed Jun 12, 2015
1 parent 95b1416 commit e8dd1d9
Showing 1 changed file with 2 additions and 12 deletions.
14 changes: 2 additions & 12 deletions net/netmap.c
Expand Up @@ -132,23 +132,13 @@ static int netmap_open(NetmapPriv *me)
return -1;
}

/* Tell the event-loop if the netmap backend can send packets
to the frontend. */
static int netmap_can_send(void *opaque)
{
NetmapState *s = opaque;

return qemu_can_send_packet(&s->nc);
}

static void netmap_send(void *opaque);
static void netmap_writable(void *opaque);

/* Set the event-loop handlers for the netmap backend. */
static void netmap_update_fd_handler(NetmapState *s)
{
qemu_set_fd_handler2(s->me.fd,
s->read_poll ? netmap_can_send : NULL,
qemu_set_fd_handler2(s->me.fd, NULL,
s->read_poll ? netmap_send : NULL,
s->write_poll ? netmap_writable : NULL,
s);
Expand Down Expand Up @@ -317,7 +307,7 @@ static void netmap_send(void *opaque)

/* Keep sending while there are available packets into the netmap
RX ring and the forwarding path towards the peer is open. */
while (!nm_ring_empty(ring) && qemu_can_send_packet(&s->nc)) {
while (!nm_ring_empty(ring)) {
uint32_t i;
uint32_t idx;
bool morefrag;
Expand Down

0 comments on commit e8dd1d9

Please sign in to comment.