From: Jianfeng Tan Date: Tue, 17 Jan 2017 07:10:27 +0000 (+0000) Subject: net/virtio: unbind interrupt/eventfd when stopping X-Git-Tag: spdx-start~5150 X-Git-Url: http://git.droids-corp.org/?p=dpdk.git;a=commitdiff_plain;h=349a447b47a3e1bb83760560938ed707a109e9a8 net/virtio: unbind interrupt/eventfd when stopping When virtio devices get stopped, tell the kernel to unbind the mapping between interrupts and eventfds. Note: it behaves differently from other NICs which close eventfds, free struct. In virtio, we do those things when close device in following patch. Signed-off-by: Jianfeng Tan Tested-by: Lei Yao Acked-by: Yuanhan Liu --- diff --git a/drivers/net/virtio/virtio_ethdev.c b/drivers/net/virtio/virtio_ethdev.c index 80253820ff..a4cc66f7b3 100644 --- a/drivers/net/virtio/virtio_ethdev.c +++ b/drivers/net/virtio/virtio_ethdev.c @@ -1652,6 +1652,15 @@ virtio_dev_start(struct rte_eth_dev *dev) PMD_DRV_LOG(ERR, "link status not supported by host"); return -ENOTSUP; } + } + + /* Enable uio/vfio intr/eventfd mapping: althrough we already did that + * in device configure, but it could be unmapped when device is + * stopped. + */ + if (dev->data->dev_conf.intr_conf.lsc || + dev->data->dev_conf.intr_conf.rxq) { + rte_intr_disable(dev->intr_handle); if (rte_intr_enable(dev->intr_handle) < 0) { PMD_DRV_LOG(ERR, "interrupt enable failed"); @@ -1746,10 +1755,11 @@ static void virtio_dev_stop(struct rte_eth_dev *dev) { struct rte_eth_link link; + struct rte_intr_conf *intr_conf = &dev->data->dev_conf.intr_conf; PMD_INIT_LOG(DEBUG, "stop"); - if (dev->data->dev_conf.intr_conf.lsc) + if (intr_conf->lsc || intr_conf->rxq) rte_intr_disable(dev->intr_handle); memset(&link, 0, sizeof(link));