From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR01-DB5-obe.outbound.protection.outlook.com (mail-db5eur01on0061.outbound.protection.outlook.com [104.47.2.61]) by dpdk.org (Postfix) with ESMTP id 88F8137AA for ; Fri, 2 Sep 2016 07:32:57 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=ADNhJG6ORBYFRTCCP+MjxbpAA/SH099NhS7EIJGGKXc=; b=V1DPBzIBgfQvrfv6I83+mRnis8tBTaSm0+I297PBEiTetbryAfKR+OTh6sti1t00OYV0fWbQBbUj3jv0nMjh0I5UmTqkrX+lr9mgYz4Qkclw3wvmzCozSvmqT80dV35x5EFr1Y1HVLVfTuKQcLFablRYQmwXK3EsnfV9vwf3724= Received: from DB5PR0401MB2054.eurprd04.prod.outlook.com (10.166.11.137) by HE1PR04MB1609.eurprd04.prod.outlook.com (10.164.48.147) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384) id 15.1.599.8; Fri, 2 Sep 2016 05:32:55 +0000 Received: from DB5PR0401MB2054.eurprd04.prod.outlook.com ([10.166.11.137]) by DB5PR0401MB2054.eurprd04.prod.outlook.com ([10.166.11.137]) with mapi id 15.01.0609.006; Fri, 2 Sep 2016 05:32:55 +0000 From: Shreyansh Jain To: Jan Viktorin CC: "dev@dpdk.org" , "david.marchand@6wind.com" , "thomas.monjalon@6wind.com" , Hemant Agrawal Thread-Topic: [PATCH v8 00/25] Introducing rte_driver/rte_device generalization Thread-Index: AQHR/6HGuwufOiAMpUqcqg6gBJBDraBk/kgAgAC4pQA= Date: Fri, 2 Sep 2016 05:32:25 +0000 Deferred-Delivery: Fri, 2 Sep 2016 05:32:21 +0000 Message-ID: References: <1466510566-9240-1-git-send-email-shreyansh.jain@nxp.com> <1472219823-29486-1-git-send-email-shreyansh.jain@nxp.com> <20160901202928.7980378a@jvn> In-Reply-To: <20160901202928.7980378a@jvn> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=shreyansh.jain@nxp.com; x-originating-ip: [192.88.169.1] x-ms-office365-filtering-correlation-id: 63d61bf8-f815-4bb0-3fef-08d3d2f2977e x-microsoft-exchange-diagnostics: 1; HE1PR04MB1609; 6:zITJwLdCSNYIfFhzpIASmEd8tlPpImFncdQ9RjRczUJG2CpA0Xa9mH0cu9nEVNQ4PLA0ycM3Ok1/5Iry3Op4icCJYfpPg47AhOkB3lAL1vQZe8l25yosPrMSx0FvLMyqgAkFTZ/EM4KH/ovNhiuV+7qE22t3QMLtiLclhpSJkVcJnCSGDj8w9jbrvb+sgaI75I6VNGnsWC1PFGmUy6HfUigL9FypLSNrapusxNDS6s+YPSobZWa8n+PYO/vxhSmsBX7ZWb5WHhXp9cfm10owWVlXTg9zQEgbm1bKaPlPGeKOKVmruq0gzkUSibvLrn1EuGkX0zrNlDpbNo0N1uArNA==; 5:2f64IlS3RXvDLWWp0kiVg7llljvIDAS/qTJreHF5oANKPGAtMXrhOmp2poPfpKLhlX21ZxkeTPccBUglQ20w5t+qbDbV8ER4Fr+F4J/9mra8vmtw6SQ/fu+Ok9MpIe+n77AvpeP1dMasAlB+4YYE5Q==; 24:9DuArBhj1aL70lBIdchgycfwympCrptMTEZlTAxanCtVQk957lw5DY8dESZikfFTkBL+jrworXCQQ24r9ZJoYXJU40W26/HwRWOWe2Vbwew=; 7:2H1Pm9WwZEnpb4o8bB1Hf/as7vJX4Xx6CsAuA4BC6eyxewpU66PeVb5P/wAumtkcryId/uLmKK1kREcFdE3Z9RVXLpaQmtJyGM3wRgUNXzt2VLdS8WInIHma0TDsrzTL/yRYo5nst6VHMlNE/aVntcWnhN/0MX95CczX7owEA+LfC+WbkWs06lcku0LOGiTKqodYWk7RE9T1qFFpffYUYvhA8SJodbYfInnZItg1UaVYe6x/pEQvkjzVppQqCkw8 x-microsoft-antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:HE1PR04MB1609; x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(185117386973197); x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(6040176)(601004)(2401047)(5005006)(8121501046)(3002001)(10201501046)(6055026); SRVR:HE1PR04MB1609; BCL:0; PCL:0; RULEID:; SRVR:HE1PR04MB1609; x-forefront-prvs: 00531FAC2C x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(6009001)(7916002)(189002)(40764003)(199003)(377454003)(13464003)(252514010)(24454002)(7736002)(19580395003)(7696003)(2950100001)(2900100001)(345774005)(15974865002)(15975445007)(77096005)(189998001)(5002640100001)(122556002)(3280700002)(3660700001)(305945005)(5890100001)(87936001)(4326007)(7846002)(86362001)(10400500002)(575784001)(2906002)(11100500001)(105586002)(9686002)(106116001)(76576001)(106356001)(74316002)(50986999)(76176999)(8936002)(54356999)(5660300001)(68736007)(92566002)(81156014)(81166006)(101416001)(33656002)(66066001)(97736004)(19580405001)(8676002)(3846002)(6116002)(102836003)(15395725005)(586003)(110136002)(21314002)(579004); DIR:OUT; SFP:1101; SCL:1; SRVR:HE1PR04MB1609; H:DB5PR0401MB2054.eurprd04.prod.outlook.com; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; received-spf: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-originalarrivaltime: 02 Sep 2016 05:32:55.3492 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR04MB1609 Subject: Re: [dpdk-dev] [PATCH v8 00/25] Introducing rte_driver/rte_device generalization X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 02 Sep 2016 05:32:57 -0000 Hi Jan, > -----Original Message----- > From: Jan Viktorin [mailto:viktorin@rehivetech.com] > Sent: Thursday, September 01, 2016 11:59 PM > To: Shreyansh Jain > Cc: dev@dpdk.org; david.marchand@6wind.com; thomas.monjalon@6wind.com; He= mant > Agrawal > Subject: Re: [PATCH v8 00/25] Introducing rte_driver/rte_device generaliz= ation >=20 > Hi Shreyansh, >=20 > I am sorry to be quiet on this thread. I am traveling in those > two weeks and have some vacation. However, I passively follow the > conversation. Thank you for your work so far! No issues. Thanks for your help. >=20 > Regards > Jan >=20 > On Fri, 26 Aug 2016 19:26:38 +0530 > Shreyansh Jain wrote: >=20 > > Based on master (e22856313fff2) > > > > Background: > > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > > > > It includes two different patch-sets floated on ML earlier: > > * Original patch series is from David Marchand [1], [2]. > > `- This focused mainly on PCI (PDEV) part > > `- v7 of this was posted by me [8] in August/2016 > > * Patch series [4] from Jan Viktorin > > `- This focused on VDEV and rte_device integration > > > > Introduction: > > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > > > > This patch series introduces a generic device model, moving away from P= CI > > centric code layout. Key change is to introduce rte_driver/rte_device > > structures at the top level which are inherited by > > rte_XXX_driver/rte_XXX_device - where XXX belongs to {pci, vdev, soc (i= n > > future),...}. > > > > Key motivation for this series is to move away from PCI centric design = of > > EAL to a more hierarchical device model - pivoted around a generic driv= er > > and device. Each specific driver and device can inherit the common > > properties of the generic set and build upon it through driver/device > > specific functions. > > > > Earlier, the EAL device initialization model was: > > (Refer: [3]) > > > > -- > > Constructor: > > |- PMD_DRIVER_REGISTER(rte_driver) > > `- insert into dev_driver_list, rte_driver object > > > > rte_eal_init(): > > |- rte_eal_pci_init() > > | `- scan and fill pci_device_list from sysfs > > | > > |- rte_eal_dev_init() > > | `- For each rte_driver in dev_driver_list > > | `- call the rte_driver->init() function > > | |- PMDs designed to call rte_eth_driver_register(eth_driver) > > | |- eth_driver have rte_pci_driver embedded in them > > | `- rte_eth_driver_register installs the > > | rte_pci_driver->devinit/devuninit callbacks. > > | > > |- rte_eal_pci_probe() > > | |- For each device detected, dev_driver_list is parsed and matchin= g is > > | | done. > > | |- For each matching device, the rte_pci_driver->devinit() is call= ed. > > | |- Default map is to rte_eth_dev_init() which in turn creates a > > | | new ethernet device (eth_dev) > > | | `- eth_drv->eth_dev_init() is called which is implemented by > > `--| individual PMD drivers. > > > > -- > > > > The structure of driver looks something like: > > > > +------------+ ._____. > > | rte_driver <-----| PMD |___ > > | .init | `-----` \ > > +----.-------+ | \ > > `-. | What PMD actually is > > \ | | > > +----------v----+ | > > | eth_driver | | > > | .eth_dev_init | | > > +----.----------+ | > > `-. | > > \ | > > +------------v---+ > > | rte_pci_driver | > > | .pci_devinit | > > +----------------+ > > > > and all devices are part of a following linked lists: > > - dev_driver_list for all rte_drivers > > - pci_device_list for all devices, whether PCI or VDEV > > > > > > From the above: > > * a PMD initializes a rte_driver, eth_driver even though actually it i= s a > > pci_driver > > * initialization routines are passed from rte_driver->pci_driver->eth_= driver > > even though they should ideally be rte_eal_init()->rte_pci_driver() > > * For a single driver/device type model, this is not necessarily a > > functional issue - but more of a design language. > > * But, when number of driver/device type increase, this would create p= roblem > > in how driver<=3D>device links are represented. > > > > Proposed Architecture: > > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > > > > A nice representation has already been created by David in [3]. Copying= that > > here: > > > > +------------------+ +-------------------------------+ > > | | | | > > | rte_pci_device | | rte_pci_driver | > > | | | | > > +-------------+ | +--------------+ | | +---------------------------+ | > > | | | | | | | | | | > > | rte_eth_dev +---> rte_device +-----> rte_driver | | > > | | | | char name[] | | | | char name[] | | > > +-------------+ | | | | | | int init(rte_device *) | | > > | +--------------+ | | | int uninit(rte_device *) | | > > | | | | | | > > +------------------+ | +---------------------------+ | > > | | > > +-------------------------------+ > > > > - for ethdev on top of vdev devices > > > > +------------------+ +-------------------------------+ > > | | | | > > | drv specific | | rte_vdev_driver | > > | | | | > > +-------------+ | +--------------+ | | +---------------------------+ | > > | | | | | | | | | | > > | rte_eth_dev +---> rte_device +-----> rte_driver | | > > | | | | char name[] | | | | char name[] | | > > +-------------+ | | | | | | int init(rte_device *) | | > > | +--------------+ | | | int uninit(rte_device *) | | > > | | | | | | > > +------------------+ | +---------------------------+ | > > | | > > | int priv_size | > > | | > > +-------------------------------+ > > > > Representing from above, it would be: > > > > +--------------+ > > | rte_driver | > > | name | > > | | > > +------^-------+ pci_driver_list > > | / vdev_driver_list > > `---. <> / / > > |\____________/_______ / > > | / \ / > > +-----------/-----+ +--------/---------+ > > | rte_pci_driver | | rte_vdev_driver | > > | pci_devinit() | | vdev_devinit() | > > | pci_devuninit()| | vdev_devuninit()| > > | | | | > > +-----------------+ +------------------+ > > > > > > +--------------+ > > | rte_device | > > | name | > > | | > > +------^-------+ pci_device_list > > | / xxx_device_list > > `---. <> / / > > |\____________/________ / > > | / \ / > > +-----------/-----+ +--------/---------+ > > | rte_pci_device | | rte_xxx_device | > > | | | | > > | | | | > > | | | | > > +-----------------+ +------------------+ > > > > * Each driver type has its own structure which derives from the generi= c > > rte_driver structure. > > \- Each driver type maintains its own list, at the same time, rte_dr= iver > > list also exists - so that *all* drivers can be looped on, if req= uired. > > * Each device, associated with one or more drivers, has its own type > > derived from rte_device > > \- Each device _may_ maintain its own list (for example, in current > > implementation, vdev is not maintaining it). > > > > =3D=3DIntroducing a new device/driver type implies=3D=3D > > - creating their own rte_.h file which contains the device/drive= r > > definitions. > > - defining the DRIVER_REGISTER_XXX helpers > > > > > > =3D=3DHotplugging Support=3D=3D > > - devices should be able to support attach/detach operations. > > - Earlier these functions were part of ethdev. They have been moved t= o eal > > to be more generic. > > > > > > About the Patches: > > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > > > > There are a large number of patches for this - primarily because the ch= anges > > are quite varied and keeping them logically separate yet compilable is > > important. Most of the patches are small and those which are large touc= h the > > drivers (PMDs) to accommodate the structure changes: > > > > - Patches 0001~0003 are for introducing the container_of function (so = that > > rte_device can be obtained from rte_pci_device, for example), and > > removing unused code. > > - Patches 0004~0007 just perform the ground work for enabling change f= rom > > rte_driver/eth_driver based PMDs to rte_xxx_driver based PMDs > > - In patch 0008, all the pdev PMDs are changed to support rte_pci_driv= er ( > > including cryptodev, which is eventually generalized with PCI) > > - Patch 0009~0010 merge the crypto and pci functions for registration = and > > naming. > > - Patches 0011~0014 deal with hotplugging - hotplug no more invokes sc= an of > > complete bus and has been generalized into EAl from ethdev. > > - Patches 0015 introduces vdev init/uninit into separate C units and > > enables its compilation. Patch 0016~0017 build on it and remove the > > remaining legacy support for vdev/pdev distinctions. > > - Patches 0018~0022 enable the vdev drivers to register using the > > DRIVER_REGISTER_* operations, and remove their rte_driver->init() > > - Patch 0023 enables the rte_driver registration into a common driver > > linked list. > > - Patches 0024~0025 introduce the rte_device, a generalization of > > rte_xxx_device, and associated operation of creating rte_device link= ed > > list. It also enables the drivers to use rte_device.name/numa_node > > members rather than rte_xxx_device specific members. > > > > Notes: > > =3D=3D=3D=3D=3D=3D > > > > * Some sign-off were already provided by Jan on the original v5; But, a= s a > > large number of merges have been made, I am leaving those out just in= case > > it is not sync with initial understanding. > > > > * This might not be in-sync with pmdinfogen as PMD_REGISTER_DRIVER is > > removed [7]. > > > > References: > > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > > > > [1] http://dpdk.org/ml/archives/dev/2016-January/032387.html > > [2] http://dpdk.org/ml/archives/dev/2016-April/037686.html > > [3] http://dpdk.org/ml/archives/dev/2016-January/031390.html > > [4] http://dpdk.org/ml/archives/dev/2016-July/043645.html > > [5] http://dpdk.org/ml/archives/dev/2016-June/042439.html > > [6] http://dpdk.org/ml/archives/dev/2016-June/042444.html > > [7] http://dpdk.org/ml/archives/dev/2016-July/043172.html > > [8] http://dpdk.org/ml/archives/dev/2016-August/044941.html > > > > Changes since v7: > > - Rebase over master (e22856313fff2) > > - Merge the patch series by David [1][2] and Jan [4] into a single set > > hereafter, PCI and VDEV, both are re-factored for rte_device/driver m= odel > > > > Changes since v6: > > - rebase over 16.07 (b0a1419) > > - DRIVER_REGISTER_PCI macro is now passed pci_drv rather than drv > > - review comments regarding missing information in log messages > > - new API additions to 16.11 map objects > > - review comment in [5] and [7] are not included in this series. > > > > Changes since v5: > > - Rebase over master (11c5e45d8) > > - Rename RTE_EAL_PCI_REGISTER helper macro to DRIVER_REGISTER_PCI to be= in > > sync > > with DRIVER_REGISTER_PCI_TABLE. [Probably, in future, both can be mer= ged] > > - Modifications to bnxt and thunderx driver PMD registration files for > > using the simplified PCI device registration helper macro > > > > Changes since v4: > > - Fix compilation issue after rebase on HEAD (913154e) in previous seri= es > > - Retain rte_eth_dev_get_port_by_name and rte_eth_dev_get_name_by_port = which > > were removed by previous patchset. These are being used by pdump libr= ary > > > > Changes since v3: > > - rebase over HEAD (913154e) > > - Update arguments to RTE_EAL_PCI_REGISTER macro as per Jan's suggestio= n > > - modify qede driver to use RTE_EAL_PCI_REGISTER > > - Argument check in hotplug functions > > > > Changes since v2: > > - rebase over HEAD (d76c193) > > - Move SYSFS_PCI_DRIVERS macro to rte_pci.h to avoid compilation issue > > > > Changes since v1: > > - rebased on HEAD, new drivers should be okay > > - patches have been split into smaller pieces > > - RTE_INIT macro has been added, but in the end, I am not sure it is us= eful > > - device type has been removed from ethdev, as it was used only by hotp= lug > > - getting rid of pmd type in eal patch (patch 5 of initial series) has = been > > dropped for now, we can do this once vdev drivers have been converted > > > > Shreyansh Jain (25): > > eal: define macro container_of > > eal: remove duplicate function declaration > > pci: no need for dynamic tailq init > > crypto: no need for a crypto pmd type > > drivers: align pci driver definitions > > eal: introduce init macros > > driver: init/uninit common wrappers for PCI drivers > > drivers: convert all pdev drivers as pci drivers > > driver: Remove driver register callbacks for crypto/net > > eal/pci: Helpers for device name parsing/update > > ethdev: do not scan all pci devices on attach > > eal: add hotplug operations for pci and vdev > > ethdev: convert to eal hotplug > > ethdev: get rid of device type > > eal: extract vdev infra > > eal: Remove PDEV/VDEV unused code > > drivers: convert PMD_VDEV drivers to use rte_vdev_driver > > eal: move init/uninit to rte_vdev_driver > > eal: remove PMD_DRIVER_REGISTER and unused pmd_types > > eal: rte_pci.h includes rte_dev.h > > eal: rename and move rte_pci_resource > > eal/pci: inherit rte_driver by rte_pci_driver > > eal: call rte_eal_driver_register > > eal: introduce rte_device > > eal/pci: Create rte_device list and fallback on its members > > > > app/test/test_pci.c | 10 +- > > app/test/virtual_pmd.c | 8 +- > > drivers/crypto/aesni_gcm/aesni_gcm_pmd.c | 7 +- > > drivers/crypto/aesni_mb/rte_aesni_mb_pmd.c | 7 +- > > drivers/crypto/kasumi/rte_kasumi_pmd.c | 7 +- > > drivers/crypto/null/null_crypto_pmd.c | 7 +- > > drivers/crypto/qat/qat_qp.c | 2 +- > > drivers/crypto/qat/rte_qat_cryptodev.c | 18 +- > > drivers/crypto/snow3g/rte_snow3g_pmd.c | 7 +- > > drivers/net/af_packet/rte_eth_af_packet.c | 11 +- > > drivers/net/bnx2x/bnx2x_ethdev.c | 36 +-- > > drivers/net/bnxt/bnxt_ethdev.c | 17 +- > > drivers/net/bonding/rte_eth_bond_api.c | 2 +- > > drivers/net/bonding/rte_eth_bond_pmd.c | 9 +- > > drivers/net/cxgbe/cxgbe_ethdev.c | 25 +-- > > drivers/net/cxgbe/cxgbe_main.c | 2 +- > > drivers/net/cxgbe/sge.c | 7 +- > > drivers/net/e1000/em_ethdev.c | 17 +- > > drivers/net/e1000/igb_ethdev.c | 41 +--- > > drivers/net/ena/ena_ethdev.c | 20 +- > > drivers/net/enic/enic_ethdev.c | 24 +- > > drivers/net/fm10k/fm10k_ethdev.c | 30 +-- > > drivers/net/i40e/i40e_ethdev.c | 31 +-- > > drivers/net/i40e/i40e_ethdev_vf.c | 26 +-- > > drivers/net/i40e/i40e_fdir.c | 2 +- > > drivers/net/ixgbe/ixgbe_ethdev.c | 48 +--- > > drivers/net/mlx4/mlx4.c | 21 +- > > drivers/net/mlx5/mlx5.c | 20 +- > > drivers/net/mpipe/mpipe_tilegx.c | 18 +- > > drivers/net/nfp/nfp_net.c | 28 +-- > > drivers/net/null/rte_eth_null.c | 11 +- > > drivers/net/pcap/rte_eth_pcap.c | 11 +- > > drivers/net/qede/qede_ethdev.c | 42 +--- > > drivers/net/ring/rte_eth_ring.c | 11 +- > > drivers/net/szedata2/rte_eth_szedata2.c | 28 +-- > > drivers/net/thunderx/nicvf_ethdev.c | 21 +- > > drivers/net/vhost/rte_eth_vhost.c | 11 +- > > drivers/net/virtio/virtio_ethdev.c | 28 +-- > > drivers/net/virtio/virtio_pci.c | 5 +- > > drivers/net/virtio/virtio_user_ethdev.c | 10 +- > > drivers/net/vmxnet3/vmxnet3_ethdev.c | 27 +-- > > drivers/net/vmxnet3/vmxnet3_rxtx.c | 2 +- > > drivers/net/xenvirt/rte_eth_xenvirt.c | 9 +- > > examples/ip_pipeline/init.c | 22 -- > > lib/librte_cryptodev/rte_cryptodev.c | 71 ++---- > > lib/librte_cryptodev/rte_cryptodev.h | 2 - > > lib/librte_cryptodev/rte_cryptodev_pmd.h | 45 ++-- > > lib/librte_cryptodev/rte_cryptodev_version.map | 8 +- > > lib/librte_eal/bsdapp/eal/Makefile | 1 + > > lib/librte_eal/bsdapp/eal/eal_pci.c | 54 ++++- > > lib/librte_eal/bsdapp/eal/rte_eal_version.map | 7 + > > lib/librte_eal/common/Makefile | 2 +- > > lib/librte_eal/common/eal_common_dev.c | 95 ++++---- > > lib/librte_eal/common/eal_common_pci.c | 34 ++- > > lib/librte_eal/common/eal_common_vdev.c | 106 +++++++++ > > lib/librte_eal/common/eal_private.h | 20 +- > > lib/librte_eal/common/include/rte_common.h | 16 ++ > > lib/librte_eal/common/include/rte_dev.h | 77 +++++-- > > lib/librte_eal/common/include/rte_eal.h | 3 + > > lib/librte_eal/common/include/rte_pci.h | 53 +++-- > > lib/librte_eal/common/include/rte_tailq.h | 4 +- > > lib/librte_eal/common/include/rte_vdev.h | 96 ++++++++ > > lib/librte_eal/linuxapp/eal/Makefile | 1 + > > lib/librte_eal/linuxapp/eal/eal.c | 1 + > > lib/librte_eal/linuxapp/eal/eal_pci.c | 23 +- > > lib/librte_eal/linuxapp/eal/rte_eal_version.map | 10 + > > lib/librte_ether/rte_ethdev.c | 280 +++++-----------= ------- > - > > lib/librte_ether/rte_ethdev.h | 40 ++-- > > lib/librte_ether/rte_ether_version.map | 9 + > > 69 files changed, 784 insertions(+), 1020 deletions(-) > > create mode 100644 lib/librte_eal/common/eal_common_vdev.c > > create mode 100644 lib/librte_eal/common/include/rte_vdev.h > > >=20 >=20 >=20 > -- > Jan Viktorin E-mail: Viktorin@RehiveTech.com > System Architect Web: www.RehiveTech.com > RehiveTech > Brno, Czech Republic