DPDK patches and discussions
 help / color / mirror / Atom feed
From: Vamsi Krishna Attunuru <vattunuru@marvell.com>
To: Ferruh Yigit <ferruh.yigit@intel.com>,
	John McNamara <john.mcnamara@intel.com>,
	Marko Kovacevic <marko.kovacevic@intel.com>
Cc: "dev@dpdk.org" <dev@dpdk.org>,
	David Marchand <david.marchand@redhat.com>,
	 Kiran Kumar Kokkilagadda <kirankumark@marvell.com>,
	Jerin Jacob Kollanukkaran <jerinj@marvell.com>,
	Igor Ryzhov <iryzhov@nfware.com>
Subject: Re: [dpdk-dev] [EXT] Re: [PATCH v2] kni: increase kernel version requirement for VA
Date: Thu, 28 Nov 2019 14:58:50 +0000	[thread overview]
Message-ID: <MWHPR18MB164595FD688BCD2D84DD8664A6470@MWHPR18MB1645.namprd18.prod.outlook.com> (raw)
In-Reply-To: <c07ceb9b-b9e5-a240-a141-4077e79f055d@intel.com>



> -----Original Message-----
> From: Ferruh Yigit <ferruh.yigit@intel.com>
> Sent: Thursday, November 28, 2019 5:43 PM
> To: John McNamara <john.mcnamara@intel.com>; Marko Kovacevic
> <marko.kovacevic@intel.com>
> Cc: dev@dpdk.org; David Marchand <david.marchand@redhat.com>; Vamsi
> Krishna Attunuru <vattunuru@marvell.com>; Kiran Kumar Kokkilagadda
> <kirankumark@marvell.com>; Jerin Jacob Kollanukkaran
> <jerinj@marvell.com>; Igor Ryzhov <iryzhov@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.yigit@intel.com>
> > ---
> > Cc: David Marchand <david.marchand@redhat.com>
> > Cc: Vamsi Attunuru <vattunuru@marvell.com>
> > Cc: Kiran Kumar K <kirankumark@marvell.com>
> > Cc: Jerin Jacob <jerinj@marvell.com>
> >
> > v2:
> > * fixed typo in comment
> > Cc: Igor Ryzhov <iryzhov@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.

      reply	other threads:[~2019-11-28 14:59 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-11-20 16:00 [dpdk-dev] [PATCH] " Ferruh Yigit
2019-11-20 16:24 ` Igor Ryzhov
2019-11-20 16:26   ` Ferruh Yigit
2019-11-20 17:22 ` [dpdk-dev] [PATCH v2] " Ferruh Yigit
2019-11-20 17:28   ` David Marchand
2019-11-20 22:30     ` David Marchand
2019-11-28 10:44       ` Andrew Rybchenko
2019-11-28 10:50         ` Thomas Monjalon
2019-11-28 11:01         ` Jerin Jacob
2019-11-28 11:02         ` David Marchand
2019-11-28 11:05           ` Ferruh Yigit
2019-11-21  1:58     ` Jerin Jacob
2019-11-21  2:18       ` [dpdk-dev] [EXT] " Vamsi Krishna Attunuru
2019-11-28 12:13   ` [dpdk-dev] " Ferruh Yigit
2019-11-28 14:58     ` Vamsi Krishna Attunuru [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=MWHPR18MB164595FD688BCD2D84DD8664A6470@MWHPR18MB1645.namprd18.prod.outlook.com \
    --to=vattunuru@marvell.com \
    --cc=david.marchand@redhat.com \
    --cc=dev@dpdk.org \
    --cc=ferruh.yigit@intel.com \
    --cc=iryzhov@nfware.com \
    --cc=jerinj@marvell.com \
    --cc=john.mcnamara@intel.com \
    --cc=kirankumark@marvell.com \
    --cc=marko.kovacevic@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).