> -----Original Message-----
> From: Vamsi Krishna Attunuru
> Sent: Wednesday, October 16, 2019 4:56 PM
> To: Stephen Hemminger <step...@networkplumber.org>; Yigit, Ferruh
> <ferruh.yi...@linux.intel.com>
> Cc: dev@dpdk.org; tho...@monjalon.net; Jerin Jacob Kollanukkaran
> <jer...@marvell.com>; olivier.m...@6wind.com; ferruh.yi...@intel.com;
> anatoly.bura...@intel.com; arybche...@solarflare.com; Kiran Kumar
> Kokkilagadda <kirankum...@marvell.com>
> Subject: RE: [EXT] Re: [dpdk-dev] [PATCH v10 4/5] kni: add IOVA=VA support in
> KNI module
>
>
>
> > -----Original Message-----
> > From: Stephen Hemminger <step...@networkplumber.org>
> > Sent: Tuesday, October 15, 2019 9:16 PM
> > To: Yigit, Ferruh <ferruh.yi...@linux.intel.com>
> > Cc: Vamsi Krishna Attunuru <vattun...@marvell.com>; dev@dpdk.org;
> > tho...@monjalon.net; Jerin Jacob Kollanukkaran <jer...@marvell.com>;
> > olivier.m...@6wind.com; ferruh.yi...@intel.com;
> > anatoly.bura...@intel.com; arybche...@solarflare.com; Kiran Kumar
> > Kokkilagadda <kirankum...@marvell.com>
> > Subject: [EXT] Re: [dpdk-dev] [PATCH v10 4/5] kni: add IOVA=VA support
> > in KNI module
> >
> > External Email
> >
> > ----------------------------------------------------------------------
> > On Tue, 15 Oct 2019 16:43:08 +0100
> > "Yigit, Ferruh" <ferruh.yi...@linux.intel.com> wrote:
> >
> > > On 8/16/2019 7:12 AM, vattun...@marvell.com wrote:
> > > > From: Kiran Kumar K <kirankum...@marvell.com>
> > > >
> > > > Patch adds support for kernel module to work in IOVA = VA mode,
> > > > the idea is to get physical address from IOVA address using
> > > > iommu_iova_to_phys API and later use phys_to_virt API to convert
> > > > the physical address to kernel virtual address.
> > > >
> > > > When compared with IOVA = PA mode, there is no performance drop
> > > > with this approach.
> > > >
> > > > This approach does not work with the kernel versions less than
> > > > 4.4.0 because of API compatibility issues.
> > > >
> > > > Patch also updates these support details in KNI documentation.
> > > >
> > > > Signed-off-by: Kiran Kumar K <kirankum...@marvell.com>
> > > > Signed-off-by: Vamsi Attunuru <vattun...@marvell.com>
> > >
> > > <...>
> > >
> > > > @@ -348,15 +351,65 @@ kni_ioctl_create(struct net *net, uint32_t
> > ioctl_num,
> > > > strncpy(kni->name, dev_info.name, RTE_KNI_NAMESIZE);
> > > >
> > > > /* Translate user space info into kernel space info */
> > > > - kni->tx_q = phys_to_virt(dev_info.tx_phys);
> > > > - kni->rx_q = phys_to_virt(dev_info.rx_phys);
> > > > - kni->alloc_q = phys_to_virt(dev_info.alloc_phys);
> > > > - kni->free_q = phys_to_virt(dev_info.free_phys);
> > > > -
> > > > - kni->req_q = phys_to_virt(dev_info.req_phys);
> > > > - kni->resp_q = phys_to_virt(dev_info.resp_phys);
> > > > - kni->sync_va = dev_info.sync_va;
> > > > - kni->sync_kva = phys_to_virt(dev_info.sync_phys);
> > > > + if (dev_info.iova_mode) {
> > > > +#ifdef HAVE_IOVA_AS_VA_SUPPORT
> > > > + pci = pci_get_device(dev_info.vendor_id,
> > > > + dev_info.device_id, NULL);
> > > > + if (pci == NULL) {
> > > > + pr_err("pci dev does not exist\n");
> > > > + return -ENODEV;
> > > > + }
> > >
> > > If there is no PCI device KNI should still work.
> >
> > Right now it is possible to use KNI with netvsc PMD on Hyper-V/Azure.
> > With this patch that won't be possible.
>
> Hi Ferruh, Stephen,
>
> These can be fixed by forcing iommu_mode as PA when vdevs are used for KNI
> usecase.
>
> rte_bus_get_iommu_class(void)
> {
> enum rte_iova_mode mode = RTE_IOVA_DC;
> + struct rte_devargs *devargs = NULL;
> bool buses_want_va = false;
> bool buses_want_pa = false;
> struct rte_bus *bus;
>
> + if (rte_eal_check_module("rte_kni") == 1) {
> + RTE_EAL_DEVARGS_FOREACH("vdev", devargs) {
> + return RTE_IOVA_PA;
> + }
> + }
> +
> TAILQ_FOREACH(bus, &rte_bus_list, next) {
> enum rte_iova_mode bus_iova_mode;
>
> I think this will solve various use cases/combinations like PA or VA mode,
> pdev or
> vdev used for KNI.
> Existing use cases would not be affected by these patch series with above fix.
Hi Ferruh, Stephen,
Pushed a patch for above mentioned fix. Fix is moved to vdev bus driver.
Patch adds get_iommu_class callback in vdev bus driver and returns iova=pa for
kni usecase.
http://patches.dpdk.org/patch/61312/