diff options
author | Zhi Yong Wu <wuzhy@linux.vnet.ibm.com> | 2012-07-24 16:35:18 +0100 |
---|---|---|
committer | Stefan Hajnoczi <stefanha@linux.vnet.ibm.com> | 2012-08-01 13:32:11 +0100 |
commit | 691a4f3a953982d0af1896f5ab2832b7f19a980d (patch) | |
tree | 1f44e5b621e888e26faf05e768f018b611ed1dd3 /net | |
parent | 86a77c3858610a36f1409c657b1768727693d25b (diff) |
net: determine if packets can be sent before net queue deliver packets
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
Reviewed-by: Laszlo Ersek <lersek@redhat.com>
Diffstat (limited to 'net')
-rw-r--r-- | net/queue.c | 9 | ||||
-rw-r--r-- | net/slirp.c | 7 |
2 files changed, 5 insertions, 11 deletions
diff --git a/net/queue.c b/net/queue.c index 0afd7830a4..e8030aafe4 100644 --- a/net/queue.c +++ b/net/queue.c @@ -176,8 +176,8 @@ ssize_t qemu_net_queue_send(NetQueue *queue, { ssize_t ret; - if (queue->delivering) { - return qemu_net_queue_append(queue, sender, flags, data, size, NULL); + if (queue->delivering || !qemu_can_send_packet(sender)) { + return qemu_net_queue_append(queue, sender, flags, data, size, sent_cb); } ret = qemu_net_queue_deliver(queue, sender, flags, data, size); @@ -200,8 +200,9 @@ ssize_t qemu_net_queue_send_iov(NetQueue *queue, { ssize_t ret; - if (queue->delivering) { - return qemu_net_queue_append_iov(queue, sender, flags, iov, iovcnt, NULL); + if (queue->delivering || !qemu_can_send_packet(sender)) { + return qemu_net_queue_append_iov(queue, sender, flags, + iov, iovcnt, sent_cb); } ret = qemu_net_queue_deliver_iov(queue, sender, flags, iov, iovcnt); diff --git a/net/slirp.c b/net/slirp.c index 9d5ca79ff7..08adb97da5 100644 --- a/net/slirp.c +++ b/net/slirp.c @@ -97,13 +97,6 @@ static void slirp_smb_cleanup(SlirpState *s); static inline void slirp_smb_cleanup(SlirpState *s) { } #endif -int slirp_can_output(void *opaque) -{ - SlirpState *s = opaque; - - return qemu_can_send_packet(&s->nc); -} - void slirp_output(void *opaque, const uint8_t *pkt, int pkt_len) { SlirpState *s = opaque; |