From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pa0-f42.google.com (mail-pa0-f42.google.com [209.85.220.42]) by dpdk.org (Postfix) with ESMTP id AA9E7B6A5 for ; Fri, 20 Feb 2015 02:18:06 +0100 (CET) Received: by padfb1 with SMTP id fb1so3959986pad.8 for ; Thu, 19 Feb 2015 17:18:06 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:message-id:date:from:user-agent:mime-version:to :cc:subject:references:in-reply-to:content-type :content-transfer-encoding; bh=+ApijMCAge/dakXs77yRyiEvqH2u2IUOpJyuzDXfv00=; b=DkAVcRXnLTw14CKcaEOYkBMXyEVHJRKRypTZHK7DD+3aqxaAte9qOKwocSM2N//9vk gTIDSKNOHfWaZLjS2noYm12e/D5k9PH5O1KXjpPm18qvdvPrjzM37MgZ/1P0flLQpQd+ fC6dnPuZB4hs3y6NGPLRwBM2+kLcbpMh+DvYjpOz5o0xuCQ2QwUzpZ7/toX/rHqx4rSZ XvfzCyzaUQZulqDx24LoJP41zdrfogG+P1OA+Jt8dQozlDQHxQoBRCF4w8bSC0d3+47F BPzwuXXi2wREN8JCsY90sp1Wm65CEIEAbavxOwGQN0EDtmJn7Ey4dNCdC5WJmlFtB9Rt PV5Q== X-Gm-Message-State: ALoCoQkslsp4C7TQxJwZUg54xGMCj2WKAxw95qinoO5d4upx8jtKgPRVkjIEMhkxqPlTac+OtCMB X-Received: by 10.68.107.197 with SMTP id he5mr12300417pbb.93.1424395086089; Thu, 19 Feb 2015 17:18:06 -0800 (PST) Received: from [10.16.129.101] (napt.igel.co.jp. [219.106.231.132]) by mx.google.com with ESMTPSA id k14sm24927937pbq.53.2015.02.19.17.18.04 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 19 Feb 2015 17:18:05 -0800 (PST) Message-ID: <54E68B48.1080106@igel.co.jp> Date: Fri, 20 Feb 2015 10:18:00 +0900 From: Tetsuya Mukawa User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Thunderbird/31.4.0 MIME-Version: 1.0 To: "Iremonger, Bernard" , "dev@dpdk.org" 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> <8CEF83825BEC744B83065625E567D7C2049EB1D6@IRSMSX108.ger.corp.intel.com> In-Reply-To: <8CEF83825BEC744B83065625E567D7C2049EB1D6@IRSMSX108.ger.corp.intel.com> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit 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: Fri, 20 Feb 2015 01:18:07 -0000 On 2015/02/19 23:51, Iremonger, Bernard wrote: > >> -----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_dev_allocate >> >> This new parameter is needed to keep device type like PCI or virtual. >> Port detaching processes are different between PCI device and virtual device. >> RTE_ETH_DEV_PCI indicates device type is PCI. RTE_ETH_DEV_VIRTUAL indicates device is virtual. >> >> 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. >> >> 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(-) >> >> diff --git a/app/test/virtual_pmd.c b/app/test/virtual_pmd.c index 9fac95d..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; >> >> /* reserve an ethdev entry */ >> - eth_dev = rte_eth_dev_allocate(name); >> + eth_dev = rte_eth_dev_allocate(name, RTE_ETH_DEV_PCI); >> if (eth_dev == NULL) >> goto err; >> >> 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) } >> >> 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 = port_id; >> eth_dev->attached = DEV_ATTACHED; >> + eth_dev->dev_type = type; >> nb_ports++; >> return eth_dev; >> } >> @@ -262,6 +263,7 @@ rte_eth_dev_release_port(struct rte_eth_dev *eth_dev) >> return -EINVAL; >> >> eth_dev->attached = 0; >> + eth_dev->dev_type = 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); >> >> - eth_dev = rte_eth_dev_allocate(ethdev_name); >> + eth_dev = rte_eth_dev_allocate(ethdev_name, RTE_ETH_DEV_PCI); >> if (eth_dev == NULL) >> return -ENOMEM; >> >> @@ -424,6 +426,14 @@ rte_eth_dev_count(void) >> return (nb_ports); >> } >> >> +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 +531,17 @@ >> rte_eth_dev_is_detachable(uint8_t port_id) >> return -EINVAL; >> } >> >> + if (rte_eth_devices[port_id].dev_type == 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 = rte_eth_devices[port_id].driver->pci_drv.drv_flags; >> return !(drv_flags & RTE_PCI_DRV_DETACHABLE); } diff --git a/lib/librte_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 { }; >> >> /** >> + * 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 >> +*/ >> }; >> >> struct rte_eth_dev_sriov { >> @@ -1618,6 +1630,15 @@ extern uint8_t rte_eth_dev_count(void); >> >> /** >> * 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. I will fix it in next patch. Tetsuya > 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); >> >> /** >> * 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_version.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; >> >> 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, >> } >> >> /* reserve an ethdev entry */ >> - *eth_dev = rte_eth_dev_allocate(name); >> + *eth_dev = rte_eth_dev_allocate(name, RTE_ETH_DEV_VIRTUAL); >> if (*eth_dev == NULL) >> goto error; >> >> 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, uint8_t socket_id) >> } >> >> /* reserve an ethdev entry */ >> - eth_dev = rte_eth_dev_allocate(name); >> + eth_dev = rte_eth_dev_allocate(name, RTE_ETH_DEV_VIRTUAL); >> if (eth_dev == 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 unsigned nb_rx_queues, >> goto error; >> >> /* reserve an ethdev entry */ >> - *eth_dev = rte_eth_dev_allocate(name); >> + *eth_dev = rte_eth_dev_allocate(name, RTE_ETH_DEV_VIRTUAL); >> if (*eth_dev == NULL) >> goto error; >> >> 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; >> >> /* reserve an ethdev entry */ >> - eth_dev = rte_eth_dev_allocate(name); >> + eth_dev = rte_eth_dev_allocate(name, RTE_ETH_DEV_VIRTUAL); >> if (eth_dev == NULL) >> goto error; >> >> diff --git a/lib/librte_pmd_xenvirt/rte_eth_xenvirt.c b/lib/librte_pmd_xenvirt/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; >> >> /* reserve an ethdev entry */ >> - eth_dev = rte_eth_dev_allocate(name); >> + eth_dev = rte_eth_dev_allocate(name, RTE_ETH_DEV_VIRTUAL); >> if (eth_dev == NULL) >> goto err; >> >> -- >> 1.9.1