mirror of https://gitee.com/openkylin/qemu.git
e1000: flush queue whenever can_receive can go from false to true
When the guests replenish the receive ring buffer, the network device should flush its queue of pending packets. This is done with qemu_flush_queued_packets. e1000's can_receive can go from false to true when RCTL or RDT are modified. Reported-by: Luigi Rizzo <rizzo@iet.unipi.it> Cc: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com> Cc: Jan Kiszka <jan.kiszka@siemens.de> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Reviewed-by: Amos Kong <akong@redhat.com> Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
This commit is contained in:
parent
987a9b4800
commit
e8b4c680b4
|
@ -295,6 +295,7 @@ set_rx_control(E1000State *s, int index, uint32_t val)
|
|||
s->rxbuf_min_shift = ((val / E1000_RCTL_RDMTS_QUAT) & 3) + 1;
|
||||
DBGOUT(RX, "RCTL: %d, mac_reg[RCTL] = 0x%x\n", s->mac_reg[RDT],
|
||||
s->mac_reg[RCTL]);
|
||||
qemu_flush_queued_packets(&s->nic->nc);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -926,6 +927,9 @@ set_rdt(E1000State *s, int index, uint32_t val)
|
|||
{
|
||||
s->check_rxov = 0;
|
||||
s->mac_reg[index] = val & 0xffff;
|
||||
if (e1000_has_rxbufs(s, 1)) {
|
||||
qemu_flush_queued_packets(&s->nic->nc);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
Loading…
Reference in New Issue