slirp: Remove unneeded if_queued
authorJan Kiszka <jan.kiszka@siemens.com>
Mon, 5 Mar 2012 23:02:23 +0000 (00:02 +0100)
committerJan Kiszka <jan.kiszka@siemens.com>
Tue, 13 Mar 2012 13:05:49 +0000 (14:05 +0100)
There is now a trivial check on entry of if_start for pending packets,
so we can drop the additional tracking via if_queued.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
slirp/if.c
slirp/slirp.c
slirp/slirp.h

index f6e848a31a8e2145f752270dd3d428d0e1f96fc1..096cf6fd07b645b35afa002019634cdc363898ef 100644 (file)
@@ -110,8 +110,6 @@ if_output(struct socket *so, struct mbuf *ifm)
        insque(ifm, ifq);
 
 diddit:
-       slirp->if_queued++;
-
        if (so) {
                /* Update *_queued */
                so->so_queued++;
@@ -157,7 +155,6 @@ diddit:
 void if_start(Slirp *slirp)
 {
     uint64_t now = qemu_get_clock_ns(rt_clock);
-    int requeued = 0;
     bool from_batchq, next_from_batchq;
     struct mbuf *ifm, *ifm_next, *ifqt;
 
@@ -182,8 +179,7 @@ void if_start(Slirp *slirp)
     while (ifm_next) {
         /* check if we can really output */
         if (!slirp_can_output(slirp->opaque)) {
-            slirp->if_start_busy = false;
-            return;
+            break;
         }
 
         ifm = ifm_next;
@@ -200,12 +196,9 @@ void if_start(Slirp *slirp)
             ifm_next = NULL;
         }
 
-        slirp->if_queued--;
-
         /* Try to send packet unless it already expired */
         if (ifm->expiration_date >= now && !if_encap(slirp, ifm)) {
             /* Packet is delayed due to pending ARP resolution */
-            requeued++;
             continue;
         }
 
@@ -245,7 +238,5 @@ void if_start(Slirp *slirp)
         m_free(ifm);
     }
 
-    slirp->if_queued = requeued;
-
     slirp->if_start_busy = false;
 }
index 19d69eb623c29f7042ef55c84311d8bcac7cd74a..bcffc3414fb2a8fb32ee308e7298b055a33cd080 100644 (file)
@@ -581,12 +581,7 @@ void slirp_select_poll(fd_set *readfds, fd_set *writefds, fd_set *xfds,
                 }
        }
 
-       /*
-        * See if we can start outputting
-        */
-       if (slirp->if_queued) {
-           if_start(slirp);
-       }
+        if_start(slirp);
     }
 
        /* clear global file descriptor sets.
index 416d44a996a066c9c032bf456e6d801c7edd5c99..cbe8a3cd4dccca6fa0c57cc84edc59bd67644fe4 100644 (file)
@@ -235,7 +235,6 @@ struct Slirp {
     int mbuf_alloced;
 
     /* if states */
-    int if_queued;          /* number of packets queued so far */
     struct mbuf if_fastq;   /* fast queue (for interactive data) */
     struct mbuf if_batchq;  /* queue for non-interactive data */
     struct mbuf *next_m;    /* pointer to next mbuf to output */