From 349a447b47a3e1bb83760560938ed707a109e9a8 Mon Sep 17 00:00:00 2001 From: Jianfeng Tan Date: Tue, 17 Jan 2017 07:10:27 +0000 Subject: [PATCH] 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 --- drivers/net/virtio/virtio_ethdev.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) 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)); -- 2.20.1