kni: fix build with Linux 4.9.x
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>
This commit is contained in:
parent
564f295d19
commit
de480bbf13
@ -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.
|
||||
|
||||
|
@ -335,7 +335,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
|
||||
|
@ -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
|
||||
|
@ -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) {
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user