virtio: flush buffers on open
Fix bug found by Christian Borntraeger: if the other side fills all the registered network buffers before we enable NAPI, we will never get an interrupt. The simplest fix is to process the input queue once on open. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
Родитель
e70f2f1bb8
Коммит
a48bd8f670
|
@ -283,6 +283,13 @@ static int virtnet_open(struct net_device *dev)
|
|||
struct virtnet_info *vi = netdev_priv(dev);
|
||||
|
||||
napi_enable(&vi->napi);
|
||||
|
||||
/* If all buffers were filled by other side before we napi_enabled, we
|
||||
* won't get another interrupt, so process any outstanding packets
|
||||
* now. virtnet_poll wants re-enable the queue, so we disable here. */
|
||||
vi->rvq->vq_ops->disable_cb(vi->rvq);
|
||||
netif_rx_schedule(vi->dev, &vi->napi);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче