On 11/20/2019 4:24 PM, Igor Ryzhov wrote: > Hi Ferruh, > > There is a typo in "version incread to > 4.9.0 ...". > incread > increased
Thanks Igor, I will fix in next version. > > Igor > > On Wed, Nov 20, 2019 at 7:00 PM Ferruh Yigit <ferruh.yi...@intel.com> wrote: > >> A build error reported related to the selected >> 'get_user_pages_remote()' kernel API: >> >> .../kernel/linux/kni/kni_dev.h:113:8: >> error: too few arguments to function ‘get_user_pages_remote’ >> ret = get_user_pages_remote(tsk, tsk->mm, iova, 1 >> ^~~~~~~~~~~~~~~~~~~~~ >> >> Currently there are three version of the 'get_user_pages_remote()' >> supported, based on kernel version >> < 4.9, = 4.9, > 4.9 >> >> These version based checks are not working fine with the distro kernels >> which is the cause of reported build error. The error reported by the >> kernel version 4.8, but it is using API defined in > 4.9. >> >> To be able to take control of this, and possible more, related build >> error, increasing the minimum supported kernel version for iova=va with >> KNI to kernel version 4.9. >> >> This leaves us with single version of the kernel API and more >> manageable. >> >> Signed-off-by: Ferruh Yigit <ferruh.yi...@intel.com> >> --- >> Cc: David Marchand <david.march...@redhat.com> >> Cc: Vamsi Attunuru <vattun...@marvell.com> >> Cc: Kiran Kumar K <kirankum...@marvell.com> >> Cc: Jerin Jacob <jer...@marvell.com> >> --- >> doc/guides/prog_guide/kernel_nic_interface.rst | 2 +- >> doc/guides/rel_notes/release_19_11.rst | 2 +- >> kernel/linux/kni/compat.h | 16 +++++----------- >> kernel/linux/kni/kni_dev.h | 10 ---------- >> lib/librte_eal/linux/eal/eal.c | 6 +++--- >> lib/librte_kni/rte_kni.c | 2 +- >> 6 files changed, 11 insertions(+), 27 deletions(-) >> >> diff --git a/doc/guides/prog_guide/kernel_nic_interface.rst >> b/doc/guides/prog_guide/kernel_nic_interface.rst >> index c4479ffbf..848b00253 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 21be600ab..45b58190c 100644 >> --- a/doc/guides/rel_notes/release_19_11.rst >> +++ b/doc/guides/rel_notes/release_19_11.rst >> @@ -299,7 +299,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 062b170ef..339dd25a7 100644 >> --- a/kernel/linux/kni/compat.h >> +++ b/kernel/linux/kni/compat.h >> @@ -122,16 +122,10 @@ >> #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 support >> + * version incread to > 4.9.0 because of the updates in >> get_user_pages_remote() >> + */ >> +#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 fb641b696..5e75c6371 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 b5b71500c..5879e33e5 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 86995fc81..b564482fe 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; >> -- >> 2.21.0 >> >>