* [dpdk-dev] [PATCH 2/2] vfio: fix build issue
@ 2018-10-16 11:42 Jeff Guo
2018-10-16 12:52 ` Ferruh Yigit
0 siblings, 1 reply; 3+ messages in thread
From: Jeff Guo @ 2018-10-16 11:42 UTC (permalink / raw)
To: anatoly.burakov, ferruh.yigit, thomas; +Cc: dev, jia.guo
Since the older kernel version do not implement the device request
interface for vfio, so when build on the kernel < v4.0.0, which is
the version begin to add the device request interface, it will
throw the error to show “VFIO_PCI_REQ_IRQ_INDEX” is undeclared.
This patch aim to fix this compile issue by add the macro
“HAVE_VFIO_DEV_REQ_INTERFACE” after checking the kernel version.
Signed-off-by: Jeff Guo <jia.guo@intel.com>
---
drivers/bus/pci/linux/pci_vfio.c | 12 ++++++++++++
drivers/bus/pci/pci_common.c | 2 ++
lib/librte_eal/common/include/rte_vfio.h | 3 +++
lib/librte_eal/linuxapp/eal/eal_interrupts.c | 17 ++++++++++++-----
4 files changed, 29 insertions(+), 5 deletions(-)
diff --git a/drivers/bus/pci/linux/pci_vfio.c b/drivers/bus/pci/linux/pci_vfio.c
index 72d77bf..cc2387e 100644
--- a/drivers/bus/pci/linux/pci_vfio.c
+++ b/drivers/bus/pci/linux/pci_vfio.c
@@ -279,6 +279,7 @@ pci_vfio_setup_interrupts(struct rte_pci_device *dev, int vfio_dev_fd)
return -1;
}
+#ifdef HAVE_VFIO_DEV_REQ_INTERFACE
static void
pci_vfio_req_handler(void *param)
{
@@ -384,6 +385,7 @@ pci_vfio_disable_notifier(struct rte_pci_device *dev)
return 0;
}
+#endif
static int
pci_vfio_is_ioport_bar(int vfio_dev_fd, int bar_index)
@@ -625,7 +627,9 @@ pci_vfio_map_resource_primary(struct rte_pci_device *dev)
struct pci_map *maps;
dev->intr_handle.fd = -1;
+#ifdef HAVE_VFIO_DEV_REQ_INTERFACE
dev->vfio_req_intr_handle.fd = -1;
+#endif
/* store PCI address string */
snprintf(pci_addr, sizeof(pci_addr), PCI_PRI_FMT,
@@ -736,11 +740,13 @@ pci_vfio_map_resource_primary(struct rte_pci_device *dev)
goto err_vfio_res;
}
+#ifdef HAVE_VFIO_DEV_REQ_INTERFACE
if (pci_vfio_enable_notifier(dev, vfio_dev_fd) != 0) {
RTE_LOG(ERR, EAL, "Error setting up notifier!\n");
goto err_vfio_res;
}
+#endif
TAILQ_INSERT_TAIL(vfio_res_list, vfio_res, next);
return 0;
@@ -766,7 +772,9 @@ pci_vfio_map_resource_secondary(struct rte_pci_device *dev)
struct pci_map *maps;
dev->intr_handle.fd = -1;
+#ifdef HAVE_VFIO_DEV_REQ_INTERFACE
dev->vfio_req_intr_handle.fd = -1;
+#endif
/* store PCI address string */
snprintf(pci_addr, sizeof(pci_addr), PCI_PRI_FMT,
@@ -807,7 +815,9 @@ pci_vfio_map_resource_secondary(struct rte_pci_device *dev)
/* we need save vfio_dev_fd, so it can be used during release */
dev->intr_handle.vfio_dev_fd = vfio_dev_fd;
+#ifdef HAVE_VFIO_DEV_REQ_INTERFACE
dev->vfio_req_intr_handle.vfio_dev_fd = vfio_dev_fd;
+#endif
return 0;
err_vfio_dev_fd:
@@ -880,12 +890,14 @@ pci_vfio_unmap_resource_primary(struct rte_pci_device *dev)
snprintf(pci_addr, sizeof(pci_addr), PCI_PRI_FMT,
loc->domain, loc->bus, loc->devid, loc->function);
+#ifdef HAVE_VFIO_DEV_REQ_INTERFACE
ret = pci_vfio_disable_notifier(dev);
if (ret) {
RTE_LOG(ERR, EAL, "fail to disable req notifier.\n");
return -1;
}
+#endif
if (close(dev->intr_handle.fd) < 0) {
RTE_LOG(INFO, EAL, "Error when closing eventfd file descriptor for %s\n",
pci_addr);
diff --git a/drivers/bus/pci/pci_common.c b/drivers/bus/pci/pci_common.c
index 5085c34..4b3749a 100644
--- a/drivers/bus/pci/pci_common.c
+++ b/drivers/bus/pci/pci_common.c
@@ -444,6 +444,7 @@ pci_hot_unplug_handler(struct rte_device *dev)
return -1;
switch (pdev->kdrv) {
+#ifdef HAVE_VFIO_DEV_REQ_INTERFACE
case RTE_KDRV_VFIO:
/*
* vfio kernel module guaranty the pci device would not be
@@ -454,6 +455,7 @@ pci_hot_unplug_handler(struct rte_device *dev)
rte_dev_event_callback_process(dev->name,
RTE_DEV_EVENT_REMOVE);
break;
+#endif
case RTE_KDRV_IGB_UIO:
case RTE_KDRV_UIO_GENERIC:
case RTE_KDRV_NIC_UIO:
diff --git a/lib/librte_eal/common/include/rte_vfio.h b/lib/librte_eal/common/include/rte_vfio.h
index f6617e0..7d66438 100644
--- a/lib/librte_eal/common/include/rte_vfio.h
+++ b/lib/librte_eal/common/include/rte_vfio.h
@@ -24,6 +24,9 @@ extern "C" {
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 6, 0)
#define VFIO_PRESENT
#endif /* kernel version >= 3.6.0 */
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 0, 0)
+#define HAVE_VFIO_DEV_REQ_INTERFACE
+#endif /* kernel version >= 4.0.0 */
#endif /* RTE_EAL_VFIO */
#ifdef VFIO_PRESENT
diff --git a/lib/librte_eal/linuxapp/eal/eal_interrupts.c b/lib/librte_eal/linuxapp/eal/eal_interrupts.c
index 7f611b3..767b508 100644
--- a/lib/librte_eal/linuxapp/eal/eal_interrupts.c
+++ b/lib/librte_eal/linuxapp/eal/eal_interrupts.c
@@ -309,6 +309,7 @@ vfio_disable_msix(const struct rte_intr_handle *intr_handle) {
return ret;
}
+#ifdef HAVE_VFIO_DEV_REQ_INTERFACE
/* enable req notifier */
static int
vfio_enable_req(const struct rte_intr_handle *intr_handle)
@@ -367,6 +368,7 @@ vfio_disable_req(const struct rte_intr_handle *intr_handle)
return ret;
}
#endif
+#endif
static int
uio_intx_intr_disable(const struct rte_intr_handle *intr_handle)
@@ -614,11 +616,13 @@ rte_intr_enable(const struct rte_intr_handle *intr_handle)
if (vfio_enable_intx(intr_handle))
return -1;
break;
+#ifdef HAVE_VFIO_DEV_REQ_INTERFACE
case RTE_INTR_HANDLE_VFIO_REQ:
if (vfio_enable_req(intr_handle))
return -1;
break;
#endif
+#endif
/* not used at this moment */
case RTE_INTR_HANDLE_DEV_EVENT:
return -1;
@@ -668,11 +672,12 @@ rte_intr_disable(const struct rte_intr_handle *intr_handle)
if (vfio_disable_intx(intr_handle))
return -1;
break;
+#ifdef HAVE_VFIO_DEV_REQ_INTERFACE
case RTE_INTR_HANDLE_VFIO_REQ:
if (vfio_disable_req(intr_handle))
return -1;
break;
-
+#endif
#endif
/* not used at this moment */
case RTE_INTR_HANDLE_DEV_EVENT:
@@ -739,6 +744,12 @@ eal_intr_process_interrupts(struct epoll_event *events, int nfds)
case RTE_INTR_HANDLE_VFIO_LEGACY:
bytes_read = sizeof(buf.vfio_intr_count);
break;
+#ifdef HAVE_VFIO_DEV_REQ_INTERFACE
+ case RTE_INTR_HANDLE_VFIO_REQ:
+ bytes_read = 0;
+ call = true;
+ break;
+#endif
#endif
case RTE_INTR_HANDLE_VDEV:
case RTE_INTR_HANDLE_EXT:
@@ -749,10 +760,6 @@ eal_intr_process_interrupts(struct epoll_event *events, int nfds)
bytes_read = 0;
call = true;
break;
- case RTE_INTR_HANDLE_VFIO_REQ:
- bytes_read = 0;
- call = true;
- break;
default:
bytes_read = 1;
break;
--
2.7.4
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [dpdk-dev] [PATCH 2/2] vfio: fix build issue
2018-10-16 11:42 [dpdk-dev] [PATCH 2/2] vfio: fix build issue Jeff Guo
@ 2018-10-16 12:52 ` Ferruh Yigit
2018-10-16 12:55 ` Thomas Monjalon
0 siblings, 1 reply; 3+ messages in thread
From: Ferruh Yigit @ 2018-10-16 12:52 UTC (permalink / raw)
To: Jeff Guo, anatoly.burakov, thomas; +Cc: dev
On 10/16/2018 12:42 PM, Jeff Guo wrote:
> Since the older kernel version do not implement the device request
> interface for vfio, so when build on the kernel < v4.0.0, which is
> the version begin to add the device request interface, it will
> throw the error to show “VFIO_PCI_REQ_IRQ_INDEX” is undeclared.
> This patch aim to fix this compile issue by add the macro
> “HAVE_VFIO_DEV_REQ_INTERFACE” after checking the kernel version.
>
> Signed-off-by: Jeff Guo <jia.guo@intel.com>
Fixes: 0eb8a1c4c786 ("vfio: add request notifier interrupt")
Fixes: c115fd000c32 ("vfio: handle hotplug request notifier")
Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [dpdk-dev] [PATCH 2/2] vfio: fix build issue
2018-10-16 12:52 ` Ferruh Yigit
@ 2018-10-16 12:55 ` Thomas Monjalon
0 siblings, 0 replies; 3+ messages in thread
From: Thomas Monjalon @ 2018-10-16 12:55 UTC (permalink / raw)
To: Jeff Guo; +Cc: Ferruh Yigit, anatoly.burakov, dev
16/10/2018 14:52, Ferruh Yigit:
> On 10/16/2018 12:42 PM, Jeff Guo wrote:
> > Since the older kernel version do not implement the device request
> > interface for vfio, so when build on the kernel < v4.0.0, which is
> > the version begin to add the device request interface, it will
> > throw the error to show “VFIO_PCI_REQ_IRQ_INDEX” is undeclared.
> > This patch aim to fix this compile issue by add the macro
> > “HAVE_VFIO_DEV_REQ_INTERFACE” after checking the kernel version.
> >
> > Signed-off-by: Jeff Guo <jia.guo@intel.com>
>
> Fixes: 0eb8a1c4c786 ("vfio: add request notifier interrupt")
> Fixes: c115fd000c32 ("vfio: handle hotplug request notifier")
>
> Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>
Series applies, thanks
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2018-10-16 12:55 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-10-16 11:42 [dpdk-dev] [PATCH 2/2] vfio: fix build issue Jeff Guo
2018-10-16 12:52 ` Ferruh Yigit
2018-10-16 12:55 ` Thomas Monjalon
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).