2012/1/30 Fernando Luis Vázquez Cao <ferna...@oss.ntt.co.jp>:
> Some drivers (Linux' 8139too among them) rely on the NIC injecting an 
> interrupt
> in the event of a receive buffer overflow and, accordingly, set the RxOverflow
> bit in the interrupt mask. Unfortunately rtl8139's can_receive method ignores
> the RxOverflow flag, which may lead to a situation where rtl8139 stops 
> receiving
> packets (can_receive returns 0) when the receive buffer becomes full.
>
> If the driver eventually read from the receive buffer or reset the card the
> emulator could recover from this situation. However some implementations only
> do this upon receiving an interrupt with either RxOK or RxOverflow set in the
> ISR; interrupt that will never come because QEMU's flow control mechanisms 
> would
> prevent rtl8139 from receiving any packet.
>
> Letting packets go through when the overflow interrupt is enabled makes the
> QEMU emulator compliant to the spec and solves the problem.
>
> This patch should fix a relatively common (in our experience) network stall
> observed when running enterprise distros with rtl8139 as the NIC; in some 
> cases
> the 8139too device driver gets loaded and when under heavy load the network
> eventually stops working.

It would be great to see specific example to verify the issue.
Otherwise the change looks great.

-- 
Kind regards,
Igor V. Kovalenko

Reply via email to