[dpdk-dev] [PATCH v6 3/4] example/kni: add IOVA support for kni application
Ferruh Yigit
ferruh.yigit at intel.com
Thu Jul 11 18:23:18 CEST 2019
On 6/25/2019 4:56 AM, vattunuru at marvell.com wrote:
> From: Vamsi Attunuru <vattunuru at marvell.com>
>
> Current KNI implementation operates in IOVA = PA mode,
> Patch adds support for IOVA = VA mode by addressing
> the issues with page address translations(IOVA <==> KVA).
>
> In this patch KNI application creates mempool with
> "MEMPOOL_F_NO_PAGE_BOUND" flag to ensure all mbuf memory
> is with in the page boundaries and subsequently kernel KNI
> module uses iommu_iova_to_phys() and phys_to_virt() APIs
> to get the kernel virtual addresses.
>
> Signed-off-by: Vamsi Attunuru <vattunuru at marvell.com>
> Signed-off-by: Kiran Kumar K <kirankumark at marvell.com>
> ---
> examples/kni/main.c | 53 ++++++++++++++++++++++-
> lib/librte_eal/linux/eal/eal.c | 8 ----
> lib/librte_eal/linux/eal/include/rte_kni_common.h | 1 +
> lib/librte_kni/rte_kni.c | 2 +
Need to document this new iova_mode and related behavior in KNI documentation.
<...>
> @@ -975,7 +1026,7 @@ main(int argc, char** argv)
> rte_exit(EXIT_FAILURE, "Could not parse input parameters\n");
>
> /* Create the mbuf pool */
> - pktmbuf_pool = rte_pktmbuf_pool_create("mbuf_pool", NB_MBUF,
> + pktmbuf_pool = kni_packet_pool_create("mbuf_pool", NB_MBUF,
What about keeping the default mempool creation and use
"kni_packet_pool_create()" only when "iova_mode" is set. (Please read below
comment first J )
<...>
> diff --git a/lib/librte_kni/rte_kni.c b/lib/librte_kni/rte_kni.c
> index 99c4bf5..4263f21 100644
> --- a/lib/librte_kni/rte_kni.c
> +++ b/lib/librte_kni/rte_kni.c
> @@ -300,6 +300,8 @@ rte_kni_alloc(struct rte_mempool *pktmbuf_pool,
> kni->group_id = conf->group_id;
> kni->mbuf_size = conf->mbuf_size;
>
> + dev_info.iova_mode = (rte_eal_iova_mode() == RTE_IOVA_VA) ? 1 : 0;
> +
The application using the "iova_mode" requires a specific mempool requirements,
and just updating sample application won't solve the problem here.
What do you think making "iova_mode" user configurable instead of making it
automatically set in the library? So the application that can justify the
requirement can set the "iova_mode".
And make "iova_mode" disabled by default.
To be able to remove the 'kni' check in the eal, still need to check
'rte_eal_iova_mode()', what about following
a) iova_mode=pa && "rte_eal_iova_mode() == RTE_IOVA_PA" ==> Run KNI
b) iova_mode=pa && "rte_eal_iova_mode() == RTE_IOVA_VA" ==> Return error
c) iova_mode=va && "rte_eal_iova_mode() == RTE_IOVA_PA" ==> Run KNI
d) iova_mode=va && "rte_eal_iova_mode() == RTE_IOVA_VA" ==> Run KNI
For b) the workaround for the user want to run KNI can be user giving eal
parameter to force DPDK to IOVA=PA mode.
More information about the dev
mailing list