kni: fix build with 4.9.x
diff mbox series

Message ID 20191128121526.18810-1-ferruh.yigit@intel.com
State Accepted, archived
Delegated to: David Marchand
Headers show
Series
  • kni: fix build with 4.9.x
Related show

Checks

Context Check Description
ci/travis-robot success Travis build: passed
ci/iol-mellanox-Performance success Performance Testing PASS
ci/Intel-compilation success Compilation OK
ci/iol-compilation success Compile Testing PASS
ci/iol-intel-Performance success Performance Testing PASS
ci/checkpatch warning coding style issues

Commit Message

Ferruh Yigit Nov. 28, 2019, 12:15 p.m. UTC
The 'get_user_pages_remote()' API is updated in kernel 4.10.0 [1],
but the check added as > 4.9.0,
this logic is broken for kernels 4.9.x, because they justify
> 4.9.0 check but have the old API.

Fixing the check as >= 4.10.0

[1]
commit 5b56d49fc31d ("mm: add locked parameter to get_user_pages_remote()")

Fixes: d965af9e8ae1 ("kni: increase kernel version requirement for VA")

Reported-by: Andrew Rybchenko <arybchenko@solarflare.com>
Suggested-by: David Marchand <david.marchand@redhat.com>
Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
---
 doc/guides/prog_guide/kernel_nic_interface.rst | 2 +-
 doc/guides/rel_notes/release_19_11.rst         | 2 +-
 kernel/linux/kni/compat.h                      | 4 ++--
 lib/librte_eal/linux/eal/eal.c                 | 6 +++---
 lib/librte_kni/rte_kni.c                       | 2 +-
 5 files changed, 8 insertions(+), 8 deletions(-)

Comments

Andrew Rybchenko Nov. 28, 2019, 1:43 p.m. UTC | #1
On 11/28/19 3:15 PM, Ferruh Yigit wrote:
> The 'get_user_pages_remote()' API is updated in kernel 4.10.0 [1],
> but the check added as > 4.9.0,
> this logic is broken for kernels 4.9.x, because they justify
>> 4.9.0 check but have the old API.
> Fixing the check as >= 4.10.0
>
> [1]
> commit 5b56d49fc31d ("mm: add locked parameter to get_user_pages_remote()")
>
> Fixes: d965af9e8ae1 ("kni: increase kernel version requirement for VA")
>
> Reported-by: Andrew Rybchenko <arybchenko@solarflare.com>
> Suggested-by: David Marchand <david.marchand@redhat.com>
> Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>

Many thanks, it solves build problems for me.

Tested-by: Andrew Rybchenko <arybchenko@solarflare.com>
David Marchand Nov. 28, 2019, 2:16 p.m. UTC | #2
On Thu, Nov 28, 2019 at 2:43 PM Andrew Rybchenko
<arybchenko@solarflare.com> wrote:
> On 11/28/19 3:15 PM, Ferruh Yigit wrote:
> > The 'get_user_pages_remote()' API is updated in kernel 4.10.0 [1],
> > but the check added as > 4.9.0,
> > this logic is broken for kernels 4.9.x, because they justify
> >> 4.9.0 check but have the old API.
> > Fixing the check as >= 4.10.0
> >
> > [1]
> > commit 5b56d49fc31d ("mm: add locked parameter to get_user_pages_remote()")
> >
> > Fixes: d965af9e8ae1 ("kni: increase kernel version requirement for VA")
> >
> > Reported-by: Andrew Rybchenko <arybchenko@solarflare.com>
> > Suggested-by: David Marchand <david.marchand@redhat.com>
> > Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
> Tested-by: Andrew Rybchenko <arybchenko@solarflare.com>

Reviewed-by: David Marchand <david.marchand@redhat.com>

Applied, thanks.

Patch
diff mbox series

diff --git a/doc/guides/prog_guide/kernel_nic_interface.rst b/doc/guides/prog_guide/kernel_nic_interface.rst
index 77856086d..32d09ccf8 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, 9, 0) and
+- LINUX_VERSION_CODE >= KERNEL_VERSION(4, 10, 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 c831e079f..a321eb575 100644
--- a/doc/guides/rel_notes/release_19_11.rst
+++ b/doc/guides/rel_notes/release_19_11.rst
@@ -345,7 +345,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.9.0.
+    versions 4.10.0 and above.
 
   * 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 83ecac2d8..7109474ec 100644
--- a/kernel/linux/kni/compat.h
+++ b/kernel/linux/kni/compat.h
@@ -124,9 +124,9 @@ 
 
 /*
  * 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
+ * kernel version increased to >= 4.10.0 because of the updates in
  * get_user_pages_remote() kernel API
  */
-#if KERNEL_VERSION(4, 9, 0) < LINUX_VERSION_CODE
+#if KERNEL_VERSION(4, 10, 0) <= LINUX_VERSION_CODE
 #define HAVE_IOVA_TO_KVA_MAPPING_SUPPORT
 #endif
diff --git a/lib/librte_eal/linux/eal/eal.c b/lib/librte_eal/linux/eal/eal.c
index 5879e33e5..c4233ec3c 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, 9, 0)
+#if defined(RTE_LIBRTE_KNI) && LINUX_VERSION_CODE >= KERNEL_VERSION(4, 10, 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, 9, 0)
+#if defined(RTE_LIBRTE_KNI) && LINUX_VERSION_CODE < KERNEL_VERSION(4, 10, 0)
 		/* Workaround for KNI which requires physical address to work
-		 * in kernels <= 4.9
+		 * in kernels < 4.10
 		 */
 		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 b564482fe..e388751e3 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, 9, 0)
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 10, 0)
 	if (rte_eal_iova_mode() != RTE_IOVA_PA) {
 		RTE_LOG(ERR, KNI, "KNI requires IOVA as PA\n");
 		return -1;