From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by dpdk.org (Postfix) with ESMTP id 11924B686 for ; Thu, 19 Feb 2015 15:51:30 +0100 (CET) Received: from orsmga002.jf.intel.com ([10.7.209.21]) by fmsmga102.fm.intel.com with ESMTP; 19 Feb 2015 06:51:29 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.09,609,1418112000"; d="scan'208";a="687920270" Received: from irsmsx109.ger.corp.intel.com ([163.33.3.23]) by orsmga002.jf.intel.com with ESMTP; 19 Feb 2015 06:51:28 -0800 Received: from irsmsx108.ger.corp.intel.com ([169.254.11.218]) by IRSMSX109.ger.corp.intel.com ([169.254.13.103]) with mapi id 14.03.0195.001; Thu, 19 Feb 2015 14:51:27 +0000 From: "Iremonger, Bernard" To: Tetsuya Mukawa , "dev@dpdk.org" Thread-Topic: [PATCH v9 12/14] ethdev: Add one dev_type parameter to rte_eth_dev_allocate Thread-Index: AQHQS+7XWS/xj7ZcPEaDE2mHvs42bZz4Dm8g Date: Thu, 19 Feb 2015 14:51:26 +0000 Message-ID: <8CEF83825BEC744B83065625E567D7C2049EB1D6@IRSMSX108.ger.corp.intel.com> References: <1424060073-23484-12-git-send-email-mukawa@igel.co.jp> <1424314187-25177-1-git-send-email-mukawa@igel.co.jp> <1424314187-25177-13-git-send-email-mukawa@igel.co.jp> In-Reply-To: <1424314187-25177-13-git-send-email-mukawa@igel.co.jp> Accept-Language: en-GB, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [163.33.239.181] Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Subject: Re: [dpdk-dev] [PATCH v9 12/14] ethdev: Add one dev_type parameter to rte_eth_dev_allocate 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: Thu, 19 Feb 2015 14:51:31 -0000 > -----Original Message----- > From: Tetsuya Mukawa [mailto:mukawa@igel.co.jp] > Sent: Thursday, February 19, 2015 2:50 AM > To: dev@dpdk.org > Cc: Qiu, Michael; Iremonger, Bernard; thomas.monjalon@6wind.com; Tetsuya = Mukawa > Subject: [PATCH v9 12/14] ethdev: Add one dev_type parameter to rte_eth_d= ev_allocate >=20 > This new parameter is needed to keep device type like PCI or virtual. > Port detaching processes are different between PCI device and virtual dev= ice. > RTE_ETH_DEV_PCI indicates device type is PCI. RTE_ETH_DEV_VIRTUAL indicat= es device is virtual. >=20 > v9: > - Fix commit log. > - RTE_ETH_DEV_PHYSICAL is replaced by RTE_ETH_DEV_PCI. > (Thanks to Thomas Monjalon) > v8: > - NONE_TRACE is replaced by NO_TRACE. > - Add missing symbol in version map. > (Thanks to Qiu, Michael and Iremonger, Bernard) > v4: > - Fix comments of rte_eth_dev_type. >=20 > Signed-off-by: Tetsuya Mukawa > --- > app/test/virtual_pmd.c | 2 +- > lib/librte_ether/rte_ethdev.c | 25 ++++++++++++++++++++++= +-- > lib/librte_ether/rte_ethdev.h | 25 ++++++++++++++++++++++= ++- > lib/librte_ether/rte_ether_version.map | 1 + > lib/librte_pmd_af_packet/rte_eth_af_packet.c | 2 +- > lib/librte_pmd_bond/rte_eth_bond_api.c | 2 +- > lib/librte_pmd_pcap/rte_eth_pcap.c | 2 +- > lib/librte_pmd_ring/rte_eth_ring.c | 2 +- > lib/librte_pmd_xenvirt/rte_eth_xenvirt.c | 2 +- > 9 files changed, 54 insertions(+), 9 deletions(-) >=20 > diff --git a/app/test/virtual_pmd.c b/app/test/virtual_pmd.c index 9fac95= d..c02644a 100644 > --- a/app/test/virtual_pmd.c > +++ b/app/test/virtual_pmd.c > @@ -556,7 +556,7 @@ virtual_ethdev_create(const char *name, struct ether_= addr *mac_addr, > goto err; >=20 > /* reserve an ethdev entry */ > - eth_dev =3D rte_eth_dev_allocate(name); > + eth_dev =3D rte_eth_dev_allocate(name, RTE_ETH_DEV_PCI); > if (eth_dev =3D=3D NULL) > goto err; >=20 > diff --git a/lib/librte_ether/rte_ethdev.c b/lib/librte_ether/rte_ethdev.= c index 3b64f3a..201c04a > 100644 > --- a/lib/librte_ether/rte_ethdev.c > +++ b/lib/librte_ether/rte_ethdev.c > @@ -227,7 +227,7 @@ rte_eth_dev_find_free_port(void) } >=20 > struct rte_eth_dev * > -rte_eth_dev_allocate(const char *name) > +rte_eth_dev_allocate(const char *name, enum rte_eth_dev_type type) > { > uint8_t port_id; > struct rte_eth_dev *eth_dev; > @@ -251,6 +251,7 @@ rte_eth_dev_allocate(const char *name) > snprintf(eth_dev->data->name, sizeof(eth_dev->data->name), "%s", name); > eth_dev->data->port_id =3D port_id; > eth_dev->attached =3D DEV_ATTACHED; > + eth_dev->dev_type =3D type; > nb_ports++; > return eth_dev; > } > @@ -262,6 +263,7 @@ rte_eth_dev_release_port(struct rte_eth_dev *eth_dev) > return -EINVAL; >=20 > eth_dev->attached =3D 0; > + eth_dev->dev_type =3D RTE_ETH_DEV_UNKNOWN; > nb_ports--; > return 0; > } > @@ -299,7 +301,7 @@ rte_eth_dev_init(struct rte_pci_driver *pci_drv, > /* Create unique Ethernet device name using PCI address */ > rte_eth_dev_create_unique_device_name(ethdev_name, pci_dev); >=20 > - eth_dev =3D rte_eth_dev_allocate(ethdev_name); > + eth_dev =3D rte_eth_dev_allocate(ethdev_name, RTE_ETH_DEV_PCI); > if (eth_dev =3D=3D NULL) > return -ENOMEM; >=20 > @@ -424,6 +426,14 @@ rte_eth_dev_count(void) > return (nb_ports); > } >=20 > +enum rte_eth_dev_type > +rte_eth_dev_get_device_type(uint8_t port_id) { > + if (!rte_eth_dev_is_valid_port(port_id)) > + return -1; > + return rte_eth_devices[port_id].dev_type; > +} > + > int > rte_eth_dev_save(struct rte_eth_dev *devs, size_t size) { @@ -521,6 +53= 1,17 @@ > rte_eth_dev_is_detachable(uint8_t port_id) > return -EINVAL; > } >=20 > + if (rte_eth_devices[port_id].dev_type =3D=3D RTE_ETH_DEV_PCI) { > + switch (rte_eth_devices[port_id].pci_dev->pt_driver) { > + case RTE_PT_IGB_UIO: > + case RTE_PT_UIO_GENERIC: > + break; > + case RTE_PT_VFIO: > + default: > + return -ENOTSUP; > + } > + } > + > drv_flags =3D rte_eth_devices[port_id].driver->pci_drv.drv_flags; > return !(drv_flags & RTE_PCI_DRV_DETACHABLE); } diff --git a/lib/librt= e_ether/rte_ethdev.h > b/lib/librte_ether/rte_ethdev.h index 90b7f25..4f66bb6 100644 > --- a/lib/librte_ether/rte_ethdev.h > +++ b/lib/librte_ether/rte_ethdev.h > @@ -1523,6 +1523,17 @@ struct eth_dev_ops { }; >=20 > /** > + * The eth device type > + */ > +enum rte_eth_dev_type { > + RTE_ETH_DEV_UNKNOWN, /**< unknown device type */ > + RTE_ETH_DEV_PCI, > + /**< Physical function and Virtual function of PCI devices */ > + RTE_ETH_DEV_VIRTUAL, /**< non hardware device */ > + RTE_ETH_DEV_MAX /**< max value of this enum */ > +}; > + > +/** > * @internal > * The generic data structure associated with each ethernet device. > * > @@ -1541,6 +1552,7 @@ struct rte_eth_dev { > struct rte_pci_device *pci_dev; /**< PCI info. supplied by probing */ > struct rte_eth_dev_cb_list callbacks; /**< User application callbacks *= / > uint8_t attached; /**< Flag indicating the port is attached */ > + enum rte_eth_dev_type dev_type; /**< Flag indicating the device type > +*/ > }; >=20 > struct rte_eth_dev_sriov { > @@ -1618,6 +1630,15 @@ extern uint8_t rte_eth_dev_count(void); >=20 > /** > * Function for internal use by port hotplug functions. > + * Get the device type to know whether the device is physical or virtual= . > + * @param port_id The pointer to the port id Hi Tetsuya, " The pointer to the port id" should be removed. Regards, Bernard. > + * @return > + * - Device type. > + */ > +extern enum rte_eth_dev_type rte_eth_dev_get_device_type(uint8_t > +port_id); > + > +/** > + * Function for internal use by port hotplug functions. > * Copies current ethdev structures to the specified pointer. > * > * @param devs The pointer to the ethdev structures > @@ -1706,10 +1727,12 @@ extern struct rte_eth_dev *rte_eth_dev_allocated(= const char *name); > * to that slot for the driver to use. > * > * @param name Unique identifier name for each Ethernet device > + * @param type Device type of this Ethernet device > * @return > * - Slot in the rte_dev_devices array for a new device; > */ > -struct rte_eth_dev *rte_eth_dev_allocate(const char *name); > +struct rte_eth_dev *rte_eth_dev_allocate(const char *name, > + enum rte_eth_dev_type type); >=20 > /** > * Function for internal use by dummy drivers primarily, e.g. ring-based= diff --git > a/lib/librte_ether/rte_ether_version.map b/lib/librte_ether/rte_ether_ver= sion.map > index 1d039ed..b78f5e3 100644 > --- a/lib/librte_ether/rte_ether_version.map > +++ b/lib/librte_ether/rte_ether_version.map > @@ -116,6 +116,7 @@ DPDK_2.0 { > rte_eth_dev_get_port_by_addr; > rte_eth_dev_get_changed_port; > rte_eth_dev_save; > + rte_eth_dev_get_device_type; >=20 > local: *; > }; > diff --git a/lib/librte_pmd_af_packet/rte_eth_af_packet.c > b/lib/librte_pmd_af_packet/rte_eth_af_packet.c > index 1ffe1cd..80e9bdf 100644 > --- a/lib/librte_pmd_af_packet/rte_eth_af_packet.c > +++ b/lib/librte_pmd_af_packet/rte_eth_af_packet.c > @@ -649,7 +649,7 @@ rte_pmd_init_internals(const char *name, > } >=20 > /* reserve an ethdev entry */ > - *eth_dev =3D rte_eth_dev_allocate(name); > + *eth_dev =3D rte_eth_dev_allocate(name, RTE_ETH_DEV_VIRTUAL); > if (*eth_dev =3D=3D NULL) > goto error; >=20 > diff --git a/lib/librte_pmd_bond/rte_eth_bond_api.c b/lib/librte_pmd_bond= /rte_eth_bond_api.c > index 4ab3267..7a6a5f7 100644 > --- a/lib/librte_pmd_bond/rte_eth_bond_api.c > +++ b/lib/librte_pmd_bond/rte_eth_bond_api.c > @@ -235,7 +235,7 @@ rte_eth_bond_create(const char *name, uint8_t mode, u= int8_t socket_id) > } >=20 > /* reserve an ethdev entry */ > - eth_dev =3D rte_eth_dev_allocate(name); > + eth_dev =3D rte_eth_dev_allocate(name, RTE_ETH_DEV_VIRTUAL); > if (eth_dev =3D=3D NULL) { > RTE_BOND_LOG(ERR, "Unable to allocate rte_eth_dev"); > goto err; > diff --git a/lib/librte_pmd_pcap/rte_eth_pcap.c b/lib/librte_pmd_pcap/rte= _eth_pcap.c > index d299288..af7fae8 100644 > --- a/lib/librte_pmd_pcap/rte_eth_pcap.c > +++ b/lib/librte_pmd_pcap/rte_eth_pcap.c > @@ -709,7 +709,7 @@ rte_pmd_init_internals(const char *name, const unsign= ed nb_rx_queues, > goto error; >=20 > /* reserve an ethdev entry */ > - *eth_dev =3D rte_eth_dev_allocate(name); > + *eth_dev =3D rte_eth_dev_allocate(name, RTE_ETH_DEV_VIRTUAL); > if (*eth_dev =3D=3D NULL) > goto error; >=20 > diff --git a/lib/librte_pmd_ring/rte_eth_ring.c b/lib/librte_pmd_ring/rte= _eth_ring.c > index d5b1686..c837fcd 100644 > --- a/lib/librte_pmd_ring/rte_eth_ring.c > +++ b/lib/librte_pmd_ring/rte_eth_ring.c > @@ -255,7 +255,7 @@ rte_eth_from_rings(const char *name, struct rte_ring = *const rx_queues[], > goto error; >=20 > /* reserve an ethdev entry */ > - eth_dev =3D rte_eth_dev_allocate(name); > + eth_dev =3D rte_eth_dev_allocate(name, RTE_ETH_DEV_VIRTUAL); > if (eth_dev =3D=3D NULL) > goto error; >=20 > diff --git a/lib/librte_pmd_xenvirt/rte_eth_xenvirt.c b/lib/librte_pmd_xe= nvirt/rte_eth_xenvirt.c > index 04e30c9..bc403d6 100644 > --- a/lib/librte_pmd_xenvirt/rte_eth_xenvirt.c > +++ b/lib/librte_pmd_xenvirt/rte_eth_xenvirt.c > @@ -648,7 +648,7 @@ eth_dev_xenvirt_create(const char *name, const char *= params, > goto err; >=20 > /* reserve an ethdev entry */ > - eth_dev =3D rte_eth_dev_allocate(name); > + eth_dev =3D rte_eth_dev_allocate(name, RTE_ETH_DEV_VIRTUAL); > if (eth_dev =3D=3D NULL) > goto err; >=20 > -- > 1.9.1