> -----Original Message----- > From: Ferruh Yigit <ferruh.yi...@intel.com> > Sent: Thursday, November 28, 2019 5:43 PM > To: John McNamara <john.mcnam...@intel.com>; Marko Kovacevic > <marko.kovace...@intel.com> > Cc: dev@dpdk.org; David Marchand <david.march...@redhat.com>; Vamsi > Krishna Attunuru <vattun...@marvell.com>; Kiran Kumar Kokkilagadda > <kirankum...@marvell.com>; Jerin Jacob Kollanukkaran > <jer...@marvell.com>; Igor Ryzhov <iryz...@nfware.com> > Subject: [EXT] Re: [dpdk-dev] [PATCH v2] kni: increase kernel version > requirement for VA > > External Email > > ---------------------------------------------------------------------- > On 11/20/2019 5:22 PM, Ferruh Yigit 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> > > > > v2: > > * fixed typo in comment > > Cc: Igor Ryzhov <iryz...@nfware.com> > > --- > > doc/guides/prog_guide/kernel_nic_interface.rst | 2 +- > > doc/guides/rel_notes/release_19_11.rst | 2 +- > > kernel/linux/kni/compat.h | 17 ++++++----------- > > 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, 12 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..83ecac2d8 100644 > > --- a/kernel/linux/kni/compat.h > > +++ b/kernel/linux/kni/compat.h > > @@ -122,16 +122,11 @@ > > #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 > > +required > > + * kernel version increased to > 4.9.0 because of the updates in > > + * get_user_pages_remote() kernel API */ #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"); > > Btw, since issue is revisited, I have a question about this check, > > This check is to favor PA when bus mode is DC for the KNI performance > concerns, For this selection, why we need the kernel version check at all? > KNI can work in the PA mode without any specific kernel version > dependency, so why not if bus mode is DC and kni kernel module is inserted, > select iova mode as PA independent from kernel version?
Yes, correct, kernel version check is not needed.