summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/guides/prog_guide/kernel_nic_interface.rst2
-rw-r--r--doc/guides/rel_notes/release_19_11.rst2
-rw-r--r--kernel/linux/kni/compat.h17
-rw-r--r--kernel/linux/kni/kni_dev.h10
-rw-r--r--lib/librte_eal/linux/eal/eal.c6
-rw-r--r--lib/librte_kni/rte_kni.c2
6 files changed, 12 insertions, 27 deletions
diff --git a/doc/guides/prog_guide/kernel_nic_interface.rst b/doc/guides/prog_guide/kernel_nic_interface.rst
index c4479ff..848b002 100644
--- a/doc/guides/prog_guide/kernel_nic_interface.rst
+++ b/doc/guides/prog_guide/kernel_nic_interface.rst
@@ -305,7 +305,7 @@ IOVA = VA: Support
KNI operates in IOVA_VA scheme when
-- LINUX_VERSION_CODE >= KERNEL_VERSION(4, 6, 0) and
+- LINUX_VERSION_CODE > KERNEL_VERSION(4, 9, 0) and
- EAL option `iova-mode=va` is passed or bus IOVA scheme in the DPDK is selected
as RTE_IOVA_VA.
diff --git a/doc/guides/rel_notes/release_19_11.rst b/doc/guides/rel_notes/release_19_11.rst
index 93243a7..48c80e5 100644
--- a/doc/guides/rel_notes/release_19_11.rst
+++ b/doc/guides/rel_notes/release_19_11.rst
@@ -308,7 +308,7 @@ New Features
* Added IOVA = VA support for KNI, KNI can operate in IOVA = VA mode when
`iova-mode=va` EAL option is passed to the application or when bus IOVA
scheme is selected as RTE_IOVA_VA. This mode only works on Linux Kernel
- versions 4.6.0 and above.
+ versions above 4.9.0.
* Due to IOVA to KVA address translations, based on the KNI use case there
can be a performance impact. For mitigation, forcing IOVA to PA via EAL
diff --git a/kernel/linux/kni/compat.h b/kernel/linux/kni/compat.h
index 062b170..83ecac2 100644
--- a/kernel/linux/kni/compat.h
+++ b/kernel/linux/kni/compat.h
@@ -122,16 +122,11 @@
#define HAVE_SIGNAL_FUNCTIONS_OWN_HEADER
#endif
-#if KERNEL_VERSION(4, 6, 0) <= LINUX_VERSION_CODE
-
+/*
+ * iova to kva mapping support can be provided since 4.6.0, but required
+ * kernel version increased to > 4.9.0 because of the updates in
+ * get_user_pages_remote() kernel API
+ */
+#if KERNEL_VERSION(4, 9, 0) < LINUX_VERSION_CODE
#define HAVE_IOVA_TO_KVA_MAPPING_SUPPORT
-
-#if KERNEL_VERSION(4, 9, 0) > LINUX_VERSION_CODE
-#define GET_USER_PAGES_REMOTE_API_V1
-#elif KERNEL_VERSION(4, 9, 0) == LINUX_VERSION_CODE
-#define GET_USER_PAGES_REMOTE_API_V2
-#else
-#define GET_USER_PAGES_REMOTE_API_V3
-#endif
-
#endif
diff --git a/kernel/linux/kni/kni_dev.h b/kernel/linux/kni/kni_dev.h
index fb641b6..5e75c63 100644
--- a/kernel/linux/kni/kni_dev.h
+++ b/kernel/linux/kni/kni_dev.h
@@ -101,18 +101,8 @@ static inline phys_addr_t iova_to_phys(struct task_struct *tsk,
offset = iova & (PAGE_SIZE - 1);
/* Read one page struct info */
-#ifdef GET_USER_PAGES_REMOTE_API_V3
ret = get_user_pages_remote(tsk, tsk->mm, iova, 1,
FOLL_TOUCH, &page, NULL, NULL);
-#endif
-#ifdef GET_USER_PAGES_REMOTE_API_V2
- ret = get_user_pages_remote(tsk, tsk->mm, iova, 1,
- FOLL_TOUCH, &page, NULL);
-#endif
-#ifdef GET_USER_PAGES_REMOTE_API_V1
- ret = get_user_pages_remote(tsk, tsk->mm, iova, 1
- 0, 0, &page, NULL);
-#endif
if (ret < 0)
return 0;
diff --git a/lib/librte_eal/linux/eal/eal.c b/lib/librte_eal/linux/eal/eal.c
index b5b7150..5879e33 100644
--- a/lib/librte_eal/linux/eal/eal.c
+++ b/lib/librte_eal/linux/eal/eal.c
@@ -1073,7 +1073,7 @@ rte_eal_init(int argc, char **argv)
*/
iova_mode = RTE_IOVA_VA;
RTE_LOG(DEBUG, EAL, "Physical addresses are unavailable, selecting IOVA as VA mode.\n");
-#if defined(RTE_LIBRTE_KNI) && LINUX_VERSION_CODE >= KERNEL_VERSION(4, 6, 0)
+#if defined(RTE_LIBRTE_KNI) && LINUX_VERSION_CODE > KERNEL_VERSION(4, 9, 0)
} else if (rte_eal_check_module("rte_kni") == 1) {
iova_mode = RTE_IOVA_PA;
RTE_LOG(DEBUG, EAL, "KNI is loaded, selecting IOVA as PA mode for better KNI perfomance.\n");
@@ -1090,9 +1090,9 @@ rte_eal_init(int argc, char **argv)
RTE_LOG(DEBUG, EAL, "IOMMU is not available, selecting IOVA as PA mode.\n");
}
}
-#if defined(RTE_LIBRTE_KNI) && LINUX_VERSION_CODE < KERNEL_VERSION(4, 6, 0)
+#if defined(RTE_LIBRTE_KNI) && LINUX_VERSION_CODE <= KERNEL_VERSION(4, 9, 0)
/* Workaround for KNI which requires physical address to work
- * in kernels < 4.6
+ * in kernels <= 4.9
*/
if (iova_mode == RTE_IOVA_VA &&
rte_eal_check_module("rte_kni") == 1) {
diff --git a/lib/librte_kni/rte_kni.c b/lib/librte_kni/rte_kni.c
index 86995fc..b564482 100644
--- a/lib/librte_kni/rte_kni.c
+++ b/lib/librte_kni/rte_kni.c
@@ -98,7 +98,7 @@ static volatile int kni_fd = -1;
int
rte_kni_init(unsigned int max_kni_ifaces __rte_unused)
{
-#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 6, 0)
+#if LINUX_VERSION_CODE <= KERNEL_VERSION(4, 9, 0)
if (rte_eal_iova_mode() != RTE_IOVA_PA) {
RTE_LOG(ERR, KNI, "KNI requires IOVA as PA\n");
return -1;