summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Kiszka <jan.kiszka@siemens.com>2013-08-02 21:48:18 +0200
committerStefan Hajnoczi <stefanha@redhat.com>2013-08-05 14:11:17 +0200
commitee76c1f821e75550644e084dea85743bbc934f91 (patch)
treee13b3b2b7fcbeff1d37aad401d351d433e09ed6b
parentb9ac5d923b820a0f0152a2df56067e55ce34f487 (diff)
downloadqemu-ee76c1f821e75550644e084dea85743bbc934f91.tar.gz
pcnet: Flush queued packets on end of STOP state
Analogously to other NICs, we have to inform the network layer when the can_receive handler will no longer report 0. Without this, we may get stuck waiting on queued incoming packets. Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
-rw-r--r--hw/net/pcnet.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/hw/net/pcnet.c b/hw/net/pcnet.c
index b606d2be3b..63aa73a241 100644
--- a/hw/net/pcnet.c
+++ b/hw/net/pcnet.c
@@ -861,6 +861,8 @@ static void pcnet_init(PCNetState *s)
s->csr[0] |= 0x0101;
s->csr[0] &= ~0x0004; /* clear STOP bit */
+
+ qemu_flush_queued_packets(qemu_get_queue(s->nic));
}
static void pcnet_start(PCNetState *s)
@@ -878,6 +880,8 @@ static void pcnet_start(PCNetState *s)
s->csr[0] &= ~0x0004; /* clear STOP bit */
s->csr[0] |= 0x0002;
pcnet_poll_timer(s);
+
+ qemu_flush_queued_packets(qemu_get_queue(s->nic));
}
static void pcnet_stop(PCNetState *s)