[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 04/13] net: only read from tapfd when we can send
From: |
Mark McLoughlin |
Subject: |
[Qemu-devel] [PATCH 04/13] net: only read from tapfd when we can send |
Date: |
Tue, 19 May 2009 10:55:26 +0100 |
Reduce the number of packets dropped under heavy network
traffic by only reading a packet from the tapfd when a
client can actually handle it.
Signed-off-by: Mark McLoughlin <address@hidden>
---
net.c | 9 ++++++++-
1 files changed, 8 insertions(+), 1 deletions(-)
diff --git a/net.c b/net.c
index a3f4674..b506ccb 100644
--- a/net.c
+++ b/net.c
@@ -811,6 +811,13 @@ static void tap_receive(void *opaque, const uint8_t *buf,
int size)
}
}
+static int tap_can_send(void *opaque)
+{
+ TAPState *s = opaque;
+
+ return qemu_can_send_packet(s->vc);
+}
+
#ifdef __sun__
static ssize_t tap_read_packet(int tapfd, uint8_t *buf, int maxlen)
{
@@ -866,7 +873,7 @@ static TAPState *net_tap_fd_init(VLANState *vlan,
s->vc = qemu_new_vlan_client(vlan, model, name, tap_receive,
NULL, tap_cleanup, s);
s->vc->fd_readv = tap_receive_iov;
- qemu_set_fd_handler(s->fd, tap_send, NULL, s);
+ qemu_set_fd_handler2(s->fd, tap_can_send, tap_send, NULL, s);
snprintf(s->vc->info_str, sizeof(s->vc->info_str), "fd=%d", fd);
return s;
}
--
1.6.0.6
- [Qemu-devel] [PATCH 0/13] Add generic packet buffering API, Mark McLoughlin, 2009/05/19
- [Qemu-devel] [PATCH 01/13] net: factor tap_read_packet() out of tap_send(), Mark McLoughlin, 2009/05/19
- [Qemu-devel] [PATCH 02/13] net: move the tap buffer into TAPState, Mark McLoughlin, 2009/05/19
- [Qemu-devel] [PATCH 03/13] net: vlan clients with no fd_can_read() can always receive, Mark McLoughlin, 2009/05/19
- [Qemu-devel] [PATCH 04/13] net: only read from tapfd when we can send,
Mark McLoughlin <=
- [Qemu-devel] [PATCH 05/13] net: add fd_readv() handler to qemu_new_vlan_client() args, Mark McLoughlin, 2009/05/19
- [Qemu-devel] [PATCH 06/13] net: re-name vc->fd_read() to vc->receive(), Mark McLoughlin, 2009/05/19
- [Qemu-devel] [PATCH 07/13] net: pass VLANClientState* as first arg to receive handlers, Mark McLoughlin, 2009/05/19
- [Qemu-devel] [PATCH 08/13] net: add return value to packet receive handler, Mark McLoughlin, 2009/05/19
- [Qemu-devel] [PATCH 09/13] net: return status from qemu_deliver_packet(), Mark McLoughlin, 2009/05/19
- [Qemu-devel] [PATCH 10/13] net: split out packet queueing and flushing into separate functions, Mark McLoughlin, 2009/05/22
- [Qemu-devel] [PATCH 11/13] net: add qemu_send_packet_async(), Mark McLoughlin, 2009/05/22
- [Qemu-devel] [PATCH 12/13] net: make use of async packet sending API in tap client, Mark McLoughlin, 2009/05/22
- [Qemu-devel] [PATCH 13/13] virtio-net: implement rx packet queueing, Mark McLoughlin, 2009/05/22
Re: [Qemu-devel] [PATCH 0/13] Add generic packet buffering API, Avi Kivity, 2009/05/19