* [PATCH] virtio_net: Fix stalled inbound traffic on early packets
@ 2007-12-06 15:59 Christian Borntraeger
0 siblings, 0 replies; only message in thread
From: Christian Borntraeger @ 2007-12-06 15:59 UTC (permalink / raw)
To: Rusty Russell; +Cc: netdev, virtualization, Anthony Liguori
The current virtio_net driver has a startup race, which prevents any
incoming traffic:
If try_fill_recv submits buffers to the host system data might be
filled in and an interrupt is sent, before napi_enable finishes.
In that case the interrupt will kick skb_recv_done which will then
call netif_rx_schedule. netif_rx_schedule checks, if NAPI_STATE_SCHED
is set - which is not as we did not run napi_enable. No poll routine
is scheduled. Furthermore, skb_recv_done returns false, we disables
interrupts for this device.
One solution is the enable napi before inbound buffer are available.
Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
---
drivers/net/virtio_net.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
Index: kvm/drivers/net/virtio_net.c
===================================================================
--- kvm.orig/drivers/net/virtio_net.c
+++ kvm/drivers/net/virtio_net.c
@@ -285,13 +285,15 @@ static int virtnet_open(struct net_devic
{
struct virtnet_info *vi = netdev_priv(dev);
+ napi_enable(&vi->napi);
try_fill_recv(vi);
/* If we didn't even get one input buffer, we're useless. */
- if (vi->num == 0)
+ if (vi->num == 0) {
+ napi_disable(&vi->napi);
return -ENOMEM;
+ }
- napi_enable(&vi->napi);
return 0;
}
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2007-12-06 15:59 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-12-06 15:59 [PATCH] virtio_net: Fix stalled inbound traffic on early packets Christian Borntraeger
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox