From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: multipart/mixed; boundary="===============3347322917701211348==" MIME-Version: 1.0 From: Thomas Monjalon Subject: Re: [SPDK] SPDK & DPDK in one process Date: Tue, 25 Oct 2016 22:53:53 +0200 Message-ID: <3132089.uuuRJKvomT@xps13> In-Reply-To: 1477351848.71904.43.camel@intel.com List-ID: To: spdk@lists.01.org --===============3347322917701211348== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Hi SPDK 2016-10-24 23:30, Walker, Benjamin: > On Sat, 2016-10-22 at 21:19 +0300, Gregory Etelson wrote: > > Hello > > = > > I need to run DPDK networking and access NVMe device in the same proces= s. > > = > > rte_eal_init() initializes network PMD drivers normally > > But spdk_nvme_probe() activates network devices probe for the second ti= me and > > rte exits with error. > > = > > To resolve this failure I register NVMe controller driver as DPDK PMD. > > Now I can pass NVMe device PCI address to EAL initialization with `-w' > > parameter along with network devices > > PMD template I use is attached below. > > = > > Is there another way to run DPDK and SPDK in the same process ? = > = > You found the best way right now, but I'm working with the DPDK community= to > improve here. It seems like the rte_pci module doesn't handle multiple ca= lls to > rte_eal_pci_probe, which is what SPDK is doing. The most important change= to > DPDK that needs to happen is that rte_eal_pci_probe needs to not call the= driver > initialization function for devices that already have a driver loaded. Th= at's a > very easy fix that solves your problem and I'll be submitting a patch to = the > DPDK community. > = > Longer term I think we really need to work with DPDK to clean up some of = these > PCI interfaces so they're more dynamic and can handle devices and drivers= coming > and going at run time. Yes you are welcome to contribute to DPDK. There is a slow work in progress to better design the EAL in order to ease integration of new buses and allow true hotplugging. We do these core changes step by step: After having better designed the device object, we are changing the bus mod= el. Instead of having PCI the default bus, and vdev an exception, we need a generic bus object to plug PCI, vdev and other buses in it. Then we should design a better app event mechanism, usable for hotplug. Another step could be an auto-binding. And at the end we could be plugged to hardware events like udev. --===============3347322917701211348==--