On 6/25/2019 4:56 AM, vattun...@marvell.com wrote: > From: Vamsi Attunuru <vattun...@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 <vattun...@marvell.com> > Signed-off-by: Kiran Kumar K <kirankum...@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.