Hi Ferruh, There is a typo in "version incread to > 4.9.0 ...". incread > increased
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 > >