All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] net/e1000: fix cannot getting Rx interrupts issue
@ 2017-11-03 11:17 Xiaoyun Li
  2017-11-06  2:41 ` [PATCH v2] " Xiaoyun Li
  0 siblings, 1 reply; 4+ messages in thread
From: Xiaoyun Li @ 2017-11-03 11:17 UTC (permalink / raw)
  To: wenzhuo.lu; +Cc: qiming.yang, jingjing.wu, beilei.xing, dev, Xiaoyun Li, stable

When using VFIO and MSIX interrupt mode, cannot get Rx interrupts. Because
the interrupt vectors that are used by VFIO are not enabled. This patch
fixes this issue.

Fixes: c3cd3de0ab50 ("igb: enable Rx queue interrupts for PF")
Cc: stable@dpdk.org

Signed-off-by: Xiaoyun Li <xiaoyun.li@intel.com>
---
 drivers/net/e1000/igb_ethdev.c | 16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)

diff --git a/drivers/net/e1000/igb_ethdev.c b/drivers/net/e1000/igb_ethdev.c
index 003bdf0..dc70d22 100644
--- a/drivers/net/e1000/igb_ethdev.c
+++ b/drivers/net/e1000/igb_ethdev.c
@@ -5387,7 +5387,14 @@ eth_igb_rx_queue_intr_disable(struct rte_eth_dev *dev, uint16_t queue_id)
 {
 	struct e1000_hw *hw =
 		E1000_DEV_PRIVATE_TO_HW(dev->data->dev_private);
-	uint32_t mask = 1 << queue_id;
+	struct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(dev);
+	struct rte_intr_handle *intr_handle = &pci_dev->intr_handle;
+	uint32_t vec = E1000_MISC_VEC_ID;
+
+	if (rte_intr_allow_others(intr_handle))
+		vec = E1000_RX_VEC_START;
+
+	uint32_t mask = 1 << (queue_id + vec);
 
 	E1000_WRITE_REG(hw, E1000_EIMC, mask);
 	E1000_WRITE_FLUSH(hw);
@@ -5402,7 +5409,12 @@ eth_igb_rx_queue_intr_enable(struct rte_eth_dev *dev, uint16_t queue_id)
 		E1000_DEV_PRIVATE_TO_HW(dev->data->dev_private);
 	struct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(dev);
 	struct rte_intr_handle *intr_handle = &pci_dev->intr_handle;
-	uint32_t mask = 1 << queue_id;
+	uint32_t vec = E1000_MISC_VEC_ID;
+
+	if (rte_intr_allow_others(intr_handle))
+		vec = E1000_RX_VEC_START;
+
+	uint32_t mask = 1 << (queue_id + vec);
 	uint32_t regval;
 
 	regval = E1000_READ_REG(hw, E1000_EIMS);
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH v2] net/e1000: fix cannot getting Rx interrupts issue
  2017-11-03 11:17 [PATCH] net/e1000: fix cannot getting Rx interrupts issue Xiaoyun Li
@ 2017-11-06  2:41 ` Xiaoyun Li
  2017-11-06  4:57   ` Lu, Wenzhuo
  0 siblings, 1 reply; 4+ messages in thread
From: Xiaoyun Li @ 2017-11-06  2:41 UTC (permalink / raw)
  To: wenzhuo.lu; +Cc: dev, Xiaoyun Li, stable

When using VFIO and MSIX interrupt mode, cannot get Rx interrupts. Because
when enabling the interrupt vectors, the offset is computed in a way which
only supports IGB_UIO. But the offset should be different when using VFIO.
This patch fixes this issue.

Fixes: c3cd3de0ab50 ("igb: enable Rx queue interrupts for PF")
Cc: stable@dpdk.org

Signed-off-by: Xiaoyun Li <xiaoyun.li@intel.com>
---
v2:
* Modify the commit log to be more clear.

 drivers/net/e1000/igb_ethdev.c | 16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)

diff --git a/drivers/net/e1000/igb_ethdev.c b/drivers/net/e1000/igb_ethdev.c
index 003bdf0..dc70d22 100644
--- a/drivers/net/e1000/igb_ethdev.c
+++ b/drivers/net/e1000/igb_ethdev.c
@@ -5387,7 +5387,14 @@ eth_igb_rx_queue_intr_disable(struct rte_eth_dev *dev, uint16_t queue_id)
 {
 	struct e1000_hw *hw =
 		E1000_DEV_PRIVATE_TO_HW(dev->data->dev_private);
-	uint32_t mask = 1 << queue_id;
+	struct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(dev);
+	struct rte_intr_handle *intr_handle = &pci_dev->intr_handle;
+	uint32_t vec = E1000_MISC_VEC_ID;
+
+	if (rte_intr_allow_others(intr_handle))
+		vec = E1000_RX_VEC_START;
+
+	uint32_t mask = 1 << (queue_id + vec);
 
 	E1000_WRITE_REG(hw, E1000_EIMC, mask);
 	E1000_WRITE_FLUSH(hw);
@@ -5402,7 +5409,12 @@ eth_igb_rx_queue_intr_enable(struct rte_eth_dev *dev, uint16_t queue_id)
 		E1000_DEV_PRIVATE_TO_HW(dev->data->dev_private);
 	struct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(dev);
 	struct rte_intr_handle *intr_handle = &pci_dev->intr_handle;
-	uint32_t mask = 1 << queue_id;
+	uint32_t vec = E1000_MISC_VEC_ID;
+
+	if (rte_intr_allow_others(intr_handle))
+		vec = E1000_RX_VEC_START;
+
+	uint32_t mask = 1 << (queue_id + vec);
 	uint32_t regval;
 
 	regval = E1000_READ_REG(hw, E1000_EIMS);
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH v2] net/e1000: fix cannot getting Rx interrupts issue
  2017-11-06  2:41 ` [PATCH v2] " Xiaoyun Li
@ 2017-11-06  4:57   ` Lu, Wenzhuo
  2017-11-07  4:48     ` [dpdk-stable] " Ferruh Yigit
  0 siblings, 1 reply; 4+ messages in thread
From: Lu, Wenzhuo @ 2017-11-06  4:57 UTC (permalink / raw)
  To: Li, Xiaoyun; +Cc: dev, stable

Hi,

> -----Original Message-----
> From: Li, Xiaoyun
> Sent: Monday, November 6, 2017 10:42 AM
> To: Lu, Wenzhuo <wenzhuo.lu@intel.com>
> Cc: dev@dpdk.org; Li, Xiaoyun <xiaoyun.li@intel.com>; stable@dpdk.org
> Subject: [PATCH v2] net/e1000: fix cannot getting Rx interrupts issue
> 
> When using VFIO and MSIX interrupt mode, cannot get Rx interrupts.
> Because when enabling the interrupt vectors, the offset is computed in a
> way which only supports IGB_UIO. But the offset should be different when
> using VFIO.
> This patch fixes this issue.
> 
> Fixes: c3cd3de0ab50 ("igb: enable Rx queue interrupts for PF")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Xiaoyun Li <xiaoyun.li@intel.com>
Acked-by: Wenzhuo Lu <wenzhuo.lu@intel.com>

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [dpdk-stable] [PATCH v2] net/e1000: fix cannot getting Rx interrupts issue
  2017-11-06  4:57   ` Lu, Wenzhuo
@ 2017-11-07  4:48     ` Ferruh Yigit
  0 siblings, 0 replies; 4+ messages in thread
From: Ferruh Yigit @ 2017-11-07  4:48 UTC (permalink / raw)
  To: Lu, Wenzhuo, Li, Xiaoyun; +Cc: dev, stable

On 11/5/2017 8:57 PM, Lu, Wenzhuo wrote:
> Hi,
> 
>> -----Original Message-----
>> From: Li, Xiaoyun
>> Sent: Monday, November 6, 2017 10:42 AM
>> To: Lu, Wenzhuo <wenzhuo.lu@intel.com>
>> Cc: dev@dpdk.org; Li, Xiaoyun <xiaoyun.li@intel.com>; stable@dpdk.org
>> Subject: [PATCH v2] net/e1000: fix cannot getting Rx interrupts issue
>>
>> When using VFIO and MSIX interrupt mode, cannot get Rx interrupts.
>> Because when enabling the interrupt vectors, the offset is computed in a
>> way which only supports IGB_UIO. But the offset should be different when
>> using VFIO.
>> This patch fixes this issue.
>>
>> Fixes: c3cd3de0ab50 ("igb: enable Rx queue interrupts for PF")
>> Cc: stable@dpdk.org
>>
>> Signed-off-by: Xiaoyun Li <xiaoyun.li@intel.com>
> Acked-by: Wenzhuo Lu <wenzhuo.lu@intel.com>

Applied to dpdk-next-net/master, thanks.

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2017-11-07  4:48 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-11-03 11:17 [PATCH] net/e1000: fix cannot getting Rx interrupts issue Xiaoyun Li
2017-11-06  2:41 ` [PATCH v2] " Xiaoyun Li
2017-11-06  4:57   ` Lu, Wenzhuo
2017-11-07  4:48     ` [dpdk-stable] " Ferruh Yigit

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.