From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 9FAD4A04E0; Thu, 28 Nov 2019 13:15:33 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id B6AB82B88; Thu, 28 Nov 2019 13:15:32 +0100 (CET) Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by dpdk.org (Postfix) with ESMTP id 05F5328EE for ; Thu, 28 Nov 2019 13:15:30 +0100 (CET) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga102.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 28 Nov 2019 04:15:30 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.69,253,1571727600"; d="scan'208";a="359796989" Received: from silpixa00399752.ir.intel.com (HELO silpixa00399752.ger.corp.intel.com) ([10.237.223.78]) by orsmga004.jf.intel.com with ESMTP; 28 Nov 2019 04:15:28 -0800 From: Ferruh Yigit To: Ferruh Yigit , John McNamara , Marko Kovacevic Cc: dev@dpdk.org, Andrew Rybchenko , David Marchand Date: Thu, 28 Nov 2019 12:15:26 +0000 Message-Id: <20191128121526.18810-1-ferruh.yigit@intel.com> X-Mailer: git-send-email 2.21.0 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [dpdk-dev] [PATCH] kni: fix build with 4.9.x X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" 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 Suggested-by: David Marchand Signed-off-by: Ferruh Yigit --- 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