From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stephen Hemminger Subject: Re: management of non-PCI devices Date: Thu, 23 Jul 2015 09:51:20 -0700 Message-ID: <20150723095120.056dd0f2@urahara> References: <2330484.OMtusG3QG9@xps13> Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Cc: dev@dpdk.org To: Thomas Monjalon Return-path: Received: from mail-pa0-f51.google.com (mail-pa0-f51.google.com [209.85.220.51]) by dpdk.org (Postfix) with ESMTP id AB19AC3B6 for ; Thu, 23 Jul 2015 18:51:13 +0200 (CEST) Received: by pabkd10 with SMTP id kd10so88431362pab.2 for ; Thu, 23 Jul 2015 09:51:12 -0700 (PDT) In-Reply-To: <2330484.OMtusG3QG9@xps13> List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" On Thu, 23 Jul 2015 17:42:58 +0200 Thomas Monjalon wrote: > As noticed when reviewing the changes for hotplugging ring PMD, > http://dpdk.org/ml/archives/dev/2015-July/021872.html > a driver is considered in ethdev and EAL as a PCI driver: > > * Each Ethernet driver acts as a PCI driver and is represented by a generic > * *eth_driver* structure that holds: > * - An *rte_pci_driver* structure (which must be the first field). > * - The *eth_dev_init* function invoked for each matching PCI device. > * - The *eth_dev_uninit* function invoked for each matching PCI device. > * - The size of the private data to allocate for each matching device. > */ > struct eth_driver { > struct rte_pci_driver pci_drv; /**< The PMD is also a PCI driver. */ > eth_dev_init_t eth_dev_init; /**< Device init function. */ > eth_dev_uninit_t eth_dev_uninit; /**< Device uninit function. */ > unsigned int dev_private_size; /**< Size of device private data. */ > }; > > So the non PCI drivers don't use rte_eth_driver_register(). > Then a difference is made with these flags: > enum pmd_type { > PMD_VDEV = 0, > PMD_PDEV = 1, > }; > > With this kind of weird things: > static struct rte_driver rte_virtio_driver = { > .type = PMD_PDEV, > .init = rte_virtio_pmd_init, > }; > Because virtio is a virtual device with a virtual PCI address. > > All these things are not normal and make EAL code more and more difficult to > maintain. That's why we must stop accepting new code using these workarounds > and start working on a refactoring. > > Comments welcome The hyper-v driver which was posted here added a new bus type (vmbus) and it was not too painful. There were minimal changes to base EAL to make a union where pci_drv is used.