[dpdk-dev,4/4] net/avf: fix VF RX queue interrupt enabling

Message ID 1516757925-3746-5-git-send-email-wenzhuo.lu@intel.com (mailing list archive)
State Superseded, archived
Headers

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation fail Compilation issues

Commit Message

Wenzhuo Lu Jan. 24, 2018, 1:38 a.m. UTC
  As UIO doesn't support multiple interrupt, and the interrupt
is occupied by the control plane. PMD should not try to enable
RX queue interrupt. Then APP can know the RX queue interrupt
is not enabled and only choose the polling mode.

Fixes: d6bde6b5eae9 ("net/avf: enable Rx interrupt")
Signed-off-by: Wenzhuo Lu <wenzhuo.lu@intel.com>
---
 drivers/net/avf/avf_ethdev.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)
  

Patch

diff --git a/drivers/net/avf/avf_ethdev.c b/drivers/net/avf/avf_ethdev.c
index b36d317..16e5fc9 100644
--- a/drivers/net/avf/avf_ethdev.c
+++ b/drivers/net/avf/avf_ethdev.c
@@ -292,7 +292,8 @@  static int avf_config_rx_queues_irqs(struct rte_eth_dev *dev,
 	uint16_t interval, i;
 	int vec;
 
-	if (dev->data->dev_conf.intr_conf.rxq != 0) {
+	if (rte_intr_cap_multiple(intr_handle) &&
+	    dev->data->dev_conf.intr_conf.rxq) {
 		if (rte_intr_efd_enable(intr_handle, dev->data->nb_rx_queues))
 			return -1;
 	}
@@ -344,7 +345,9 @@  static int avf_config_rx_queues_irqs(struct rte_eth_dev *dev,
 			vf->msix_base = AVF_MISC_VEC_ID;
 			for (i = 0; i < dev->data->nb_rx_queues; i++) {
 				vf->rxq_map[0] |= 1 << i;
-				intr_handle->intr_vec[i] = AVF_MISC_VEC_ID;
+				if (rte_intr_dp_is_en(intr_handle))
+					intr_handle->intr_vec[i] =
+						AVF_MISC_VEC_ID;
 			}
 			PMD_DRV_LOG(DEBUG,
 				    "vector 0 are mapping to all Rx queues");
@@ -358,7 +361,8 @@  static int avf_config_rx_queues_irqs(struct rte_eth_dev *dev,
 			vec = AVF_RX_VEC_START;
 			for (i = 0; i < dev->data->nb_rx_queues; i++) {
 				vf->rxq_map[vec] |= 1 << i;
-				intr_handle->intr_vec[i] = vec++;
+				if (rte_intr_dp_is_en(intr_handle))
+					intr_handle->intr_vec[i] = vec++;
 				if (vec >= vf->nb_msix)
 					vec = AVF_RX_VEC_START;
 			}