On Wed, May 22, 2013 at 02:50:18PM +0200, Stefan Hajnoczi wrote: > Net queues support efficient "receive disable". For example, tap's file > descriptor will not be polled while its peer has receive disabled. This > saves CPU cycles for needlessly copying and then dropping packets which > the peer cannot receive. > > rtl8139 is missing the qemu_flush_queued_packets() call that wakes the > queue up when receive becomes possible again. > > As a result, the Windows 7 guest driver reaches a state where the > rtl8139 cannot receive packets. The driver has actually refilled the > receive buffer but we never resume reception. > > The bug can be reproduced by running a large FTP 'get' inside a Windows > 7 guest: > > $ qemu -netdev tap,id=tap0,... > -device rtl8139,netdev=tap0 > > The Linux guest driver does not trigger the bug, probably due to a > different buffer management strategy. > > Reported-by: Oliver Francke <oliver.fran...@filoo.de> > Signed-off-by: Stefan Hajnoczi <stefa...@redhat.com> > --- > hw/net/rtl8139.c | 3 +++ > 1 file changed, 3 insertions(+)
Applied to my net tree: https://github.com/stefanha/qemu/commits/net Stefan