| 713 | } |
| 714 | |
| 715 | static void |
| 716 | eth_vhost_unconfigure_intr(struct rte_eth_dev *eth_dev) |
| 717 | { |
| 718 | struct vhost_queue *vq; |
| 719 | int i; |
| 720 | |
| 721 | VHOST_LOG(DEBUG, "Unconfigure intr vec\n"); |
| 722 | for (i = 0; i < eth_dev->data->nb_rx_queues; i++) { |
| 723 | vq = eth_dev->data->rx_queues[i]; |
| 724 | if (vq == NULL || vq->vid < 0) |
| 725 | continue; |
| 726 | |
| 727 | rte_spinlock_lock(&vq->intr_lock); |
| 728 | |
| 729 | /* Remove previous kickfd from proxy epoll */ |
| 730 | if (vq->kickfd >= 0) { |
| 731 | if (epoll_ctl(vq->ev.data.fd, EPOLL_CTL_DEL, vq->kickfd, &vq->ev) < 0) { |
| 732 | VHOST_LOG(DEBUG, "Failed to unregister %d from rxq-%d epoll: %s\n", |
| 733 | vq->kickfd, i, strerror(errno)); |
| 734 | } else { |
| 735 | VHOST_LOG(DEBUG, "Unregistered %d from rxq-%d epoll\n", |
| 736 | vq->kickfd, i); |
| 737 | } |
| 738 | vq->kickfd = -1; |
| 739 | } |
| 740 | |
| 741 | rte_spinlock_unlock(&vq->intr_lock); |
| 742 | } |
| 743 | } |
| 744 | |
| 745 | static void |
| 746 | update_queuing_status(struct rte_eth_dev *dev, bool wait_queuing) |
no test coverage detected