[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v2 1/4] slirp: Keep next_m always valid
From: |
Jan Kiszka |
Subject: |
[Qemu-devel] [PATCH v2 1/4] slirp: Keep next_m always valid |
Date: |
Fri, 2 Mar 2012 19:57:50 +0100 |
Make sure that next_m always points to a packet if batchq is non-empty.
This will simplify walking the queues in if_start.
CC: Fabien Chouteau <address@hidden>
CC: Zhi Yong Wu <address@hidden>
CC: Stefan Weil <address@hidden>
Signed-off-by: Jan Kiszka <address@hidden>
---
slirp/if.c | 22 ++++++++++++++--------
1 files changed, 14 insertions(+), 8 deletions(-)
diff --git a/slirp/if.c b/slirp/if.c
index 33f08e1..14fdef1 100644
--- a/slirp/if.c
+++ b/slirp/if.c
@@ -96,8 +96,13 @@ if_output(struct socket *so, struct mbuf *ifm)
ifs_insque(ifm, ifq->ifs_prev);
goto diddit;
}
- } else
+ } else {
ifq = slirp->if_batchq.ifq_prev;
+ /* Set next_m if the queue was empty so far */
+ if (slirp->next_m == &slirp->if_batchq) {
+ slirp->next_m = ifm;
+ }
+ }
/* Create a new doubly linked list for this session */
ifm->ifq_so = so;
@@ -170,13 +175,8 @@ void if_start(Slirp *slirp)
if (slirp->if_fastq.ifq_next != &slirp->if_fastq) {
ifm = slirp->if_fastq.ifq_next;
} else {
- /* Nothing on fastq, see if next_m is valid */
- if (slirp->next_m != &slirp->if_batchq) {
- ifm = slirp->next_m;
- } else {
- ifm = slirp->if_batchq.ifq_next;
- }
-
+ /* Nothing on fastq, pick up from batchq via next_m */
+ ifm = slirp->next_m;
from_batchq = true;
}
@@ -202,6 +202,12 @@ void if_start(Slirp *slirp)
if (ifm->ifs_next != ifm) {
insque(ifm->ifs_next, ifqt);
ifs_remque(ifm);
+ /* Set next_m if the session packet is now the only one on
+ * batchq */
+ if (ifqt == &slirp->if_batchq &&
+ slirp->next_m == &slirp->if_batchq) {
+ slirp->next_m = ifm->ifs_next;
+ }
}
/* Update so_queued */
--
1.7.3.4
- [Qemu-devel] [PATCH v2 0/4] slirp: Fix for requeuing crash, cleanups, Jan Kiszka, 2012/03/02
- [Qemu-devel] [PATCH v2 3/4] slirp: Remove unneeded if_queued, Jan Kiszka, 2012/03/02
- [Qemu-devel] [PATCH v2 4/4] slirp: Cleanup resources on instance removal, Jan Kiszka, 2012/03/02
- [Qemu-devel] [PATCH v2 1/4] slirp: Keep next_m always valid,
Jan Kiszka <=
- [Qemu-devel] [PATCH v2 2/4] slirp: Fix queue walking in if_start, Jan Kiszka, 2012/03/02
- Re: [Qemu-devel] [PATCH v2 0/4] slirp: Fix for requeuing crash, cleanups, Stefan Weil, 2012/03/02