DPDK patches and discussions
 help / color / mirror / Atom feed
* [dpdk-dev] [PATCH] igb_uio: fix uevent montior issue
@ 2018-01-30  9:55 Jeff Guo
  0 siblings, 0 replies; 8+ messages in thread
From: Jeff Guo @ 2018-01-30  9:55 UTC (permalink / raw)
  To: ferruh.yigit, jingjing.wu, jianfeng.tan; +Cc: thomas, dev, Jeff Guo

udev could not detect remove and add event of device when hotplug in
and out devices, that related with the fix about using pointer of
rte_uio_pci_dev as dev_id instead of uio_device for irq device handler,
that would result igb uio irq failure to deliver the uevent to udev when
kernel version after than 3.17. so this patch correct it by use kernel
version check before handle the pci interrupt.

Signed-off-by: Jeff Guo <jia.guo@intel.com>
---
 lib/librte_eal/linuxapp/igb_uio/igb_uio.c | 17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)

diff --git a/lib/librte_eal/linuxapp/igb_uio/igb_uio.c b/lib/librte_eal/linuxapp/igb_uio/igb_uio.c
index 9f0fb5e..14ce2ea 100644
--- a/lib/librte_eal/linuxapp/igb_uio/igb_uio.c
+++ b/lib/librte_eal/linuxapp/igb_uio/igb_uio.c
@@ -192,9 +192,14 @@ igbuio_pci_irqcontrol(struct uio_info *info, s32 irq_state)
 static irqreturn_t
 igbuio_pci_irqhandler(int irq, void *dev_id)
 {
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 17, 0)
 	struct rte_uio_pci_dev *udev = (struct rte_uio_pci_dev *)dev_id;
 	struct uio_info *info = &udev->info;
-
+#else
+	struct uio_device *idev = (struct uio_device *)dev_id;
+	struct uio_info *info = idev->info;
+	struct rte_uio_pci_dev *udev = info->priv;
+#endif
 	/* Legacy mode need to mask in hardware */
 	if (udev->mode == RTE_INTR_MODE_LEGACY &&
 	    !pci_check_and_mask_intx(udev->pdev))
@@ -279,9 +284,15 @@ igbuio_pci_enable_interrupts(struct rte_uio_pci_dev *udev)
 	}
 
 	if (udev->info.irq != UIO_IRQ_NONE)
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 17, 0)
 		err = request_irq(udev->info.irq, igbuio_pci_irqhandler,
 				  udev->info.irq_flags, udev->info.name,
 				  udev);
+#else
+		err = request_irq(udev->info.irq, igbuio_pci_irqhandler,
+				  udev->info.irq_flags, udev->info.name,
+				  udev->info.uio_dev);
+#endif
 	dev_info(&udev->pdev->dev, "uio device registered with irq %lx\n",
 		 udev->info.irq);
 
@@ -292,7 +303,11 @@ static void
 igbuio_pci_disable_interrupts(struct rte_uio_pci_dev *udev)
 {
 	if (udev->info.irq) {
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 17, 0)
 		free_irq(udev->info.irq, udev);
+#else
+		free_irq(udev->info.irq, udev->info.uio_dev);
+#endif
 		udev->info.irq = 0;
 	}
 
-- 
2.7.4

^ permalink raw reply	[flat|nested] 8+ messages in thread
* [dpdk-dev] [PATCH] igb_uio: fix uevent montior issue
@ 2018-01-30 10:01 Jeff Guo
  2018-01-31  2:15 ` Wu, Jingjing
  2018-02-08 22:01 ` Thomas Monjalon
  0 siblings, 2 replies; 8+ messages in thread
From: Jeff Guo @ 2018-01-30 10:01 UTC (permalink / raw)
  To: ferruh.yigit, jingjing.wu, jianfeng.tan; +Cc: thomas, dev, Jeff Guo

udev could not detect remove and add event of device when hotplug in
and out devices, that related with the fix about using pointer of
rte_uio_pci_dev as dev_id instead of uio_device for irq device handler,
that would result igb uio irq failure when kernel version after than 3.17.
so this patch correct it by use kernel version check before handle the
pci interrupt.

Fixes: 6b9ed026a870 ("igb_uio: fix build with kernel <= 3.17")
Signed-off-by: Jeff Guo <jia.guo@intel.com>
---
 lib/librte_eal/linuxapp/igb_uio/igb_uio.c | 17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)

diff --git a/lib/librte_eal/linuxapp/igb_uio/igb_uio.c b/lib/librte_eal/linuxapp/igb_uio/igb_uio.c
index 9f0fb5e..14ce2ea 100644
--- a/lib/librte_eal/linuxapp/igb_uio/igb_uio.c
+++ b/lib/librte_eal/linuxapp/igb_uio/igb_uio.c
@@ -192,9 +192,14 @@ igbuio_pci_irqcontrol(struct uio_info *info, s32 irq_state)
 static irqreturn_t
 igbuio_pci_irqhandler(int irq, void *dev_id)
 {
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 17, 0)
 	struct rte_uio_pci_dev *udev = (struct rte_uio_pci_dev *)dev_id;
 	struct uio_info *info = &udev->info;
-
+#else
+	struct uio_device *idev = (struct uio_device *)dev_id;
+	struct uio_info *info = idev->info;
+	struct rte_uio_pci_dev *udev = info->priv;
+#endif
 	/* Legacy mode need to mask in hardware */
 	if (udev->mode == RTE_INTR_MODE_LEGACY &&
 	    !pci_check_and_mask_intx(udev->pdev))
@@ -279,9 +284,15 @@ igbuio_pci_enable_interrupts(struct rte_uio_pci_dev *udev)
 	}
 
 	if (udev->info.irq != UIO_IRQ_NONE)
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 17, 0)
 		err = request_irq(udev->info.irq, igbuio_pci_irqhandler,
 				  udev->info.irq_flags, udev->info.name,
 				  udev);
+#else
+		err = request_irq(udev->info.irq, igbuio_pci_irqhandler,
+				  udev->info.irq_flags, udev->info.name,
+				  udev->info.uio_dev);
+#endif
 	dev_info(&udev->pdev->dev, "uio device registered with irq %lx\n",
 		 udev->info.irq);
 
@@ -292,7 +303,11 @@ static void
 igbuio_pci_disable_interrupts(struct rte_uio_pci_dev *udev)
 {
 	if (udev->info.irq) {
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 17, 0)
 		free_irq(udev->info.irq, udev);
+#else
+		free_irq(udev->info.irq, udev->info.uio_dev);
+#endif
 		udev->info.irq = 0;
 	}
 
-- 
2.7.4

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

end of thread, other threads:[~2018-02-27  6:17 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-01-30  9:55 [dpdk-dev] [PATCH] igb_uio: fix uevent montior issue Jeff Guo
2018-01-30 10:01 Jeff Guo
2018-01-31  2:15 ` Wu, Jingjing
2018-02-08 22:01 ` Thomas Monjalon
2018-02-12  8:28   ` Guo, Jia
2018-02-12  9:46     ` Thomas Monjalon
2018-02-13  9:32     ` Ferruh Yigit
2018-02-27  6:17       ` Guo, Jia

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).