提交 691a4f3a 编写于 作者: Z Zhi Yong Wu 提交者: Stefan Hajnoczi

net: determine if packets can be sent before net queue deliver packets

Reviewed-by: NPaolo Bonzini <pbonzini@redhat.com>
Signed-off-by: NZhi Yong Wu <wuzhy@linux.vnet.ibm.com>
Signed-off-by: NStefan Hajnoczi <stefanha@linux.vnet.ibm.com>
Reviewed-by: NLaszlo Ersek <lersek@redhat.com>
上级 86a77c38
...@@ -176,8 +176,8 @@ ssize_t qemu_net_queue_send(NetQueue *queue, ...@@ -176,8 +176,8 @@ ssize_t qemu_net_queue_send(NetQueue *queue,
{ {
ssize_t ret; ssize_t ret;
if (queue->delivering) { if (queue->delivering || !qemu_can_send_packet(sender)) {
return qemu_net_queue_append(queue, sender, flags, data, size, NULL); return qemu_net_queue_append(queue, sender, flags, data, size, sent_cb);
} }
ret = qemu_net_queue_deliver(queue, sender, flags, data, size); ret = qemu_net_queue_deliver(queue, sender, flags, data, size);
...@@ -200,8 +200,9 @@ ssize_t qemu_net_queue_send_iov(NetQueue *queue, ...@@ -200,8 +200,9 @@ ssize_t qemu_net_queue_send_iov(NetQueue *queue,
{ {
ssize_t ret; ssize_t ret;
if (queue->delivering) { if (queue->delivering || !qemu_can_send_packet(sender)) {
return qemu_net_queue_append_iov(queue, sender, flags, iov, iovcnt, NULL); return qemu_net_queue_append_iov(queue, sender, flags,
iov, iovcnt, sent_cb);
} }
ret = qemu_net_queue_deliver_iov(queue, sender, flags, iov, iovcnt); ret = qemu_net_queue_deliver_iov(queue, sender, flags, iov, iovcnt);
......
...@@ -97,13 +97,6 @@ static void slirp_smb_cleanup(SlirpState *s); ...@@ -97,13 +97,6 @@ static void slirp_smb_cleanup(SlirpState *s);
static inline void slirp_smb_cleanup(SlirpState *s) { } static inline void slirp_smb_cleanup(SlirpState *s) { }
#endif #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) void slirp_output(void *opaque, const uint8_t *pkt, int pkt_len)
{ {
SlirpState *s = opaque; SlirpState *s = opaque;
......
...@@ -177,11 +177,6 @@ void if_start(Slirp *slirp) ...@@ -177,11 +177,6 @@ void if_start(Slirp *slirp)
} }
while (ifm_next) { while (ifm_next) {
/* check if we can really output */
if (!slirp_can_output(slirp->opaque)) {
break;
}
ifm = ifm_next; ifm = ifm_next;
from_batchq = next_from_batchq; from_batchq = next_from_batchq;
......
...@@ -25,7 +25,6 @@ void slirp_select_poll(fd_set *readfds, fd_set *writefds, fd_set *xfds, ...@@ -25,7 +25,6 @@ void slirp_select_poll(fd_set *readfds, fd_set *writefds, fd_set *xfds,
void slirp_input(Slirp *slirp, const uint8_t *pkt, int pkt_len); void slirp_input(Slirp *slirp, const uint8_t *pkt, int pkt_len);
/* you must provide the following functions: */ /* you must provide the following functions: */
int slirp_can_output(void *opaque);
void slirp_output(void *opaque, const uint8_t *pkt, int pkt_len); void slirp_output(void *opaque, const uint8_t *pkt, int pkt_len);
int slirp_add_hostfwd(Slirp *slirp, int is_udp, int slirp_add_hostfwd(Slirp *slirp, int is_udp,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册