dev.dpdk.org archive mirror
 help / color / mirror / Atom feed
* [dpdk-dev] [PATCH] kni: fix build with 4.9.x
@ 2019-11-28 12:15 Ferruh Yigit
  2019-11-28 13:43 ` Andrew Rybchenko
  0 siblings, 1 reply; 3+ messages in thread
From: Ferruh Yigit @ 2019-11-28 12:15 UTC (permalink / raw)
  To: Ferruh Yigit, John McNamara, Marko Kovacevic
  Cc: dev, Andrew Rybchenko, David Marchand

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(-)

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;
-- 
2.21.0


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

* Re: [dpdk-dev] [PATCH] kni: fix build with 4.9.x
  2019-11-28 12:15 [dpdk-dev] [PATCH] kni: fix build with 4.9.x Ferruh Yigit
@ 2019-11-28 13:43 ` Andrew Rybchenko
  2019-11-28 14:16   ` David Marchand
  0 siblings, 1 reply; 3+ messages in thread
From: Andrew Rybchenko @ 2019-11-28 13:43 UTC (permalink / raw)
  To: Ferruh Yigit, John McNamara, Marko Kovacevic; +Cc: dev, David Marchand

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>




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

* Re: [dpdk-dev] [PATCH] kni: fix build with 4.9.x
  2019-11-28 13:43 ` Andrew Rybchenko
@ 2019-11-28 14:16   ` David Marchand
  0 siblings, 0 replies; 3+ messages in thread
From: David Marchand @ 2019-11-28 14:16 UTC (permalink / raw)
  To: Ferruh Yigit; +Cc: John McNamara, Marko Kovacevic, dev, Andrew Rybchenko

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.


-- 
David Marchand


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

end of thread, other threads:[~2019-11-28 14:16 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-11-28 12:15 [dpdk-dev] [PATCH] kni: fix build with 4.9.x Ferruh Yigit
2019-11-28 13:43 ` Andrew Rybchenko
2019-11-28 14:16   ` David Marchand

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).