[dpdk-dev] [PATCH v13 2/2] kni: support IOVA mode

Jerin Jacob jerinjacobk at gmail.com
Fri Nov 15 16:22:29 CET 2019


On Fri, Nov 15, 2019 at 8:27 PM David Marchand
<david.marchand at redhat.com> wrote:
>
> On Fri, Nov 15, 2019 at 2:40 PM Jerin Jacob <jerinjacobk at gmail.com> wrote:
> > On Fri, Nov 15, 2019 at 6:29 PM David Marchand
> > <david.marchand at redhat.com> wrote:
> > > So far, KNI could not work with IOVA as VA.
> > > Your patchset adds support for IOVA as VA if kernel is >= 4.6.
> >
> > We need achive the following.
> >
> > IOVA as PA  has performance implication on KNI case. So we need to
> > make IOVA as PA when KNI module is loaded.
>
> - The current behaviour is:
>   * buses announce PA, nothing to do wrt KNI,
>   * buses announce VA or DC (whatever the considerations on iommu), if
> physical addresses are available, then PA is used and KNI works,
>
> - Now, with this new feature (on kernels >= 4.6), we can have KNI work
> with VA, the previous workaround can be skipped.
> There is another consideration wrt performance, as a consequence, for
> kernels 4.6, if physical addresses are available, we can select PA for
> KNI.
>
> _But_ I did not see people complaining about the current behavior.
> I see no reason to change this if the VA support can't be used (kernels < 4.6).
>
> So how about (I inverted the #if LINUX_VERSION_CODE >=
> KERNEL_VERSION(4, 6, 0), it was causing me headaches):


That works too David. Thanks for the review.

>
> diff --git a/lib/librte_eal/linux/eal/eal.c b/lib/librte_eal/linux/eal/eal.c
> index 9e2d50cfb..33f3c674c 100644
> --- a/lib/librte_eal/linux/eal/eal.c
> +++ b/lib/librte_eal/linux/eal/eal.c
> @@ -1073,6 +1073,11 @@ 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)
> +                       } else if (rte_eal_check_module("rte_kni") == 1) {
> +                               iova_mode = RTE_IOVA_PA;
> +                               RTE_LOG(DEBUG, EAL, "Forcing IOVA as
> 'PA' for better perfomance with KNI\n");
> +#endif
>                         } else if (is_iommu_enabled()) {
>                                 /* we have an IOMMU, pick IOVA as VA mode */
>                                 iova_mode = RTE_IOVA_VA;
> @@ -1085,7 +1090,7 @@ rte_eal_init(int argc, char **argv)
>                                 RTE_LOG(DEBUG, EAL, "IOMMU is not
> available, selecting IOVA as PA mode.\n");
>                         }
>                 }
> -#ifdef RTE_LIBRTE_KNI
> -               /* Workaround for KNI which requires physical address to work */
> +#if defined(RTE_LIBRTE_KNI) && LINUX_VERSION_CODE < KERNEL_VERSION(4, 6, 0)
> +               /* Workaround for KNI which requires physical address
> to work with kernels < 4.6 */
>                 if (iova_mode == RTE_IOVA_VA &&
>                                 rte_eal_check_module("rte_kni") == 1) {
>
>
> --
> David Marchand
>


More information about the dev mailing list